ブート

コンピュータシステムの起動:ブートの仕組みと歴史



コンピュータを起動する、あるいはシステムをリセットした後に、モニタやOSといった基本的なソフトウェアを主記憶(メモリ)に読み込み、ユーザーがプログラムを実行できる状態にするまでの処理の流れをブート(boot)またはブートストラップ(bootstrap)と言います。このプロセスを担うのがブートローダ(boot loader)です。ブートローダは、補助記憶装置(ハードディスクなど)に保存されているプログラムを読み出し、主記憶に書き込むプログラムです。

電源投入によるブートをコールドブート、リセットによるブートをウォームブートと呼びます。ウォームブートでは、コールドブートの一部手順を省略できる場合があります。

「ブートストラップ」という名称は、靴を履く際に靴ひも(strap)を引っ張って足を持ち上げる動作に由来します。これは、コンピュータが動作するにはプログラムが必要だが、プログラムを読み込むプログラム自体はどうやって読み込むのかというパラドックスを表しています。

ブートの歴史:初期のコンピュータから現代のPCまで



初期のコンピュータ、例えばENIACはノイマン型ではなく、プログラムは配線によって設定されました。ノイマン型コンピュータとして実用化されたEDSAC(1949年)では、イニシャルオーダ(initial orders)と呼ばれるプログラムが、ROMのような仕組みから主記憶に書き込まれ、紙テープから機械語を読み込んで実行する仕組みでした。この技法は、後のコンピュータのブートローダ開発に大きな影響を与えました。

1950年代以降、IBM 701などでは、ボタン操作でブートプログラムを読み込み、それがさらに大きなプログラムをロードする方式が採用されました。この頃より「ブート」という言葉が、この意味で使われ始めました。

DEC PDP-8などのミニコンピュータでは、フロントパネルのスイッチで短いプログラムを入力してブートする方法が一般的でした。後にROMが搭載されるようになり、スイッチ操作は不要になりました。

集積回路によるROMが登場する以前は、メモリ容量が小さく、ROMも容量が少なかったため、複雑なブートシーケンスが必要でした。しかし、ROMの容量が大きくなると、ブートプログラムをROMに格納し、電源投入時に自動的に実行する方式が一般的になりました。Apple I (1976) は、PROMチップを搭載したことでフロントパネルが不要になった例です。Atari STなどのホームコンピュータは、電源投入と同時にROM上のOSが起動するシンプルなブートを採用していました。

ブートローダ:オペレーティングシステムをロードするプログラム



多くのコンピュータシステムは、主記憶上の実行コードしか実行できません。しかし、OSはハードディスクなどに保存されているため、電源投入時にはメモリに存在しません。そこで、ROM上に格納された小さなプログラムであるブートローダが、OSをロードする役割を担います。

初期のコンピュータでは、フロントパネルのスイッチでブートローダをメモリに格納し、CPUを起動する方式が用いられました。IBM 650、DEC PDP-5、PDP-8などがその例です。ブートローダは、紙テープや磁気ディスクなどからOSを読み込み、実行します。

現代のPCでは、CPUがBIOSやEFIといったファームウェアを自動的に実行し、そこからブート可能なデバイスを探し、ブートローダをロードします。ブートローダは、複数の段階を経てOSをロードすることが多く、一次ブートローダ二次ブートローダという役割分担が見られます。一次ブートローダはBIOSやMBR(Master Boot Record)などのファームウェアに含まれます。二次ブートローダは、GRUB、BOOTMGR、NTLDRなどがあります。これらのブートローダは、OSの選択や、セーフモードでの起動などのオプションを提供する機能を備えています。

ブートデバイスとブート手順:PC互換機の例



ブートデバイスとは、OSをロードするために初期化が必要なデバイス(ハードディスク、光学ドライブ、USBメモリなど)のことです。BIOSは、設定された順番にブートデバイスを探し、ブート可能なデバイスを見つけると、そのブートセクタをメモリにロードして実行します。

x86アーキテクチャのPCでは、電源投入時にBIOSがまず実行され、POST(Power On Self Test)を実行してハードウェアのチェックを行います。その後、ブート可能なデバイスを探し、ブートセクタをメモリにロードし、実行します。ハードディスクの場合、MBRがパーティションテーブルを調べ、アクティブなパーティションのブートセクタを実行します。ブートセクタは、OSカーネルをロードして実行します。

最近のPCでは、UEFI(Unified Extensible Firmware Interface)がBIOSに代わるファームウェアとして採用されている場合もあります。UEFIは、BIOSと比べてより柔軟なブート処理を提供します。

その他のブート方法



組み込みシステムでは、ROMやフラッシュメモリにOS全体を格納し、直接実行する方式が一般的です。また、ネットワーク経由でブートを行うネットワークブートも広く利用されています。

様々なCPUマイクロコントローラは、それぞれ異なるブート方法を持っています。TI OMAPなどのDSPは、ブートROMを内蔵しており、複数のデバイスからブートプログラムをロードできます。JTAGなどのデバッグインタフェースを用いてブートコードを書き込むことも可能です。

IBMメインフレームでは、ブート処理をIPL(Initial Program Load)と呼びます。オペレータがデバイスを指定してLOADボタンを押すことでブートが開始されます。バロースB1700では、フロントパネルに装着されたテープからブートローダを読み込む独特な方法が用いられました。

LinuxなどのOSでは、クイックブートと呼ばれる高速起動機能も提供されています。

ブート処理は、コンピュータがユーザーとインタラクトできる状態になる、あるいはOSがアプリケーションを実行できる状態になるまで続きます。PCのブート時間は、数秒から数十秒程度ですが、大きなサーバでは数分かかることもあります。組み込みシステムでは、ほぼ瞬時にブートが完了することが求められます。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。