
LBA が導入される前は、なぜ CHS は0,0,1
ではなくから始まるのでしょうか0,0,0
?
答え1
残念ながら、これは当時人気があったCHSアドレス指定方式が実装され、採用された方法に過ぎません。これは、ディスクアクセスに使用されるBIOS割り込みにおいてIBM互換コンピュータの公式規則として採用され、今日までこの規則が使用されている理由を説明しています。ECMA-107 標準、 情報交換用ディスクカートリッジのボリュームとファイル構造(これは原文にも記載されているATA-1仕様):
6.1.3 論理セクタ番号
ボリューム上の各セクターは、論理セクター番号によって識別されます。[...]論理セクター番号は、セクター1、トラック00、サイド0から始まり、0から始まる昇順で割り当てられる。続いて、トラック 00、サイド 1 (FDC が両面に記録可能な場合)、次にトラック 01、サイド 0 と続きます。
この問題は、いくつかのハードディスク、ここで、与えられた論理CHS住所が物理CHSアドレス場所。これについては、Seagate ATA インターフェイス リファレンス マニュアルそこには次のような興味深い物語が含まれています。
5.1 論理ブロックアドレス
[...] ドライブ上のセクターは、シリンダー 0 / ヘッド 0 / セクター 1 の LBA 0 で線形にマップされていると想定されます。
[...] すべての変換モードでは、C=0、H=0、S=1 は LBA=0 と同等です。この式は一方向にしか機能しないため、すべての変換モードですべての論理ブロック アドレスに等しい CHS を計算することはできません。これは、CHS にはセクター 0 がないため、論理ブロック アドレス指定がアクセスできるすべてのセクターの 1/256 に CHS アドレス指定がアクセスできないためです。
したがって、論理CHSアドレス指定では、最初のシリンダ/ヘッドインデックスは0ベースのオフセットから始まり、最初のセクタインデックスは1(例えば、最小CHSアドレスは0/0/1)これは、物理的なこのセクターの位置。最初の物理的なディスク上のセクターは「セクター1」と呼ばれ、CHS 0/0/1を占めます。実際、ほとんどのプログラミング言語では「最初の」要素は0から始まります。論理的なCHSアドレス0/0/1のセクターのアドレスはゼロ(0x00
)。
これは論理的に非常に意味をなす(つまり、「ゼロ番目」論理的な住所が最初の物理的なディスクデバイスを他のメモリデバイスと同様にアドレス指定できるため(各セクターには物理セクターにマップするための一意の線形アドレスがあるため)、LBAがゼロから始まるのは理にかなっています。実際、CHSアドレス0/0/1をLBAに変換する結果の LBA は次のようになります0x00000000
(これが、ほとんどの CHS から LBA への計算でセクター インデックスから 1 が減算され、LBA から CHS への計算でインデックスに 1 が加算される理由です)。
答え2
私は歴史を辿ろうとした中国語そして「1から始まる」セクター番号付けの失敗は、ディスクドライバのライターに多くの複雑な問題を引き起こし、インド。
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 の事実上の実装によってセクター番号を 0 ベースから 1 ベースに変換したのは IBM/PC でした。
IBMパーソナルコンピュータ(モデル5150)の開発に配属された12人のIBMエンジニアのうち、デビッド・J・ブラッドリーBIOS のコードを開発しました。したがって、他のすべての詳細の中でも、ディスク割り込みのパラメータを決定したのは彼です。また、有名な CTRL+ ALT+もこの人物と Mel Hallerman のおかげですDEL。
それで答え質問に対して
CHS ではセクター数が 0 ではなく 1 から始まるのはなぜですか?は :
デビッド・J・ブラッドリーがBIOSをそのようにプログラムしたからだ。
なぜ彼がこのようにしたのかについては、彼自身が答えるのが一番です。推測するなら、彼はセクター 0 をアドレス指定セクターとして残し、それによってドライバーがヘッドが正しい軌道上にあることを確認できるようにしたのだと思います。
ディスクは実際にはそのようなメカニズムを必要としないように設計されており、エンジニアは BIOS のために 1 つのセクターを無駄にすることを好まなかったため、セクター 0 は存在しませんでした。その後、ドライバ作成者は、すべての BIOS ディスク呼び出しに対してセクター アドレスから 1 を減算および加算する必要がありました。
答え3
フロッピー ディスクの最初の仕様は、IBM 3740 の登場とともに IBM によって作成されましたが、システム用に予約されているセクターがあることは言及されていません。システム用に予約されているのはトラック 00 のみで、トラック 01 から 76 に保存されている情報の種類を識別する「データ セット ラベル」のみが格納されます。最初のセクターが SECTOR 1 であることが明確に定義されています。これは偶然ではなく、コンピューターの番号付けに対する自然な番号付けの問題です。
人間が何かを数え始めるとき、それは 0 ではなく 1 から始まることがわかります。たとえば、教室に 135 人の生徒がいるとします。数を数えると、1、2、3、... 134、135 のようになります。
数値で表すと次のようになります: 1、2、3、... 134、135 ここまでは同意できますね?
では、0で表されない数字を入れてみましょう。次のようになります: 001、002、003、...、015、016、...、099、100、...、133、134、135
これは、中国語: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 インチ ディスケットにデータが記録されました。IBM PC 5150 は 1981 年 8 月 12 日に誕生しました。以前のデバイスとの互換性を維持する必要があったことを忘れてはなりません。
技術的な理由はまったくありませんでした。