LBAが導入される前に、なぜCHSが開始され0,0,1
、開始されないの0,0,0
ですか?
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 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の計算に)。
zero sector
エラーコードや不良ブロックなどに使用されていた前に、CHSと「固定ブロックアーキテクチャ」への移行があったことがわかります。コントローラー(ファームウェア)をドライブに追加する移行と「論理」ディスクの関連付けの開始...コントローラーは表示されなくなりましたが、同じ方法で使用されていると推測できます...この用語は、「ホスト保護エリア」en.wikipedia.org/wiki/Fixed-block_architectureおよびen.wikipedia.org/wiki/Host_protected_area
1
、理由についての情報はまだ見つかりません(0
エラーフラグとして予約されているセクターと関係があるのではないかと思いますが)。私は何かに出くわした場合、私はあなたを必ず更新します。
私は歴史の追跡しようとした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を加算する必要がありました。
フロッピーディスクに関する最初の仕様は、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日に誕生しました...
技術的な理由はまったくありませんでした。