1

OSのブートストラッププロセスを理解しようとしています。いくつかの質問は私には明確ではありません。それらの 1 つ: ボリューム ブート レコードのブートストラップ コードは、ボリューム ブート レコードが存在するパーティションの 0 セクターの絶対 LBA アドレスをどのように認識しますか?

4

1 に答える 1

0

VBR 内には、従来の MS-DOS カーネル構造の下半分である BIOS にちなんで名付けられたBIOS パラメータ ブロックと呼ばれる構造があります。BIOS パラメータ ブロック内には、パーティションとそれを囲む (MBR スタイルの) パーティション テーブル エントリとの間の隠しセクタの数を示すフィールドがあります。VBR コードは単にそのフィールドをそれ自体から読み取り、それをボリューム相対ブロック アドレスに追加して、ディスクから読み取る LBA を生成します。

これが、Windows NT、MS/PC/DR-DOS、OS/2 などのオペレーティング システムを補助なしにセカンダリ パーティションから直接起動することができない理由です。プライマリ パーティションでは、BPB フィールドは単にボリュームの先頭の開始 LBA です。これは、相対的なパーティション テーブルがディスクのブロック #0 のプライマリ MBR であり、すべてが機能するためです。セカンダリ パーティションでは、MS-DOS バージョン 3 の癖により、それ以来互換性を維持する必要がありました。BPB フィールドは、それを含む「拡張パーティション」内の「論理ドライブ」のオフセットにすぎず、ブートコードは、ディスク上の完全に間違った場所でブート ボリュームの残りを探すため、機能しません。

ブート マネージャーは、その場で BPB を修正することで支援を提供します。もちろん、VBR コードはディスク上のコピーではなく、それ自体のメモリ内のコピーを読み取ります。そのため、ブート マネージャーは、VBR をメモリにロードするときに、セカンダリ パーティションの BPB のフィールドを正しい絶対値に調整するだけです。その後、すべてが機能します。

于 2011-03-09T00:48:50.810 に答える