計算機の電源を入れ、オペレーティングシステムをスタートさせるのには、 おもしろいジレンマがあります。 定義により、計算機は オペレーティングシステムがスタートするまで何もする方法を知りません。 ディスクからプログラムを動かすのも含みます。 では、計算機はオペレーティングシステムなしに ディスクからプログラムを実行することができず、 オペレーティングシステムのプログラムがディスク上にあるのなら、 どうやってオペレーティングシステムをスタートさせるのでしょう?
この問題はほらふき男爵の冒険という本の中に 書かれている問題ととてもよく似ています。 登場人物がマンホールの下に半分落っこちて、 靴紐 (ブートストラップ) をつかんで自分を引っぱり、持ち上げるのです。 計算機の黎明期には、ブートストラップ という用語でオペレーティングシステムをロードする 機構のことを指していたのですが、 いまは短く “起動 (ブート)” と言います。
x86 ハードウェアでは、基本入出力システム (Basic Input/Output System: BIOS) にオペレーティングシステムをロードする責任があります。 オペレーティングシステムをロードするために、 BIOS がハードディスク上のマスターブートレコード (Master Boot Record: MBR) を探します。 MBR はハードディスク上の特定の場所になければなりません。 BIOS には MBR をロードし起動するのに十分な知識があり、 オペレーティングシステムをロードするために必要な作業の残りは MBR が実行できることを仮定しています。
ディスク上にオペレーティングシステムを一つだけ インストールしているなら、標準の MBR で十分です。 この MBR はディスク上の最初の起動可能なスライスを探し、 そのスライスにあるコードを起動して 残りのオペレーティングシステムをロードします。
ディスク上にオペレーティングシステムを複数インストールしているなら、 別の MBR -- 複数のオペレーティングシステムのリストを表示できて、 起動するオペレーティングシステムを選択できるような MBR -- をインストールすることができます。 FreeBSD はそのような MBR とともに配布されており、 この MBR をインストールすることもできます。 他のオペレーティングシステムのベンダも 標準 MBR に代わる MBR を提供しています。
FreeBSD ブートストラップシステムの残りは 3 段階に分かれます。 第 1 ステージは MBR によって起動されるもので、 MBR は計算機を特定の状態にするために必要なことだけ知っていて、 第 2 ステージを起動します。 第 2 ステージでは、第 3 ステージを起動する前に、 もうちょっとやることができます。 第 3 ステージでオペレーティングシステムのロード作業を完了します。 起動作業がこれらの 3 段階に分かれているのは、 PC の規格がステージ 1 とステージ 2 で実行できるプログラムのサイズに制限を課しているからです。 これらの作業をつなぎ合わせることによって、 FreeBSD はより柔軟なローダ (loader) を提供しているのです。
その後カーネルが起動し、デバイスの検出と初期化を開始します。 そしてカーネルの起動が終わると、制御はユーザープロセスの init(8) へ移されます。init(8) はまず ディスクが利用可能であることを確かめ、 ファイルシステムのマウント、 ネットワークで利用するネットワークカードのセットアップ、 そして通常 FreeBSD システムで初期時に起動されるすべてのプロセスの起動、 といったユーザーレベルでのリソース (資源) 設定を行ないます。