CHSのセクター番号アドレッシングが0ではなくセクター1で始まるのはなぜですか?


13

LBAが導入される前に、なぜCHSが開始され0,0,1、開始されないの0,0,0ですか?


1
「なぜセクターカウントが1から始まるのか...」 -実際には、セクターカウントではなく、セクター番号を参照しています。これらは、ディスク要求で使用される2つの異なるパラメーターです。 ディスクドライブにはインデックスと呼ばれる別個のエンティティがあるため、「セクタインデックス」もセクタ番号の貧弱な命名法です。
おがくず

回答:


8

残念ながら、これは当時普及していたCHSアドレス指定スキームが実装され、採用された方法です。これは、ディスクアクセスに使用されるBIOS割り込みでIBM互換コンピューターの公式規則として採用され、今日までこの規則が使用されている理由を説明しています。ECMA-107標準情報交換用のディスクカートリッジのボリューム及びファイル構造は、(これはまた、元に記載されているATA-1仕様):

6.1.3論理セクター番号

ボリューム上の各セクターは、論理セクター番号によって識別されます。[...] 論理セクター番号は、0から始まり、セクター1、トラック00、サイド0からトラック00、サイド1(FDCが両側で記録可能な場合)に続く昇順で割り当てられ、その後01、サイド0などを追跡します。

この問題は、特定の論理CHSアドレスが物理CHSアドレスの場所と異なることに留意されている一部のハードディスクの仕様で対処されています。これについては、Seagate ATA Interface Reference Manualでさらに詳しく説明されています。

5.1論理ブロックのアドレス指定

[...]ドライブのセクターは、シリンダー0 /ヘッド0 /セクター1のLBA 0で線形にマッピングされると想定されます。

[...]すべての変換モードで、C = 0、H = 0、S = 1はLBA = 0と同等です。この式は一方向でのみ機能するため、すべての変換モードですべての論理ブロックアドレスに対して同等のCHSを計算することはできません。これは、CHSにセクター0がないため、CHSアドレス指定は論理ブロックアドレス指定がアクセス可能なすべてのセクターの1/256にアクセスできないためです。

したがって、論理CHSアドレス指定の場合、最初のシリンダー/ヘッドインデックスは0から始まるオフセットから始まり、最初のセクターインデックスは1から始まります(たとえば、可能な最小CHSアドレスは0/0/1です)が、これについては何も変わりません物理的なこの分野の場所。CHS 0/0/1を占有する「セクター1」と呼ばれるディスク上の最初の物理セクターと考えてください。実際、ほとんどのプログラミング言語の「最初の」要素は0ベースであるため、CHSアドレス0/0/1のセクターの論理アドレスはゼロ0x00)です。

これは、論理的にはるかに理にかなっています(つまり、「ゼロ番目」の論理アドレスが最初の物理セクター)、ディスクデバイスを他のメモリデバイスとしてアドレス指定できるためです(各セクターは物理にマッピングする一意の線形アドレスを持っているため)セクター)、したがって、LBAがゼロから開始することが理にかなっている理由です。実際、CHSアドレス0/0/1をLBA変換すると、結果のLBAは0x00000000(ほとんどのCHSからLBAへの計算でセクターインデックスから1が減算され、LBAのインデックスに1が追加される理由です。 CHSの計算に)。


私はすでにこの質問に対する答えを理解していますが、答えを表示するコメントを残した人がそれを削除したと思います...とにかくこの質問をした理由は、私が読んだすべての人とすべてがあなたの基本的にあなたの正確な大部分の言葉。「彼らがそれを作った方法だ...」というこの答えは、人々が何かを構築するだけでなく、それを使用したくないという理由だけで使用しないため、本当に私を悩ませます...すべての...
ヨルダン・デイヴィス

1
CHR / CHS / LBAの履歴を見ると、MBBCCHHRを使用して可変長であったCHRがzero sectorエラーコードや不良ブロックなどに使用されていた前に、CHSと「固定ブロックアーキテクチャ」への移行があったことがわかります。コントローラー(ファームウェア)をドライブに追加する移行と「論理」ディスクの関連付けの開始...コントローラーは表示されなくなりましたが、同じ方法で使用されていると推測できます...この用語は、「ホスト保護エリア」en.wikipedia.org/wiki/Fixed-block_architectureおよびen.wikipedia.org/wiki/Host_protected_area
ジョーダンデイビス

