パソコン実習室
ブート ストラップ - パソコンの起動 by BIOS
  next ≫

T.はじめに


〜 コンピューター、ソフトなければ ただの箱 〜

 その昔、どこかで聞いたことのある川柳ですが、なかなか的を射ています。ソフトウェアの無いコンピューターは、どうにも使い勝手の悪い置物になり下がってしまうのです。

 その重要なソフトウェアも、ただ単に存在すれば良い訳ではなく、適切なソフトウェアをパソコンのメイン・メモリ(以下では省略して単にメモリと表示します)の適切な位置に格納して初めてパソコンはパソコンとして役立ってくれます。
 WindowsやLinuxといったOS(Operating System)と呼ばれているソフトウェアも例外ではなく、メモリ上に格納されて初めてWindowsはWindowsとして、LinuxはLinuxとして機能します。

 パソコンには様々な種類のメモリが使われています。以下で単にメモリと言った場合はメイン・メモリを指し、他のメモリと区別する必要がある場合にメイン・メモリと表現します。


T.1.靴紐 ?

 メモリに格納したソフトウェアも電源を切るとすべて消えてしまいます。厄介な事にOSといえど例外ではありません。
 そのため現代のパソコンは電源を入れる(あるいは再起動の)たびに、どこか(通常はハードディスク)にあるOSをメモリの適切な位置に格納(ロード)する仕組みを備えているのです。

 電源投入によって開始されるOS起動までの一連の動作をブート ストラップ(boot strap)といいます。

 ブート ストラップとは直訳すれば編み上げブーツの靴紐のこと。編み上げブーツは靴紐をキッチリと丁寧に順序よく編んで行かないと上手く履けません。
 OS 起動までの手順はかなり面倒で、手作業でやっていた初期の頃はそれは大変でした。この面倒な作業を、靴紐を編み上げる手順になぞらえてブート ストラップと呼ぶようになったのもうなずけます。

 ブート ストラップの具体的な動作は、何をどのような順序で行っているのでしょう。
MS-DOS、Windows、Linuxの3つのOSを例としてその動作を追ってみます。


***** ご注意 *****
 パソコン起動時に真っ先に起動されるソフトウェアにBIOSがあります。パソコン黎明期から使われ改良されてきたBIOSですが、多くの制約があるためその役目はuefiに移行しつつあります。
 ここではBIOSを使用しているパソコンを題材に説明しています。uefiによるブート ストラップは、他のサイトを参照して下さい。


T.2.OS 起動までの概略

 パソコンの起動は電源スイッチを押すだけで事足ります。その後の面倒なブート ストラップの動作はすべて自動で行われてOS(WindowsやLinux)が立ち上がってきます。
 その時パソコンの内部では様々なテストや選択・確認といった処理が着々と進行している訳ですが、具体的には何が行われているのでしょう。

 ブート ストラップの流れは大きくシステム BIOS(バイオス:Basic Input Output System)とブートローダーに分けることができます。それぞれは次のような動作を行います。
  • システムBIOS (バイオス:Basic Input Output System)
    パソコン本体が備えている機能で、ブートローダーを検出して起動します。
    システムBIOSの実態はマザー ボード上のROMに格納されてます。
    電源投入時最初に起動されます。

  • ブートローダー
    OSを検出・起動します。
    ブートローダーはOSを格納しているディスクの先頭セクタに記録されています。
    OSインストール時にブートローダーも同じディスクにインストールされます。
 システムBIOSがチップセット等との共同作業でブートローダーを起動し、ブートローダーがディスク上のOSを起動します。

ブート ストラップの流れ
電源ONシステムBIOSブートローダーOSの起動

 上の流れ図で左半分はパソコン本体固有の動作、右半分はそのパソコンにインストールされているOSに基ずく動作ともいえます。
 以下ではシステムBIOSの動作を追った後、OSに基ずく動作の部分を3つのOS(MS-DOS、Windows、Linux)を例にそのOS が起動されるまでを追います。

チップセット
 複数の半導体チップ(LSI)がセット(組)になったもので、マザーボード上のCPU近くに搭載されています。メモリやグラフィックの制御機能をまとめた[ノース ブリッジ]、HDD、PCI、USB、LAN等の制御機能をまとめた[サウス ブリッジ]の2チップ構成となるのが一般的ですが、1つのチップにまとめたものもあります。チップセットが担っている機能はパフォーマンスに直結していて、パソコンの性能に与える影響は重大です。

ブートローダー
 外部デバイスに存在するOSを、RAM上にロードして制御を渡す(起動する)ためのコード(プログラム)をブートローダー、あるいはブート ストラップ ローダー(Boot Strap Loader)といいます。
 通常ブートローダーは多段階(大きく分けると2段階)の構成になっています。小さなコード サイズの1段目をデバイスの先頭セクタに配置し、次第にサイズの大きな(したがって高機能な)コードをロードする方法で最終的にOSをロードします。


T.3.各社バラバラ

 とはいえ、システム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あたりからのようです。


※ UEFIもBIOS? ※
 次第に消えつつあるBIOSですが、その名称はしっかりと残っています。OSを起動するまでのプロセスを意識している時や、カレンダー情報・ブートメニュー等の変更時などはUEFIを指してBIOS(バイオス)と呼んだりします。UEFIをUEFI-BIOSと表示したり単にBIOSと記述することは、慣れ親しんだシステムを表す言葉として自然な成り行きのようです。





  [[ ブート ストラップ - パソコンの起動 by BIOS ]] next ≫