3

これはOS固有のものかもしれません(私はLinuxで作業しています)。BIOS がブートローダーをメモリに取り込み、CPU がそれを実行し始めるとき、どのように OS を見つけますか? 特別なディスク パーティション/ウェルノウン セクタなどに保存されていますか? ファイル システムに格納されている場合、ブート ローダーは、OS に格納されているファイル システム コードと対話する必要があります。この鶏卵問題はどのように解決されますか?

4

2 に答える 2

6

ブートローダーはいくつかの部分に分類されます。まず、BIOS は、MBR (マスター ブート レコード) と呼ばれる非常に特殊な形式に一致するコードをフェッチします。古いコンピュータを思い出してください: BIOS に、その MBR を検索するためにデバイスをブラウズする順序を伝える必要があります。MBR (MBR の長さは 512 バイトで、マジック ナンバー – で終わります) が見つかると、このコードの一部を物理メモリ ( x86 の場合)0x55aaの特定のオフセットにコピーし、命令ポインターをこのアドレスに設定します。0x7c00ほとんどの場合、MBR にはパーティション テーブルが含まれており、実際のシステムのロードに役立つ追加のコードをデバイスからロードします。これはチェーン ロードまたはマルチステージ ロードと呼ばれます。

その最後の点を詳しく説明しましょう。その時点でシステムはリアルモードで実行されているため、1MB の物理メモリしかアクセスできませんが、一方で、BIOS 割り込み呼び出しを介して非常に簡単な方法で HDD にアクセスできます。現在、オペレーティング システムは 1MB よりもはるかに多くのメモリを要求しており、完全なアドレス空間 (少なくとも 32 ビット システムでは 4GB) にアクセスできるようにするために、プロセッサをプロテクト モードに切り替える必要があります。ただし、システムがプロテクト モードになると、BIOS 割り込み呼び出しは使用できなくなり、HDD との入出力はDMAなどの複雑なセットアップ通信を経由する必要があります。であり、そのセットアップは通常、ブートローダーでは行われません。ブート ローダーは、リアル モードプロテクトモードを交互に切り替えます。HDD から 1MB のアドレス空間にセクターをフェッチし、プロテクト モードに切り替えてこのセクターを 4GB のアドレス空間のどこかにコピーし、最後にリアル モードに戻って別のセクターをフェッチします。 HDD。すべてのセクターがフェッチされ、物理メモリにコピーされると、ブートローダーが OS にジャンプします。

総括する:

  1. BIOS は、デバイスのリストを調べて、各デバイスの最初のセクターにある MBR を探します。最初のセクタの最後のハルワードがマジック ナンバーと一致する場合、MBR が検出されます。BIOS は MBR を物理メモリにコピーし、それにジャンプします。
  2. MBR にはパーティション テーブルが組み込まれているため、どの場所 (基本的には HDD のどのシリンダー ヘッド セクター) からより多くのコードを物理メモリにロードする必要があるかがわかります。このステップは、たとえば GRUB のロードである可能性があります。
  3. GRUB では、multiboot仕様を使用して OS を特定します。の詳細については、以下のリンクを確認してくださいmultiboot

次のリソースを参照してください。

于 2013-01-21T11:02:57.927 に答える
1

BootPrompt HOWTOはあなたの質問に関連しています。BIOSには、ブート ディスクの最初のセクターをロードするためのコード (FlashROM 内) が含まれています。その最初のセクターには、GRUB (または LILO) などのブートローダーが含まれています。GRUB はカーネルを RAM にロードします (いくつかの initrd を使用)。

BIOS 設定は、小さな (バッテリ節約) 特別な RAM に保持されます。

今日のGRUBは非常に複雑なプログラムです。ディスク パーティションと一般的なファイル システムの構造を認識します。構成ファイルを読み取ることができ、パーティションからカーネル (そのファイルで構成されている) を読み取ることができます。また、 initrd (必須のカーネル モジュールを含む)をロードすることもできます。

OSDEV wikiも参照してください

于 2013-01-21T06:06:39.143 に答える