@JordanDavisでは、ほとんどの場合、ホストで保護された領域はディスクの最後にあり、最初ではありません。確かに、最初のセクターの命名法が値として返されますが1理由についての情報はまだ見つかりません(0エラーフラグとして予約されているセクターと関係があるのではないかと思いますが)。私は何かに出くわした場合、私はあなたを必ず更新します。
ブレークスルー

FBAセクションの概要に関するウィキペディアのリンク、リストはECCとしては0番目のレコードですが、それは良さそうに聞こえます。
ジョーダンデイビス

@JordanDavis私はこの質問に賞金を追加しました。特に他の人からの意見を聞きたいので、特に理由については。他の答えのチャンス。
ブレークスルー

8

私は歴史の追跡しようとしたCHSを、ディスク・ドライバの作家のための多くの合併症を引き起こしたとする急激な上昇を与えたセクターナンバリング大失敗、「1から始まる」LBA

CHSは、パーソナルコンピュータがディスケットで実行され、BIOSが発明された頃にさかのぼります。これはウィキペディアが言うことです:

BIOS(Basic Input / Output System)という用語はGary Kildallによって発明され、1975年にCP / Mオペレーティングシステムに初めて登場し、ハードウェアと直接インターフェースするブート時にロードされるCP / Mのマシン固有の部分を説明します。

CP / M BIOSの調査により、文書CP / M情報アーカイブ:セクター番号がゼロで始まるBDOSシステムコールが見つかりました 。結論は次のとおりです。最初のCHSスキーマは実際にはゼロベースのセクターアドレスを使用していました

1ベースのセクターアドレスは、最初のIBP / PCで初めて導入されました。文書 INT 13-Diskette BIOS Servicesは具体的に言っています:

Most disk BIOS calls use the following parameter scheme:

    AH = function request number
    AL = number of sectors  (1-128 dec.)
    CH = cylinder number  (0-1023 dec.)
    CL = sector number  (1-17 dec.)    <--------!!!
    DH = head number  (0-15 dec.)
    DL = drive number (0=A:, 1=2nd floppy, 80h=drive 0, 81h=drive 1)
    DL = drive number (0=A:, 1=2nd floppy, 80h=C:, 81h=D:)
         Note that some programming references use (0-3) as the
         drive number which represents diskettes only.
    ES:BX = address of user buffer

したがって、事実上のBIOSの実装により、セクター番号をゼロベースから1ベースに変換したのはIBM / PCでした。

IBMパーソナルコンピューター(モデル5150)の作成に割り当てられた12人のIBMエンジニアのうち、David J. BradleyがBIOSのコードを開発しました。そのため、彼は、他のすべての詳細の中でも、ディスク割り込みのパラメーターを決定した人です。また、この男には有名なCTRL+ ALT+ メルハラーマンもい DELます。

だから答えは質問への セクタ数がCHSに1ない0から始まりない理由は次のとおりです。
デヴィッド・J.ブラッドリーは、BIOSそのようにプログラムされているので

彼がこのようにした理由については、これは自分で答えるのが一番です。推測しなければならない場合、彼は、ドライバーが頭が正しい軌道に乗っていることを確認できるアドレス指定セクターとしてセクター0を残したと言うでしょう。

ディスクは実際にそのようなメカニズムを必要としないように設計されており、エンジニアはBIOSのせいで1つのセクターを無駄にする準備ができていなかったため、セクター0は決して存在しませんでした。その後、ドライバーライターは、すべてのBIOSディスクコールのセクターアドレスに1を減算し、1を加算する必要がありました。


「私は彼がセクター0をアドレス指定セクターとして残したと言うだろう...」 -非論理的な推測。すべてのセクターには、シリンダー/ヘッド/セクターのアドレスを含む識別レコードがあります。ディスクコントローラーは、正しいシリンダーでシークが完了したことを検証するためにインデックスが出現するのを待つ必要はありません。頭の下で回転する次のセクターが検証のために読み取られます。
おがくず

「CH =シリンダー番号(0-1023 dec。)」 -オリジナルのIBM PC BIOSは、「トラック」番号にCHを使用します。CHは8ビットレジスタであるため、最大値は255のみです。-
おがくず

「CHSの歴史をたどってみたところ、LBAが急速に増加しました」 -明確にするために、「LBA」に関するこれらの議論はすべて、PCディスクインターフェイス、特にATAPI仕様にのみ関係しています。それ以外の場合、CHSとLBAは共存できます。たとえば、LBAを内部的に使用するファイルシステムをいくつか作成しましたが、アドレス指定をCHSに変換して、コントローラーインターフェイスごとに実際のディスクI / Oを実行しました。 「最初のCHSスキーマは、実際にはゼロベースのセクターアドレスを使用していました。」-本当ですが、それはCP / Mの前に起こりました。
おがくず

