F.2. ブートプロセスの詳細
ブートプロセスの始まりは、使用するハードウェアプラットフォームによって異なります。しかし、一度カーネルが見つかり、ブートローダーによってロードされると、デフォルトのブートプロセスはすべてのアーキテクチャーで同じになります。この章では、主に x86 アーキテクチャーに焦点を当てます。
F.2.1. ファームウェアのインターフェイス
F.2.1.1. BIOS ベースの x86 システム
BIOS(Basic Input/Output System) は、ブートプロセスの最初のステップを制御するだけでなく、周辺機器への最下位レベルのインターフェイスを提供するファームウェアインターフェイスである。BIOS を搭載した x86 システムでは、プログラムは読み取り専用のパーマネントメモリーに書き込まれ、常に使用可能な状態になっています。システムが起動すると、プロセッサーはシステムメモリーの末尾にある BIOS プログラムを探し、実行する。
BIOS は一度ロードされると、システムをテストし、周辺機器を探し、チェックし、システムを起動するために有効なデバイスを見つけます。通常、光学ドライブや USB ストレージデバイスをチェックして起動可能なメディアを探し、それがなければシステムのハードディスクを探します。多くの場合、起動中に検索されるドライブの順番は BIOS の設定で制御されており、プライマリー IDE バスのマスター IDE か、ブートフラグが設定されている SATA デバイスを探します。そして、BIOS は、このデバイスの第 1 セクター (MBR(Master Boot Record) と呼ばれる) に存在するプログラムをメモリーにロードする。MBR はわずか 512 バイトの大きさで、パーティションテーブルとともに、ブートローダーと呼ばれるマシンを起動するためのマシンコード命令が格納されています。BIOS はブートローダープログラムを見つけてメモリーにロードすると、ブートプロセスの制御をブートローダーにゆだねます。
この第一段階のブートローダーは、MBR 上の小さなマシンコードバイナリーである。その唯一の仕事は、セカンドステージのブートローダー (GRUB) を探し出し、その最初の部分をメモリーにロードすることです。
F.2.1.2. UEFI ベースの x86 システム
UEFI(Unified Extensible Firmware Interface) は、BIOS と同様にブートプロセスを制御し (ブートサービス)、システムファームウェアとオペレーティングシステムの間のインターフェイスを提供する (ランタイムサービス) ために設計されています。BIOS とは異なり、CPU から独立した独自のアーキテクチャーと、独自のデバイスドライバーを備えているのが特徴です。UEFI はパーティションのマウントと特定のファイルシステムの読み込みが可能です。
UEFI を搭載した x86 コンピューターが起動すると、インターフェイスはシステムストレージを検索し、EFI システムパーティション (ESP) としてマークされた特定の グローバルユニーク識別子 (GUID) でラベル付けされたパーティションを探します。このパーティションには、EFI アーキテクチャー用にコンパイルされたアプリケーションが含まれ、OS 用のブートローダーやユーティリティーソフトウェアが含まれる場合があります。UEFI システムには EFI ブートマネージャーが 含まれており、デフォルトの設定からシステムを起動したり、起動するオペレーティングシステムを選択するようユーザーに促したりすることが可能です。ブートローダーが手動または自動で選択されると、UEFI はそれをメモリーに読み込み、ブートプロセスの制御をそれにゆだねる。