マルチブートオペレーティングシステムはどのように機能するのか

マルチブートオペレーティングシステムはどのように機能するのか

コンピューターは、接続されているすべてのデバイスの最初の 512 KB を検索して OS をロードすると読みました。そのメモリ領域がブート セクターとして機能する場合、コンピューターはその後のメモリ領域のロードを開始します。

この記事によると:https://www.gnu.org/software/grub/manual/multiboot/multiboot.html

同じハードディスクに複数のOSが存在すると、「連鎖」が実行されます。では、それらすべてが同じハードディスク上にある場合、マシンはどのようにしてジャンプの回数に応じて次のブートセクターを見つけるかを知るのでしょうか。
そして、連鎖とは何でしょうか。

答え1

コンピューターは、接続されているすべてのデバイスの最初の 512 KB を検索して OS をロードすると読みました。

PC BIOS はこれを実行しますが、必ずしも接続されているすべてのデバイスを対象とするわけではなく、読み取り方法がわかっていて、設定から読み取るように構成されているデバイスのみを対象とします。

新しい UEFI 標準を搭載した PC では、ハード ディスク上の EFI パーティションから直接ファイルを読み込むことができます。従来の BIOS は NTFS や FAT などのファイル システムを認識しませんが、UEFI はよりインテリジェントで、デバイスから実際にファイルを読み取ることができます。


BIOSの場合、ロードされるのは完全なOSではなく、第一段階ブートローダこの第 1 段階のブートローダは完全な OS をロードする場合がありますが、実際には DOS または他の非常に単純な OS の場合のみです。

通常、第 1 ステージのブートローダが起動し、第 2 ステージのブートローダ (古い NT/XP NTLDR、Windows Vista+ ブートローダwinload.exe、または GRUB) がロードされます。

ブートローダ (第 2 ステージ以上) は BIOS 以上の機能を備えており、構成ファイルまたはデータを読み取り、どの OS を起動するかのメニューを表示できます。ブートローダは、OS がロードされると上書きされます。

連鎖ブートローダが別のブートローダを呼び出す場所です。Windows は独自のブートローダでのみ起動するため、GRUB がインストールされている場合、GRUB は Windows をロードするために、BIOS がロードするはずの第 1 段階のブートローダをロードします。これはパーティションの最初のセクターに保存されていると思います。DOS でも同じことが行われます。

GRUB が OS を直接起動できる場合 (これはどの Linux でも可能です)、これは必要ありません。Linux は、他の OS とは異なり、自分自身とその initramdisk がメモリにどのように配置されるかをあまり気にしません。


UEFI は OS を直接ロードできますが、私の知る限り Windows はこれをサポートしていないため、通常は UEFI システムがwinload.exe代わりに直接ロードして実行します。

U-Boot (家庭用ルーターで実行されるもの) などの他の PC 以外のブートローダは、FAT および Linux ファイルシステムを理解し、そこから Linux を直接ロードして、OS を直接起動します。

答え2

コンピューターは、接続されているすべてのデバイスの最初の 512 KB を検索して OS をロードすると読みました。

ほぼ正解です。PC スタイルのハードウェアは、最初のセクター (512 バイト) を読み取ります (キロバイトではありません)。

そのスペースがブートセクターとして機能する場合、その後のスペースのロードを開始します。

これもほぼ正解です。従来のマザーボード ファームウェアには BIOS と呼ばれるものが含まれていました。PC の電源が入ると、それが実行されます。そのタスクの 1 つは、制御を別のデバイス (フロッピー ドライブなど) に渡すことでした。

より高度なバージョンでは、単一のデバイスだけではなく、複数のデバイスをチェックし、1つのデバイスがブートソリューションを提供できなかった場合は次のデバイスに進みます。たとえば、フロッピーからのブートを試み、それが失敗した場合はCDからのブートに進み、それが失敗した場合は最初のハードディスクからのブートを試みます。(初め複数のディスクがある場合にも興味深いです。

ほとんどの場合、ハードディスクの最初のセクターを読み取ります。ハードディスクには通常、パーティション スキーム (IBM 互換 PC の場合は MBR) とブート コードがあります。その後、一連のローダーに従います。

たとえば、ファームウェアは単一のブートセクターをロードし、その中のコードを起動します。

そのセクターから読み取られたコードは、ディスクについてより詳しく理解し、より大きなプログラムをロードします。(必要に応じて、より多くのステージで繰り返します)。

同じハードディスク上に存在する複数の OS は「チェーン化」を実行します。

OS は連鎖を実行しません。ただし、後の段階の 1 つが高度なブートローダー プログラム (grub など) である場合は、ユーザー入力を要求し、それに応じてさまざまな方法で続行できます。たとえば、Linux カーネルをロードし、NTloader をロードして起動できます。

関連情報