その昔、どこかで聞いたことのある川柳ですが、なかなか的を射ています。ソフトウェアの無いコンピューターは、どうにも使い勝手の悪い置物になり下がってしまうのです。
WindowsやLinuxといったOS(Operating System)と呼ばれているソフトウェアも例外ではなく、メモリ上に格納されて初めてWindowsはWindowsとして、LinuxはLinuxとして機能します。
メモリに格納したソフトウェアも電源を切るとすべて消えてしまいます。厄介な事にOSといえど例外ではありません。
そのため現代のパソコンは電源を入れる(あるいは再起動の)たびに、どこか(通常はハードディスク)にあるOSをメモリの適切な位置に格納(ロード)する仕組みを備えているのです。
電源投入によって開始されるOS起動までの一連の動作を
ブート ストラップ(boot strap)といいます。
ブート ストラップとは直訳すれば編み上げブーツの靴紐のこと。編み上げブーツは靴紐をキッチリと丁寧に順序よく編んで行かないと上手く履けません。
OS 起動までの手順はかなり面倒で、手作業でやっていた初期の頃はそれは大変でした。この面倒な作業を、靴紐を編み上げる手順になぞらえてブート ストラップと呼ぶようになったのもうなずけます。
ブート ストラップの具体的な動作は、何をどのような順序で行っているのでしょう。
MS-DOS、Windows、Linuxの3つのOSを例としてその動作を追ってみます。
パソコンの起動は電源スイッチを押すだけで事足ります。その後の面倒なブート ストラップの動作はすべて自動で行われてOS(WindowsやLinux)が立ち上がってきます。
その時パソコンの内部では様々なテストや選択・確認といった処理が着々と進行している訳ですが、具体的には何が行われているのでしょう。
ブート ストラップの流れは大きく
システム BIOS(バイオス:Basic Input Output System)と
ブートローダーに分けることができます。それぞれは次のような動作を行います。
- システムBIOS (バイオス:Basic Input Output System)
パソコン本体が備えている機能で、ブートローダーを検出して起動します。
システムBIOSの実態はマザー ボード上のROMに格納されてます。
電源投入時最初に起動されます。
- ブートローダー
OSを検出・起動します。
ブートローダーはOSを格納しているディスクの先頭セクタに記録されています。
OSインストール時にブートローダーも同じディスクにインストールされます。
システムBIOSがチップセット等との共同作業でブートローダーを起動し、ブートローダーがディスク上のOSを起動します。
ブート ストラップの流れ
上の流れ図で左半分はパソコン本体固有の動作、右半分はそのパソコンにインストールされているOSに基ずく動作ともいえます。
以下ではシステムBIOSの動作を追った後、OSに基ずく動作の部分を3つのOS(MS-DOS、Windows、Linux)を例にそのOS が起動されるまでを追います。
とはいえ、システムBIOSのコードはBIOSメーカーごとに違っています。しかもバージョンによる違いや搭載されるマザーボード(チップセット)ごとに異なる仕様となっていて、その処理手順は千差万別というのが実情です。さらにプラグ アンド プレイやPCIバスの普及、OSの進化等もあって、システムBIOSに求められる機能は大きく様変わりしています。
以降はAT互換機(intelアーキテクチャ)に搭載されるシステムBIOSとブートローダーの動作概要ではありますが、すべてのシステムBIOSの動作が同じではない点に御留意下さい。
【 余談:BIOSからUEFIへ 】
BIOSは様々なデバイスの検出・初期化を行い、OSが動作できる環境を整える大切な役目を担っていますが、パソコンの黎明期に策定された仕様から抜け出す事ができず多くの制約を伴っています。
中でも次の2つは大きな制約になっています。
- BIOSがx86(16bit CPU)アーキテクチャーに基づいているため、各種デバイスも16bit用のドライバーを用意しなければならず、また指定可能なメモリアドレスは64KBまでとなります。
- 近年のパソコンは新しい技術やプロトコルが次々と追加されるため、パソコンのシステム構成(つまりマザーボード)ごとにカスタマイズしたBIOSが必要になる状況で、これはデバイスドライバーの更新や新機能の追加が容易ではないことを意味します。
こうした状況を改善しマザーボードや周辺機器メーカーの開発やサポートを容易にする目的で、intelはEFI(Extensible Firmware Interface)と呼ばれる仕様を策定しました。
EFIは次の特徴を備えています。
- 32/64ビット環境で動作し、1Mバイト超のメモリアクセスが可能。
- グラフィカルなユーザー インターフェースを持ち多言語にも対応。
- C言語が用意している豊富なデバイス関連の関数が利用可能(開発が容易)。
- ゲームや単一機能のソフトウェアであれば直接EFIを利用して動作することも可能。
その後intelはEFIの仕様をUEFI(Unified EFI)フォーラムに移管、UEFIフォーラムはその呼称にUEFIを追加し、EFI、UEFI のどちらも正式名称としています。
MicrosoftはWindows Vista 64 bit 版 Service Pack 1以降でUEFIに対応するとしていましたが、実際にUEFIを採用した製品とするにはマザーボード側の対応も必要です。
BIOSとUEFIのどちらを採用するかはOSインストール時に選択するようになっています。メーカーの販売戦略にも影響を受けるためUEFI製品が一般に出回り始めたのはWindows 8あたりからのようです。
|