LBAが導入される前は、CHSが0,0,1
ではなく0,0,0
で始まるのはなぜですか。
残念ながら、これは当時人気のあったCHSアドレッシングスキームが実装され、採用された方法です。これは、ディスクアクセスに使用されるBIOS割り込みでのIBM互換コンピュータの公式規則として採用され、この規則が今日まで使用されている理由を説明しています。から ECMA-107標準 、情報交換用のディスクカートリッジのボリュームとファイル構造(これは元の ATA- 1仕様 ):
6.1.3論理セクター番号
ボリューム上の各セクターは、論理セクター番号で識別されます。 [...]論理セクター番号は、0から始まり、セクター1、トラック00、サイド0から昇順で割り当てられます。トラック00、サイド1(FDCが両側で記録可能な場合)に進み、次にトラック01、サイド0などに進みます。
この問題は、 一部のハードディスク の仕様で対処されています。ここで、特定の論理CHSアドレスはとは異なることに注意してください。 )物理CHSアドレスの場所。これについては、 Seagate ATAインターフェイスリファレンスマニュアル で詳しく説明されています。これには、次の興味深い説明が含まれています。
5.1論理ブロックアドレス指定
[...]ドライブ上のセクターは、シリンダー0 /ヘッド0 /セクター1のLBA0で線形にマッピングされていると想定されます。
[...]すべての変換モードで、C = 0、H = 0、S = 1はLBA = 0と同等です。 この式は一方向でのみ機能するため、すべての変換モードですべての論理ブロックアドレスに対して同等のCHSを計算することはできません。これは、CHSにセクター0がないため、CHSアドレッシングが論理ブロックアドレッシングがアクセスできるすべての可能なセクターの1/256にアクセスできないためです。
したがって、論理CHSアドレス指定の場合、最初のシリンダー/ヘッドインデックスは0ベースのオフセットから始まり、最初のセクターインデックスは1から始まります。 (たとえば、可能な最小CHSアドレスは0/0/1です)、これはこのセクターの物理位置については何も変更しません。これは、ディスク上の最初の物理セクターが「セクター1」と呼ばれ、CHS0/0/1を占めると考えてください。実際、ほとんどのプログラミング言語の「最初の」要素は0ベースであるため、CHSアドレス0/0/1のセクターのlogicalアドレスはzero(0x00
)。
これは論理的にはるかに理にかなっています(つまり、「ゼロ番目」論理アドレスが最初の物理セクターです)。ディスクデバイスを他のメモリデバイスと同じようにアドレス指定します(各セクターには物理セクターにマップするための一意の線形アドレスがあるため)。したがって、LBAをゼロから開始することが理にかなっています。実際、 CHSアドレス0/0/1をLBAに変換 の場合、結果のLBAは0x00000000
になります(これが、ほとんどのCHSからLBAへのセクターインデックスから1が減算される理由です。計算、およびLBAからCHSへの計算のインデックスに1が追加される理由)。
[〜#〜] 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-ディスケットBIOSサービス 具体的には:
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でセクターカウントが0ではなく1から始まるのはなぜですか:
David J. BradleyがBIOSをそのようにプログラムしたため。
彼がこのようにそれをした理由に関しては、これは彼自身によって最もよく答えられます。私が推測しなければならないのであれば、彼は、ドライバーが頭が正しい軌道に乗っていることを確認できるアドレス指定セクターとしてセクター0を残したと言えます。
ディスクは実際にはそのようなメカニズムを必要としないように設計されており、エンジニアはBIOSのために1つのセクターを無駄にする準備ができていなかったため、セクター0は存在しませんでした。その後、ドライバーライターは、すべてのBIOSディスク呼び出しのセクターアドレスに1を減算し、1を加算する必要がありました。
フロッピーディスクに関する最初の仕様は、IBM 3740の外観でIBMによって作成されたものであり、システム用に予約されているセクターがあることについては言及されていません。システムの唯一の予約はトラック00で、トラック01から76に格納されている情報のタイプを識別する「データセットラベル」のみが格納されます。これは、最初のセクターがセクター1であることを明確に定義しています。これは偶然ではなく、コンピュータの番号付けに対する自然な番号付けの問題。
人間が何かを数え始めるとき、それはゼロではなく1から始まることがわかります。たとえば、教室に135人の生徒がいるとします。数を数えると、次のようになります。1、2、3 ... 134、135。
したがって、その数値表現は次のようになります。1、2、3、... 134、135これまでのところ、同意しますよね?
ここで、0で表されていない数字を入力します。001、002、003、...、015、016、...、099、100、...、133、134、135のようになります。
これは[〜#〜] chs [〜#〜]で起こることです:,0,1--0,0,2--0,0,3 ... ==
Excelシートの行またはデータベースの自動数値フィールドが0ではなく1で始まり、誰もこれについて何も言っていないことは重要です。
David J. BradleyはBIOSをそのようにスケジュールしましたか?
はい、でも彼は外に出ていませんでした。
SECTOR 0は、他の理由で予約されてユーザーから隠されていない限り、使用できないという技術的な理由はありません。原則として、すべてがそれを指し示すのは自然な番号付けの問題です。
GA21-9152-2ファイル番号3740-00,15
IBM3740データ入力システム
12ページ
ディスクの初期化
...各ディスクには、不規則なトラックを置き換えるための2つのスペアトラックが含まれています。さらに、初期化機能は、ディスケットのセクターアドレスのシーケンスを変更する手段を提供します。通常、セクターのシーケンスは番号順(1、2、3、... 25,26)です。
24ページ
ディスケットでのデータラベリング
初期化中に、データセットのデータセットラベルがディスケットのインデックストラック(トラック00)に磁気的に記録されます。このラベルの主な目的は、ディスケット上のデータセットの場所を示すことです
これは1973年のことでした。8インチディスケットにデータを記録しました。IBMPC5150は1981年8月12日に誕生しました...そして以前のデバイスとの互換性を維持する必要があったことを忘れることはできません。
技術的な理由はまったくありませんでした。