ブート
'''ブート'''(または'''ブートストラップ'''、''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 はその値を見て正しいブートローダであると判断する)。
1995年以前の Macintosh などでは、OS とハードウェアが非常に密接に関連しており、標準のOS以外でブートすることができない。そのような場合、一般にとられる解決策としては、標準OSに属するプログラムとしてブートローダを設計し、それがシステムをハイジャックして別のOSをロードする。これは例えばアップルがA/UXというUNIX系のOSのブートに使った技法で、それを流用して各種フリーウェアのOSやBeOS Personal Edition 5などがブート可能となっていた。次のエントリ
二次ブートローダ
ブートローダが読み込む小さなプログラムは、オペレーティングシステムではなく二次ブートローダであることが多い。NTLDR、LILO、GRUBなどがある。二次ブートローダは実際のオペレーティングシステム(OS)をロードすることができ、最後にOSを実行する。OSは初期化処理を行い、デバイスドライバをロードし、OSの通常の処理に必要とされる他のプログラムをロードする。ブート処理はコンピュータがユーザとやりとりできるようになった時点で完了したと見なされる。あるいは、オペレーティングシステムが普通のアプリケーションを実行できるようになった時点で完了と見なすこともできる。典型的なPCのブートは約 1 分ほどかかる。そのうち、15秒ほどが一次ブートローダが費やす時間で、残りはオペレーティングシステムのロードにかかる時間である。一方、大きなサーバでのブートは全てのサービス起動まで何分かかかる。
多くの組み込みシステムではほとんど即座にブートが完了しなければならない。たとえば、テレビが映るまでに 1 分かかったのでは使い物にならない。そのため、オペレーティングシステム全体を ROM やフラッシュメモリに格納して、直接実行できるようにしている。ただし、ROMやフラッシュメモリはRAMに比べると、2007年現在の水準では1000倍と桁違いに遅い為、複合機など高機能な機器ではROMの内容をRAMに書き出して実行している。VxWorksなどではROM上の直接実行形式で用意されたブートストラップローダーがROM上の圧縮されたプログラム本体をRAMに展開して本体プログラムが起動するという実装がとられている。
なお、Windows 9x系ではMS-DOSが二次ブートローダのような役割を果たしている。ただし、MS-DOSを単体で起動することもできる。次のエントリ
フラッシュブートローダ
組み込みシステムでは、製造工程や保守工程でプログラムを変更するためにフラッシュブートローダが必須である。フラッシュブートローダはフラッシュメモリ内にあり、リセット後に最初に実行されるアプリケーションである。フラッシュブートローダを出荷製品に入れておくと、アプリケーションの更新・修正、設定の変更が容易に行える。CAN ベースのフラッシュブートローダが一般的であり、診断プロトコルを使って通信・ダウンロードを行う。次のエントリネットワークブート
多くのコンピュータはコンピュータネットワーク経由でブートを行う機能を持っている。この場合、二次ブートローダ はサーバのディスクに格納されており、それを TFTP のような単純なプロトコルでクライアントに転送する。内蔵ディスクを持たないシンクライアントは、ネットワークブートによって起動される。実装としてはPreboot Execution Environment(PXE)などが存在する。次のエントリ
出典:フリー百科事典『ウィキペディア(Wikipedia)』
別のワードで検索!
トレンドマガジン [マグゥ]でブートローダを検索






Rogersがブートローダのアンロックに対応した状態のHTC EVO 3Dを発売へ