@sawdust:IBMの文書を引用するだけで、PC BIOSインターフェース用のレジスターの割り当てよりも前のことがあります。セクター0を予約アドレスとして設定することでBradleyが誤った、または誤った方向に送られたことは明らかですが、それが起こったことはないので、何のためかはわかりません。セクターのアドレス部分にもトラック番号が含まれていることを知らなかった可能性があります。または、このスペアセクターは、Bradleyの一般的なBIOSインターフェイスに引き継がれたディスケットのプロパティだったのかもしれません。IBM / PC BIOSがCHSのこの変更を担当したことのみを知っています。
ハリーマック

これらの問題に常にあるように、ラルフブラウンの割り込みリストは非常に貴重な情報を提供します。@sawdustがCHが8ビットレジスタであることについて書いたことは事実ですが、それはCXの使用方法ではありません。代わりに、CXにはシリンダー番号セクター番号の両方が詰め込まれていました(ただし、この拡張機能は明らかにフロッピーディスクではなくハードディスクにのみ適用されます。フロッピーディスクの場合、CLはセクター番号を保持し、CHはシリンダー番号を保持しました)。たとえば、Int 13 / AH = 02h、BIOS-DISK-READ SECTOR(S)INTO MEMORY入力パラメータの指定されたインターフェイスを比較します。
CVn

1

フロッピーディスクに関する最初の仕様は、IBMがIBM 3740の外観で作成したものであり、システム用に予約されたセクターがあることは言及していません。システムの唯一の予約はトラック00です。トラック00には、トラック01〜76に格納されている情報のタイプを識別する「データセットラベル」のみが格納されています。最初のセクターはSECTOR 1であることが明確に定義されていますが、これは偶然ではなく、コンピュータの番号付けに対する自然数の問題。

人間が何かを数え始めると、ゼロではなく1で始まることがわかります。たとえば、教室に135人の生徒がいるとします。数を数えるのは、そのようなものです。1、2、3 ...百三十四、百三十五。

したがって、その数値表現は次のようになります:1、2、3、... 134、135これまでのところ、同意しますか?

ここで、0で表されない数字を入力してみましょう。001、002、003、...、015、016、...、099、100、...、133、134、135のようになります。

これはCHSで起こることです:0,0,1-0,0,2-0,0,3 ...

Excelシートの行またはデータベースの自動数値フィールドが0ではなく1で始まり、誰もこれについて何も言っていないことが重要です。

David J. BradleyはBIOSをそのようにスケジュールしましたか?

はい、でも彼は外にいませんでした。

SECTOR 0が予約され、他の理由でユーザーから隠されない限り、SECTOR 0を使用できない技術的な理由はありません。原則として、それが指すものはすべて自然な番号付けの問題です。

GA21-9152-2ファイル番号3740-00,15
IBM 3740データ入力システム

ページ12
ディスクの初期化
...各ディスクには、不規則なトラックを置き換える2つのスペアトラックが含まれています。さらに、初期化機能は、ディスケット上のセクタアドレスのシーケンスを変更する手段を提供します。通常、セクターのシーケンスは番号順(1、2、3、... 25、26)
です。

24ページ
ディスク上
のデータラベル初期化中に、データセットのデータセットラベルは、ディスケットのインデックストラック(トラック00)に磁気的に記録されます。このラベルの主な目的は、ディスケット上のデータセットの場所を示すことです。

これは1973年のことでした。8 "ディスケットにデータを記録しました。IBMPC 5150は1981年8月12日に誕生しました...

技術的な理由はまったくありませんでした。


I / Oファームウェアインターフェース、でも現代のSSDディスクまたはフラッシュに等... /書き込み/コピー/フォーマットを読むためにI / O操作のための予約領域を持っている-そのドライバのために予約
ヨルダン・デイヴィス


はい、ただしSECTOR 0ではなくCYLINDER0。最初の仕様(IBM 3740)から、シリンダー0は「インデックスシリンダー」と呼ばれ、「INDEX CYLINDER LAYOUT」で指定された複数のデータを格納します。最近のディスクでは、このシリンダーは通常「シリンダー番号-1」、はい「-1」として割り当てられ、コントローラーのみがアクセスできます。セクター0が使用されなかった理由を説明するものは何もありません。CP/ Mなどの一部のオペレーティングシステムで見ることができますが、ハードウェアはIBM 3740に従って製造されているため、仮想的です。セクター1.なぜですか?「自然な番号付け」
-APO69
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.