ブート
出典: フリー百科事典『ウィキペディア(Wikipedia)』
ブート(またはブートストラップ、boot、bootstrap)は、コンピュータシステムの電源を入れたときにオペレーティングシステムを起動するまでの処理の流れをいう。また、ブートローダ(boot loader)とは、ブート処理を行うソフトウェアを意味する。
目次 |
[編集] ブートローダ
多くのコンピュータシステムでは、メモリ(ROMまたはRAM)上の実行コードだけを実行できる。また、最近のオペレーティングシステムはハードディスクドライブやLiveCDやUSBメモリに格納されている。つまり、コンピュータの電源を入れた直後、メモリ上にはオペレーティングシステムは存在しない。コンピュータのハードウェアだけではオペレーティングシステムがやっているような複雑なことはできないので、ディスクからプログラムをロードするというようなことはできない。ここで解決できないパラドックスが生じる。オペレーティングシステムをメモリにロードするためには、オペレーティングシステムがメモリに存在していなければならない。
このパラドックスの解決法はブートローダ(またはブートストラップローダ)と呼ばれる特殊な小さいプログラムを使うことである。このプログラムはオペレーティングシステムの全ての機能を持っているわけではないが、オペレーティングシステムをロードして起動するための別のプログラムをロードするには十分な機能を持っている。多段階のブートローダがよく使われ、ある小さなプログラムから別の小さなプログラムを呼び出すということを繰り返して、最終的にオペレーティングシステムが起動される。ブートストラップローダ(bootstrap loader)という名前は、ブーツのつまみ革(strap)を自分で引っ張って自分を持ち上げようとするイメージから来ている。
初期のプログラム可能なコンピュータはトグルスイッチがフロントパネルに並んでいて、それを操作することによってブートローダをプログラム格納域に置いてからCPUを起動するようになっていた。そうするとCPUはブートローダを実行してオペレーティングシステムを外部記憶メディア(例えば紙テープあるいは磁気ディスク装置)からロードすることができた。
ブートローダの擬似アセンブラコードは以下の8個の命令に単純化できる。
0: P レジスタに 8 をセット 1: 紙テープ読取装置の準備ができているかチェック 2: もし準備できていなかったら、1 へジャンプ 3: 紙テープ読取装置からアキュムレータに 1バイト読み込む 4: テープが終了したら 8 へジャンプ 5: アキュムレータの内容を P レジスタが指すアドレスに書き込む 6: P レジスタに 1 を加算 7: 1 へジャンプ
次の例は 1970年代の Nicolet Instrument Corporation 社のミニコンピュータに基づいている。二次ローダが紙テープから逆の順番に読み込まれることに注意。
0: P レジスタに 106 をセットする 1: 紙テープ読取装置の準備ができているかチェック 2: もし準備できていなかったら、1 へジャンプ 3: 紙テープ読取装置からアキュムレータに 1バイト読み込む 4: アキュムレータの内容を P レジスタが指すアドレスに書き込む 5: P レジスタから 1 を減算 6: 1 へジャンプ
二次ローダの長さは、ちょうど最後に 6 番地を上書きする長さになっている。5 番地の命令を実行した後、6 番地から二次ローダを実行し始める。二次ローダはオペレーティングシステムが書いてあるもっと長いテープが紙テープ読取装置にセットされるのを待つ。ブートローダと二次ローダの違いは紙テープ読取装置がエラーを発生したときに対処できるかどうかである。当時のハードウェアでは紙テープ読取装置は頻繁にエラーを起こした。
かつて8/16ビットマシンの場合、フロッピーディスクが搭載されていない機種には原則的にブートシーケンスが存在しなかった。例外はクリーンコンピュータを標榜していたシャープのパソコンの一部であった。
最近のコンピュータではブート処理はCPUがROM内のソフトウェア(例えば、BIOSやEFI)を既定のアドレスから実行することで開始される(CPUはリセットされると外部からの助け無しにこのソフトウェア実行をするよう設計されている)。そのソフトウェアはブートに使用できる各種デバイスを探し、最も優先順位の高いデバイスの特殊な領域(一般にはブートセクタ)から小さなプログラムを読み込む。
ブートローダには特有の制限、特にそのサイズの制限がある。例えば IBM PC や互換機では、一次ブートローダは必ず 512 バイトであり、最後が 0xAA55 という値で終わっていなければならない(BIOS はその値を見て正しいブートローダであると判断する)。
[編集] 二次ブートローダ
ブートローダが読み込む小さなプログラムは、オペレーティングシステムではなく二次ブートローダであることが多い。NTLDR、LILO、GRUBなどがある。二次ブートローダは実際のオペレーティングシステム(OS)をロードすることができ、最後にOSを実行する。OSは初期化処理を行い、デバイスドライバをロードし、OSの通常の処理に必要とされる他のプログラムをロードする。
ブート処理はコンピュータがユーザとやりとりできるようになった時点で完了したと見なされる。あるいは、オペレーティングシステムが普通のアプリケーションを実行できるようになった時点で完了と見なすこともできる。典型的なPCのブートは約 1 分ほどかかる(うち、15秒ほどが一次ブートローダが費やす時間で、残りはオペレーティングシステムのロードにかかる時間)。一方、大きなサーバでのブートは全てのサービス起動まで何分かかかる。
多くの組み込みシステムではほとんど即座にブートが完了しなければならない。たとえば、テレビが映るまでに 1 分かかったのでは使い物にならない。そのため、オペレーティングシステム全体を ROM やフラッシュメモリに格納して、直接実行できるようにしている。
なお、Windows 9x系ではMS-DOSが二次ブートローダのような役割を果たしている。(ただし、MS-DOSを単体で起動することもできる。)
[編集] BIOS ブートデバイス
ブートデバイスとはオペレーティングシステムをロードする前に初期化しなければならないデバイス(周辺機器)のことである。これには一つの入力機器(キーボード)、ひとつの出力機器(ディスプレイ)、初期プログラムロード用機器(フロッピーディスクドライブ、ハードディスクドライブ、CD-ROM、USBメモリなど)がある。(初期プログラムロード(IPL = Initial Program Load)用機器とは、オペレーティングシステムを格納し、ブート処理でOSをロードするのに使われる機器であり、他にも単独動作するユーティリティ(例えば、memtest86+)やブートローダが格納されている。古いシステムではこれはフロッピーかハードディスクと限定されていた。)
最近のBIOSでは、ブート用機器の選択肢が大きくなっている。例えばハードディスクドライブ、フロッピーディスク、SCSI、CD-ROM、ZIP、スーパーディスク(LS-120)、USB(USB-FDD, USB-ZIP, USB-CDROM, USB-HDD)などである。
たとえば、Microsoft Windowsを 1台目のハードディスクにインストールし、Linuxを 2台目にインストールすることができる。BIOSのブート機器の設定を変更することにより、ユーザーはロードするオペレーティングシステムを選択することができる。
[編集] IBM-PC互換機のブート手順
まず、パーソナルコンピュータのCPUはBIOSの存在する FFFF0h 番地のメモリにある命令を実行する。このメモリ位置は(x86のリアルモードでの)システムメモリのほぼ最後尾にあたる。そこにはBIOSの初期プログラムの位置へのジャンプ命令が含まれていて、BIOSに制御が渡る。BIOS初期プログラムはPower-On Self Test(POST)を実行して必要な機器が正常に動作するかをチェックする。また、同時にそれら周辺機器の初期化も行う。次にBIOSは事前に設定されたデバイスリストを順にあたって、ブート可能な周辺機器を探す。そのようなデバイスが見つからない場合、エラーが発生してブート処理は停止する。BIOSがブート可能デバイスを発見すると、そのブートセクターをロードして実行する。ハードディスクドライブの場合、ブートセクターはマスターブートレコード(MBR)と呼ばれ、その内容はオペレーティングシステムには依存しない。MBRのコードはパーティションテーブルを調べてアクティブなパーティションを探す。それが見つかったら、MBRのコードはパーティションのブートセクターをロードして実行する。ブートセクターはオペレーティングシステムに依存することが多いが、その機能はカーネルをロードして実行することである。カーネルはさらに初期化処理を続行する。アクティブなパーティションがなかったり、アクティブなパーティションのブートセクターが不正だった場合、MBRは第二ブートローダをロードして制御を渡す。第二ブートローダは(多くの場合ユーザーに入力してもらって)パーティションを選択して、そのブートセクターをロードする。パーティションのブートセクターは一般にオペレーティングシステムのカーネルをロードする。
[編集] その他のブート手順
他のプロセッサは異なるブートモードを持つ。多くのデジタルシグナルプロセッサは以下のようなブートモードがある。
- シリアルモードブート
- パラレルモードブート
- HPIブート
- ウォームブートまたはソフトリブート(ハードリブートの反対)は電源をいったん落とすことなく簡略化したブート処理をするものである。
[編集] 予期しないリブート
予期しないリブート(random reboot)とは、リブートが予期しない状況で発生することである。この原因として以下のようなことが考えられる。
- ソフトウェア問題
- ソフトウェアの非互換
- 不正なソフトウェア設定やドライバ設定
- バグ
- コンピュータウィルス
- ハードウェア問題
- ハードウェアの非互換
- 不正なハードウェア設定
- 配線(主にプラグ類)の接触不良
- メモリタイミング不正
- ハードウェアの故障
- オーバーヒート
- CPUのオーバーヒート
- その他の問題
- 電気的問題
- 電源電圧の急変
- 電気的問題