ブートローダ
ディスクが見つかると、ブートローダ と呼ばれる、先頭 512 バイトに保存された実行可能コードへと操作権が移る しかし、多くのブートローダのサイズは 512 バイトよりも大きい
ブートローダではざっくりと以下を行う
1. ディスク から OS カーネルを見つけ出し、メモリに読み込む これにより、16 bit の化石のような OS にも対応できるようになっている
3. 特定の情報(e.g. メモリマップ など)を BIOS から聞き出し、OS のカーネルに渡す ブートローダを実装するには、アセンブリ を必要とする なので bootimage のような自動でカーネルの前にブートローダを置いてくれるツールも用意されている warning.icon bootimage は BIOS のみにしか対応しておらず、UEFI にも対応していない この規格では、ブートローダと OS の インタフェース が定義されており、Multiboot に準拠したブートローダであれば、同じくそれに準拠したすべての OS が読み込めるようになっている しかし、Multiboot や GNU GRUB にはいくつか問題点もある
そのため 64 bit ロングモード に変更するための CPU の設定は依然行う必要がある Multiboot はカーネルではなくブートローダがシンプルになるように設計されている
たとえば、通常とは異なるデフォルトページサイズでリンクされる必要があり、そうしないと GNU GRUB は Multiboot header を見つけることが出来ない
GNU GRUB も Multiboot もドキュメントが充実していない
カーネルファイルから ブータブルディスク のイメージを作るには、ホストシステムに GRUB がインストールされている必要がある そのため、Mac や Windows 上で OS を開発するのが難しくなる
参考: Multiboot 準拠の OS カーネル を Rust で実装する 参考