この項目では、コンピュータの動作について説明しています。インドの悪霊については「ブータ 」を、ブート盤については「海賊盤 」をご覧ください。
Windows XP をブート中のインターネット 公衆電話
ブート (英 : boot )またはブートストラップ (英 : bootstrap )は、コンピュータ システムの電源投入時、あるいはシステムのリセット 後、モニタ やOS などなんらかの基本的なシステムソフトウェア を主記憶 に展開し、ユーザプログラムを実行できるようにするまでの処理の流れをいう。ブートローダ (英 : boot loader )は、以上のプロセスで使われるローダ、すなわち不揮発性 の補助記憶 にある目的のプログラムを読み出し、揮発性 の主記憶に書き込むプログラムのことである。
電源投入時のブートのことを「コールドブート」、リセットされたことによるブートを「ウォームブート」という。ウォームブートでは、コールドブートにおける最初のほうの手続きのいくつかが必要無い場合もあり、そういった手続きを省略することもある。
ブートストラップ またはブートストラップローダ (英 : bootstrap loader )という名前は、ブーツ を履くことはまずどんな仕事のはじめにもやる事で、さらにブーツのつまみ革(英 : strap )を自分で引っ張って自分を持ち上げようとするイメージから来ている[ 1] 。つまり、コンピュータはプログラムをロードしないと動作できないが、プログラムをロードするプログラムはどうロードするのだ? というパラドックスに着目した呼称である[ 2] 。
歴史
初期の電子計算機のひとつであるENIAC は、いわゆるノイマン型 コンピュータではなく、プログラムはパッチボードを利用した配線によっておこなわれ、また解決したい問題の計算式の初期値などを最初から設定して計算を行うような計算機であった。
ノイマン型として実用的に稼働したとされる初期のコンピュータのEDSAC (1949年稼働)では、イニシャルオーダ (英 : initial orders ) と呼ばれたプログラムが、ロータリースイッチで実現された一種のROMからハードウェア的に主記憶に書き込まれる。イニシャルオーダは非常に技巧的なわずか数十語のコードで単純ながらアセンブラ的機能を実現しており、紙テープを読み込んでそれを機械語に変換し主記憶の残りの部分に書き込む(英語版WikipediaのEDSAC#System_software を参照)。EDSACのプログラム技法は成書「The Preparation of Programs for an Electronic Digital Computer 」として広まり、パラメトロン コンピュータPC-1他のイニシャルオーダ (イニシャルインプットルーチンとも) がEDSACのイニシャルオーダの影響を受けて作成された。
EDSACの技法は成書として公刊されたため、同様のローダーがこの時代の多くのコンピュータで開発・使用されたが、そのローダをどうロードするか、という点では各種の手法があった[ NB 1] 。当時はそれらのうちの1つの手法を「ブートストラップ方式」と呼んでいた。ILLIAC I の方式がブートストラップである。[ 3]
1950年代の IBM 701 以降[ 4] 、何らかのブート処理でプログラムやOSを主記憶にロードするようになった。IBM のメインフレーム ではこれを "Initial Program Load" と称している。Load Card 、Load Tape 、Load Drum などと表示されたボタンを押下するとハードウェアの論理回路が対応する周辺機器からブートプログラムを読み込み、それを実行する。するとブートプログラムがより大きなプログラムを自動的にロードする[ 5] [ 6] 。「ブート」という言葉は1958年からこの意味で使われている[ 7] 。
言葉の歴史としては、自分自身で自分のための土台を用意する、といったような意味では、電子回路 の分野にもブートストラップという手法がある。またロバート・A・ハインライン の1941年の中篇SFの題By His Bootstraps [ NB 2] も、そのような意味でブートストラップという語を使っている。
DEC PDP-8 以降のミニコンピュータ では、フロントパネルにあるスイッチ群を操作して短いプログラムを入力する方法が採用された。初期のミニコンピュータは磁気コアメモリ を使っており、電源を切っても情報は失われない。従ってブートローダーは消去されない限りメモリ上に存在し続けるが、バグ のあるプログラムを実行して全メモリの内容を上書きしてしまうこともある。PDP-11 でも同様の手法を採用したが、後にDECはオプションで32ワード(64バイト)のブートプログラムを格納したROMを追加できるようにした。このROMは集積回路 ではなく、M792というUnibus 用カードであり、32×16のダイオード アレイで回路を構成している。ダイオードが通電する部分のビットは1になり、通電しないようダイオードを除くと対応するビットが0になる。DECは様々な周辺機器からのブートに対応するため、同様のカードを BM792-Yx シリーズとして販売した[ 8] [ 9] 。
集積回路のROMが登場する以前
IBM 701 (1952–1956) には "load" ボタンがあり、それによってパンチカード、磁気テープ、磁気ドラム装置のいずれかから先頭の36ビット ワード を読み込む。そのうち先頭の18ビットは命令として実行され、通常はメモリに追加のワード群を読み込む命令になっている[ 10] 。IBM 1401 (1958) では同様にパンチカード リーダーからプログラムをロードする。80文字が格納されたパンチカードの内容は 001 から 080 番地のメモリに読み込まれ、001番地から命令として実行開始する。命令は通常いつも同じで、この先頭80文字分の情報をアセンブリエリアに転送し、2枚目以降のパンチカードの内容を読み込んでプログラムを構成する。アセンブリエリアに転送し終わると、080 番地の命令へジャンプし、そこにある命令(カードを読み込む命令)を実行することで、次のパンチカードを読み込み、その情報を処理する。つまり、パンチカード1枚ずつが次のパンチカードをブートストラップする形になっている。
CDC 6600 (1964) には144個のトグルスイッチを備えた dead start と呼ばれるパネルがある。このパネルで12ワードの情報を0番の周辺プロセッサ (PP0) のメモリに転送する。それを命令列として実行することでPP0は自身のメモリに必要なコードをロードし、他のPPを初期化する。
GE 645 (1965) には "BOOT" ボタンがある[ 11] 。
Multics (1967) にはブートコマンドがあった[ 12] [ 13] 。
UNIX では、The Unix Programmer's Manual 第1版(1971年11月3日)に "boot" への言及がある[ 14] 。
1975年、CSELT (英語版 ) の研究者であるアルベルト・チャラメッラ (英語版 ) は、電話交換機 のコンピュータをブートするデバイスの特許を取得した。ブートローダは、現代のROMメモリに常駐し、ブートプロセスはシングルボタン押下で起動した。デバイスは、アドオン(例PDP-11用)などの任意の種類のコンピュータに適していた。[ 15]
集積回路によるROMの時代
以上で述べたような古い時代において、電源投入直後の機能があれこれと話題になったことには、いくつかの原因がある。
古いコンピュータは、
メモリ空間が狭いことが多く、その空間を少しでも自由に使える主記憶のRAMに当てたい
ROMにあたる記憶装置が特殊な装置であったりして容量も少なく、また主記憶と同様に読み出しができるものではなかった
等の理由から、この過程を技巧的なブートシーケンスにせざるをえなかったのである。
集積回路によるROM 、具体的にはマスクROM 、PROM 、EPROM 、フラッシュメモリ の時代になると、以上のような制限はかなり緩和され、ファームウェア としてメモリ空間の一部にブートプログラムを存在させ、電源投入後やリセット後、プロセッサは単にそのアドレスから実行を始めればよい、というようになった。その結果、一般的なユーザのブート時の関心事は、ハードディスク上のファイルシステムにあるOSを、どうロードして実行するか、というような点に移った。組込みシステム やゲーム機 などでは、最初からROMに実行イメージを展開しておき、ブートしたらそのまま目的のシステムが実行される、というような形態もある。
Apple の最初のコンピュータ Apple I (1976) にはPROMチップが搭載されていたため、フロントパネルが不要になった。当時の広告では "No More Switches, No More Lights ... the firmware in PROMS enables you to enter, display and debug programs (all in hex) from the keyboard."(スイッチはいらない、ライトもいらない…PROM内のファームウェアで、キーボードからプログラムを入力し、表示し、デバッグできる)と宣伝している[ 16] 。これはそれ以前の Altair 8800 などに対比してアピールしているのである。
Atari ST などのホームコンピュータ は、電源を入れるとROM 上のOSがすぐさま起動する。そのため、二次記憶装置からOSをロードする機能が省かれている。システムのカスタマイズやアクセサリ、サポートソフトウェアなどはフロッピードライブからブート時に自動的にロードされる。電源投入から一定時間フロッピーがセットされない場合やフロッピー内に追加コンポーネントが見つからない場合、それらのロード処理はタイムアウトする。これによりブランクディスク挿入を防ぐ。
ブートローダ
多くのコンピュータ システムでは、メインメモリ上の実行コードだけを実行できる。しかし、最近のオペレーティングシステムはハードディスクドライブ やLive CD 、フラッシュメモリ (USBメモリ など)に格納されている。つまり、コンピュータの電源を入れた直後、メモリ上にはオペレーティングシステムは存在しない。コンピュータのハードウェア だけではオペレーティングシステムがやっているような複雑なことはできないので、ディスクから任意のプログラムをロードするというようなことはできない。ここで『オペレーティングシステムをメモリにロードするためには、オペレーティングシステムがメモリに存在していなければならない』というジレンマ が生じる。
このパラドックスの解決法は、ブートローダ (またはブートストラップローダ )と呼ばれるROM上にある特殊な小さいプログラム を使うことである。このプログラムはオペレーティングシステムの全ての機能を持っているわけではないが、オペレーティングシステムをロードして起動するための別のプログラムをロードするには十分な機能を持っている。多段階のブートローダがよく使われ、ある小さなプログラムから別の小さなプログラムを呼び出すということを繰り返して、最終的にオペレーティングシステムが起動される。
PDP-8/E のフロントパネル。ブートストラップのロードに使用するスイッチ群がある。
初期のプログラム可能なコンピュータは、トグルスイッチ がフロントパネルに並んでいて、それを操作することによってブートローダをプログラム格納域に置いてからCPU を起動するようになっていた。そうするとCPUはブートローダを実行して、オペレーティングシステムを外部記憶メディア(例えば紙テープ あるいは磁気ディスク装置 )からロードすることができた。例えば、IBM 650 、DEC PDP-5 、PDP-8 、初期のPDP-11 、Altair 8800 などの初期のマイクロコンピュータなどがスイッチを使っていた。フロントパネルのスイッチ群は直接CPUに命令列を渡すのにも使われた。例えば、PDP-1 はハードウェアにローダーを組み込んでいて、オペレータが "load" ボタンを押すだけで紙テープリーダからプログラムをメモリにロードすることができる。この紙テープリーダにはブートローダーが格納されており、それを実行すると二次ブートローダーまたはオペレーティングシステムを外部ストレージ媒体(紙テープ、パンチカード、ディスク装置など)からロードする。
ブートローダの擬似コード は以下の8個の命令に単純化できる。
P レジスタに 9 をセット
紙テープ読取装置の準備ができているかチェック
もし準備できていなかったら、2 へジャンプ
紙テープ読取装置からアキュムレータに 1バイト読み込む
テープが終了したら 9 へジャンプ
アキュムレータの内容を P レジスタが指すアドレスに書き込む
P レジスタに 1 を加算
2 へジャンプ
次の例は 1970年代のニコレット・インストゥルメント社[ NB 3] のミニコンピュータに基づいている。二次ローダが紙テープから逆の順番に読み込まれることに注意。
P レジスタに 106 をセットする
紙テープ読取装置の準備ができているかチェック
もし準備できていなかったら、2 へジャンプ
紙テープ読取装置からアキュムレータに 1バイト読み込む
アキュムレータの内容を P レジスタが指すアドレスに書き込む
P レジスタから 1 を減算
2 へジャンプ
二次ローダの長さは、ちょうど最後に 7 番地を上書きする長さになっている。6 番地の命令を実行した後、7 番地から二次ローダを実行し始める。二次ローダはオペレーティングシステムが書いてあるもっと長いテープが紙テープ読取装置にセットされるのを待つ。ブートローダと二次ローダの違いは紙テープ読取装置がエラーを発生したときに対処できるかどうかである。当時のハードウェア(例えばASR-33 )では紙テープ読取装置は頻繁にエラーを起こした。
一部システムは人間のオペレータか周辺機器からのブート信号を受けて、固定の小さな命令列をロードしてメモリ上の特定のアドレスに配置し、1つのCPUを初期化してその位置から実行を開始させる。その命令列は一般に何らかの周辺機器(オペレータがスイッチ操作で機器を指定する場合もある)からの入力操作を開始するものである。他のシステムは、周辺機器またはチャネル・コントローラ に直接ハードウェアコマンド列を送り、単純な入力操作(例えば、システムデバイスの0番セクタをリードし、メモリの1000番地にリード結果を置く)を実施させ、小さなブート用命令列をメモリ上にロードさせる。そしてI/O完了を知らせる信号を契機として、CPUにその命令列を実行させることになる。
マイコンと呼ばれた時代の初期のパーソナルコンピュータ、だいたい16ビット時代の初期の頃までのマシンでは、フロッピーディスク が標準の装備でなかったこともあり、最初からメモリ空間にROMとしてプログラムが展開されて存在し、ほとんどにおいてはBASIC(ROM BASIC)を起動するというものがもっぱらで、外部記憶装置からシステムを読み込むブートシーケンスは存在しなかった。クリーンコンピュータ を標榜したシャープ の一部のパソコンのように例外もある。
最近のコンピュータではブート処理はCPU がROM内のソフトウェア(例えば、BIOS やEFI )を既定のアドレスから実行することで開始される(CPUはリセットされると外部からの助け無しにこのソフトウェア実行をするよう設計されている)。そのソフトウェアはブートに使用できる各種デバイスを探し、最も優先順位の高いデバイスの特殊な領域(一般にはブートセクタ )から小さなプログラムを読み込む。
ブートローダには特有の制限、特にそのサイズの制限がある。例えば IBM PC や互換機では、一次ブートローダは必ず446バイト (Windows NT では、ディスクシグニチャがオフセット440の位置にあるため、440バイト)でマスターブートレコード になければならず、その後に64バイトのパーティションテーブルが続き、最後が 0xAA55 という値で終わっていなければならない(BIOS はその値を見て正しいブートローダであると判断する)。
1995年以前の Macintosh などでは、OS とハードウェアが非常に密接に関連しており、標準のOS以外でブートすることができない。そのような場合、一般にとられる解決策としては、標準OSに属するプログラムとしてブートローダを設計し、それがシステムをハイジャックして別のOSをロードする。これは例えばアップルがA/UX というUnix系 のOSのブートに使った技法で、それを流用して各種フリーウェアのOSや BeOS Personal Edition 5 などがブート可能となっていた。90年代によく使われていたMS-DOS環境からLinuxを起動するloadlin(w:Loadlin )も同様のものである(もっともMS-DOSには保護がないので、ハイジャックというほど大袈裟なものでもない)。
一般的な一次ブートローダーとしては、以下のものがある。
二次ブートローダ
ブートローダが読み込む小さなプログラムは、オペレーティングシステムではなく二次ブートローダであることが多い。BOOTMGR 、NTLDR 、SYSLINUX 、GRUB などがある。二次ブートローダは実際のオペレーティングシステム (OS) をロードすることができ、最後にOSを実行する。OSは初期化処理を行い、デバイスドライバ をロードし、OSの通常の処理に必要とされる他のプログラムをロードする。
GNU GRUB 、Windowsの BOOTMGR、Windows NT/2000/XP の NTLDR といったブートローダーは、マルチブート 設定が可能である。この場合異なるOSを指定することもできるし、同じOSの異なるバージョンを指定することもできるし、単に異なるオプションを指定することもでき(例えば、セーフモード で起動するなど)、OSではなく独立して動作するプログラムを指定することもできる(メモリテスタ Memtest86 、ゲームなど[ 17] )。ブートローダーに別のブートローダーをロードさせることもできる。例えば、GRUBがBOOTMGRをロードすることも可能である。一般にデフォルト設定があり、ある時間内にユーザーが選択しなければデフォルト状態でブートを行う。
なお、Windows 9x系 ではMS-DOS が二次ブートローダのような役割を果たしている。ただし、MS-DOSを単体で起動することもできる。
ブート処理はコンピュータがユーザとやりとりできるようになった時点で完了したと見なされる。あるいは、オペレーティングシステム が普通のアプリケーションを実行できるようになった時点で完了と見なすこともできる。典型的なPC のブートは約 1 分ほどかかる。そのうち、15秒ほどが Power On Self Test (POST) が費やす時間で、残りはオペレーティングシステムのロードにかかる時間である。OSロード後の経過時間はシステム内のコアを同時に起動することで3秒程度にまで短縮可能で、例えばcoreboot でそのようなブートが可能である[ 18] [ 19] 。一方、大きなサーバでのブートは全てのサービス起動まで何分かかかる。
多くの組み込みシステム ではほとんど即座にブートが完了しなければならない。たとえば、テレビが映るまでに1分かかったのでは使い物にならない。そのため、オペレーティングシステム全体を ROM やフラッシュメモリ に格納して、直接実行できるようにしている。ただし、ROMやフラッシュメモリはRAMに比べると、2007年現在の水準では1000倍と桁違いに遅い為、複合機 など高機能な機器ではROMの内容をRAMに書き出して実行している。VxWorks などではROM上の直接実行形式で用意されたブートストラップローダーがROM上の圧縮されたプログラム本体をRAMに展開して本体プログラムが起動するという実装がとられている。
フラッシュブートローダ
組み込みシステムでは、製造工程や保守工程でプログラムを変更するためにフラッシュブートローダが必須である。フラッシュブートローダはフラッシュメモリ内にあり、リセット後に最初に実行されるアプリケーションである。フラッシュブートローダを出荷製品に入れておくと、アプリケーションの更新・修正、設定の変更が容易に行える。CAN ベースのフラッシュブートローダが一般的であり、診断プロトコルを使って通信・ダウンロードを行う。
ネットワークブート
多くのコンピュータはコンピュータネットワーク 経由でブートを行う機能を持っている。この場合、二次ブートローダ はサーバ のディスクに格納されており、それを TFTP のような単純なプロトコルでクライアントに転送する。内蔵ディスクを持たないシンクライアント は、ネットワークブートによって起動される。
実装としてはPreboot Execution Environment (PXE)などが存在する。
PC互換機のブートデバイス
Windows To Go 対応のブート可能なフラッシュドライブ。Live USB の一種
ブートデバイス (英語版 ) とはオペレーティングシステムをロードする前に初期化しなければならないデバイス(周辺機器)のことである。これには一つの入力機器 (キーボード )、ひとつの出力機器(ディスプレイ )、初期プログラムロード用機器(フロッピーディスクドライブ 、ハードディスクドライブ 、CD-ROM 、USBメモリ など)がある。初期プログラムロード (IPL = Initial Program Load) 用機器とは、オペレーティングシステムを格納し、ブート処理でOSをロードするのに使われる機器であり、他にも単独動作するユーティリティ(例えば、memtest86+)やブートローダが格納されている。古いシステムではこれはフロッピーかハードディスクと限定されていた。
最近のPCのBIOS は様々なデバイスからのブートをサポートしており、ローカルのハードディスク(あるいはディスク上のパーティション )、光学ドライブ 、USB デバイス(フラッシュドライブ、ハードディスクドライブ、光学ディスクドライブなど)、フラッシュメモリカード、ネットワークカード(PXE を使用)などがある。古いPCではフロッピーディスクドライブ 、ZIPドライブ 、LS-120 ドライブなどに限定されていた。
一般にユーザーがBIOSでブート順を設定することができる。1番目をDVDドライブ、2番目をハードディスクと設定した場合、BIOSはまずDVDドライブからのブートを試みる。そしてDVDがセットされていないなどの理由でブートに失敗するとローカルなハードディスクからのブートを試みる。DVDにLinux の Live CD を入れておけば、ハードディスクにLinuxをインストールしなくともLinuxを起動することができる。これがマルチブート の一例であり、ユーザーはPOST実行後にどちらのOSを起動するかを選択できる。この場合は、電源投入時に(あるいはリセット時に)CDを入れておくか否かで起動するOSを選択しているが、一般的にはキーボードを使ってBIOSブートメニューを表示させて選択する(一般に F11
または ESC
を押下)。
IBM PC互換機のブート手順
電源投入直後、ないしリセットにより、x86 は、まずBIOS の存在する 0xFFFF0 番地のメモリにある命令を実行する(ここはx86を使用するどんなコンピュータでも同じである)。このメモリ位置は(リアルモード での)システムメモリのほぼ最後尾にあたる。そこにはBIOSの初期プログラムの位置へのジャンプ命令が含まれていて、BIOSに制御が渡る。BIOS初期プログラムは Power On Self Test (POST ) を実行して必要な機器が正常に動作するかをチェックする。また、同時にそれら周辺機器の初期化も行う。次にBIOSは事前に設定されたデバイスリストを順にあたって、ブート可能な周辺機器を探す。ブート可能デバイスとは、読み込みが可能で、第1セクタの最後尾に 0xAA55 というワード (ブートシグニチャ)があるデバイスである。
FreeBSD の boot0 MBR の十六進ダンプ
そのようなデバイスが見つからない場合、エラーが発生してブート処理は停止する。BIOSがブート可能デバイスを発見すると、そのブートセクタ を 0x7C00 というアドレス(Segment :Offset 形式では 0000:7C00 だが、一部のBIOSでは 07C0:0000 を使用)にロードして実行する。ハードディスクドライブの場合、ブートセクタはマスターブートレコード (MBR) と呼ばれ、その内容はオペレーティングシステム には依存しない。MBRのコードはパーティション テーブルを調べてアクティブなパーティションを探す[ NB 4] 。それが見つかったら、MBRのコードはパーティションのブートセクタ をロードして実行する。ブートセクタはオペレーティングシステムに依存することが多いが、その機能はカーネル をロードして実行することである。カーネルはさらに初期化処理を続行する。アクティブなパーティションがなかったり、アクティブなパーティションのブートセクタが不正だった場合、MBRは第二ブートローダをロードして制御を渡す。第二ブートローダは(多くの場合ユーザーに入力してもらって)パーティションを選択して、そのブートセクタをロードする。パーティションのブートセクタは一般にオペレーティングシステムのカーネルをロードする。
一部システム(特に最近のMacintosh や Microsoft Windows )はインテル のEFI を採用している。EFI 準拠のファームウェアを持つ比較的新しいシステムでは、MBR か GPT のあるドライブからブートでき、標準のMBRブートローダを使わない。また、coreboot もシステムマネジメントモード を使った過剰に複雑なファームウェア/BIOSを使わずにブート可能である。古い16ビットBIOSインタフェースは一部のx86用OS(Windows 3.1/95/98など)で必要とされていただけだが、そういった古いBIOSシステムをサポートするためブートローダーは16ビットサポートを続けていることが多い[ 20] [ NB 5] [ 21] 。
BIOSとは異なり、UEFI(CSM経由のレガシー ブートではない)はブートセクタに依存せず、UEFI はブートローダー(USBフラッシュドライブ またはEFIシステムパーティション 内のEFIファイル)を直接読み込み、OSカーネルはブートローダーによってロードされる。
多くのPCはBIOS チップを搭載していれば、BIOSチップメーカー名、著作権 、そのチップのIDなどを起動時に表示する。同時に利用可能なメモリ容量など、そのコンピュータに関する情報も表示する。
その他のブート手順
他のプロセッサは異なるブートモードを持つ。
CPU やマイクロコントローラ のブート方法として以下のような技法がある。
TI OMAP や一部のDSPは、ブートROMを内蔵しており、単独で洗練されたブートシーケンスを実行でき、NANDフラッシュ、SD、MMCカードなど各種ソースからブートプログラムをロードできる。各種デバイスへの対応を回路で実現するのは困難であり、その代わりにブートROMを集積している。ブートROMであれば、複数のデバイスからのブートを試行することもできる。また、UART 、SPI 、USB などから診断プログラムやブートローダをロードすることもできる。不揮発性メモリ上のブートソフトウェアが何らかの原因で消去されてしまった場合なども、この機能を使って復旧することができ、製造直後に不揮発性メモリにプログラムを格納するのにも使える。
JTAG などのハードウェアデバッグ用インタフェースを使ってシステムの制御を獲得することもできる。そのようなインタフェースを使ってブートローダーを不揮発性メモリ(フラッシュなど)に書き込むことができる。また、デバッグ用インタフェースを使ってRAMに診断コードやブートコードをアップロードすることもでき、アップロードしたコードをプロセッサに実行させることができる。ブートROMを集積していないプロセッサで、不揮発性メモリの内容が消去された場合、これを使って復旧を図る。
一部のマイクロコントローラはブート可能な不揮発性メモリにブートコードを書き込むことができる単純なプロトコルのインタフェースを用意している。製造時にそのようなインタフェースを使ってブートコードを不揮発性メモリに書き込む。システムをリセットすると、マイクロコントローラが自動的に不揮発性メモリ上のプログラムを実行開始する。例えば Atmel AVR などがこの方式である。この際のインタフェースはハードウェアで実装されていることが多い。ブートROMを持つプロセッサの場合、ブートROM上のソフトウェアでGPIO ピンをそのようなインタフェースに使うこともできる。
多くのデジタルシグナルプロセッサ (DSP) には以下のようなブートモードがある。
シリアルモードブート
パラレルモードブート(HPIブートなど)
DSPはマイクロプロセッサ やマイクロコントローラが別に存在するシステム設計ということが多く、それらがシステム全体の動作、割り込み処理、外部イベント処理、ユーザインタフェースなどを担当しており、DSPは信号処理だけを扱う。その場合DSPは別のプロセッサからブートすることができ、そのプロセッサを「ホストプロセッサ」とも呼ぶ。ホストプロセッサは「マスター」とも呼ばれる。DSPは自前のブート用メモリを持たないことが多く、必要なコードをホストプロセッサから供給してもらう必要がある。携帯電話、モデム、オーディオプレイヤー、ビデオプレイヤーなどがそのような構成を採用していることが多い。
FPGA チップは、電源を入れるとその回路構成情報を外部EEPROM からロードする。
IBM の Initial Program Load
IBM ではブート処理を IPL (Initial Program Load) と呼ぶ。System/360 の設計に由来する用語であり、今でも使われている[ 22] 。System/360の場合、オペレータが16進3桁のデバイスアドレス (CUu; C=I/O Channel address, U=Control unit address, u=Device address[ NB 6] ) を指定し、LOAD ボタンを押下する。System/370 と以降のシステムでは、スイッチ群とLOADボタンの代わりに、グラフィックス・コンソール上の選択エリアを使用する。グラフィックス・コンソールとしては IBM 2250 (英語版 ) 系と IBM 3270 系がある。例えば System/370 Model 158 では、"07X" とキーボードから入力すると入力エリアにキー入力したデバイスアドレスからのIPLが実行される。Amdahl 470V/6 などは16進4桁でデバイスアドレスを指定する。
System/360 の IPL はオペレータ指定のデバイスか事前定義されたデバイスのゼロ番地の位置から24バイトをロードする。そのうち2番目と3番目の8バイトグループがチャネルコマンドワード(CCW)として解釈され、さらに続けてスタートアッププログラムがロードされる。I/Oチャネルコマンドが完了すると、1番目の8バイトグループをステータスレジスタ(PSW)にロードし、指定された位置からスタートアッププログラムの実行を開始する[ 22] 。System/360 やその後継のシステムでは、IPL はハードウェア機能であり、システム上で動作するプログラムではない。事前に定義されたI/Oチャネルコマンドが起動され、デバイスを直接選択し、スタートアッププログラムをメモリ上にロードする。同じプロシージャがディスク装置だけでなく、テープドライブ やカードリーダなどからもスタートアッププログラムをロードする。
指定されたデバイスは実際のオペレーティングシステムを主たるストレージからロードする専用プログラムを格納していなければならない。これを "IPL Text" と呼び、ディスクにこれを置くには DASDI (Direct Access Storage Device Initialization) プログラムかそれと等価なプログラムをOS上で実行する。なお、IPL対応の磁気テープやカードデッキは "IPL Text" が存在する状態で配布されている。
バロースのテープからのブート
バロース B1700 (英語版 ) では、ブートストラップROMもハードウェアIPLも持たない。その代わり、システムをリセットすると、フロントパネルに装着されたテープから機械語を読み込んで、これがRAM上のブートローダとなる。この方式では、装着するテープを診断プログラムに代えれば、通常のOSも立ち上げられないほどの障害が発生している状況でシステムの診断が可能となる。
クイックブート
Linux (例えばSplashtop など)をOSとして採用している各種機器にはクイックブートと呼ばれる素早い起動が可能なものもある[ 23] [ 24] [ 25] [ 26] [ 27] [ 28] [ 29] [ 30] 。
エラー
Windows では、ブート処理中に解決できないエラーが発生すると、いわゆるブルースクリーン 状態になる。
脚注
注釈
^ EDSACの場合はロータリースイッチなどによるハードウェアから成る仕掛けからロードされた。
^ ハインラインは軍時代に無線を扱っているので、そちらからこの語を採った可能性がある。なお、邦題「時の門」は、The Time Gate と改題されて収録された作品集があり、そちらから採ったものと思われる。
^ 英 : Nicolet Instrument Corporation
^ MBRに仕様にもよるが、アクティブなパーティションはプライマリパーティションである必要はない。しかし、いずれにしてもブートセクタに適切なコードがあることは必須である。
^ インテル版Macintosh では、古いBIOSとの互換モードをファームウェアでサポートしている。
^ 一部制御ユニットには8台のデバイスしか接続しないが、16台以上を接続するものもある。実際、3830 DASD コントローラはオプションで32台のドライブをアドレッシングする。
出典
^ pull oneself up by one's bootstraps Wiktionary
^ “Phrase Finder ”. phrases.org.uk. 2012年4月7日 閲覧。
^ パラメトロン計算機: Illiacのブートストラップ
^ Buchholz, Werner (1953). “The System Design of the IBM Type 701 Computer”. Proceedings of the I.R.E. 41 (10): 1273.
^ “Bootstrap ”. Dictionary.com. 2012年4月7日 閲覧。
^ “Bootstrap ”. TheFreeDictionary.com. 2012年4月7日 閲覧。
^ Oxford English Dictionary . Oxford University
^ PDP-11 Peripherals Handbook, DEC, 1975, p.4-25
^ M792-YB bootstrap diode matrix ROMカードの写真
^ From Gutenberg to the Internet , Jeremy M. Norman, 2005, page 436, ISBN 0-930405-87-0
^ Van Vleck, Tom. “Glossary of Multics acronyms and terms ”. 2010年1月18日 閲覧。
^ Bensoussan, A. (1967-06-30). “BC.4.01 System Initialization and Bootload” . Multics System Programmer's Manual . http://www.multicians.org/mspmtoc.html
^ Dunten, S. D.; T. H. Van Vleck (1968-05-03). “BV.1.01 BOS Bootload: boot” . Multics System Programmer's Manual . http://www.multicians.org/mspmtoc.html
^ Thompson, Ken ; Dennis Ritchie (1971-11-03). The Unix Programmer's Manual (1st edition ed.). オリジナル の2015年2月3日時点におけるアーカイブ。. https://web.archive.org/web/20150203070922/http://www.cs.bell-labs.com/who/dmr/1stEdman.html 2008年1月7日 閲覧。
^ Ciaramella, Alberto. "Device for automatically loading the central memory of electronic processors." U.S. Patent No. 4,117,974. 3 Oct. 1978.
^ File:Apple_1_Advertisement_Oct_1976.jpg Apple Ad, Interface Age, October 1976
^ “Tint ”. coreboot. 20 November 2010 閲覧。
^ “FAQ - Why do we need coreboot? ”. coreboot . 2010年11月20日 閲覧。
^ “Google tech talks - coreboot (aka LinuxBIOS): The Free/Open-Source x86 Firmware ”. YouTube . 2012年4月7日 閲覧。
^ “Intel Platform Innovation Framework for EFI ”. Intel. 2008年1月7日 閲覧。
^ “OpenBIOS ”. 2012年4月7日 閲覧。
^ a b z/Architecture Principles of Operation . IBM . pp. Chapter 17. http://publibz.boulder.ibm.com/epubs/pdf/a2278324.pdf 2007年4月14日 閲覧。
^ Brown, Eric (2008年10月2日). “MontaVista Linux drives Dell's quick-boot feature ”. linuxdevices.com. 2012年9月7日時点のオリジナル よりアーカイブ。2010年11月20日 閲覧。
^ Larabel, Michael (June 14, 2008). “SplashTop Linux On HP, Dell Notebooks? ”. Phoronix. 2010年11月20日 閲覧。
^ “Voodoo Envy's Instant-On IOS (powered by Splashtop) ”. YouTube. 2010年11月20日 閲覧。
^ “Voodoo Envy 133 Laptop vs MacBook Air ”. gadgets-reviews.com (July 29, 2008). 2010年11月20日 閲覧。
^ “Voodoopc homepage ”. 2010年11月20日 閲覧。
^ Brown, Eric (2008年10月3日). “5-second Linux boots on low-powered hardware ”. 2013年1月28日時点のオリジナル よりアーカイブ。2010年11月20日 閲覧。
^ “Latitude ON ”. YouTube. 2010年11月20日 閲覧。
^ Brown, Eric (2008年11月7日). “Linux boots in 2.97 seconds ”. linuxdevices.com. 2012年9月14日時点のオリジナル よりアーカイブ。2010年11月20日 閲覧。
関連項目
外部リンク
ウィキメディア・コモンズには、
ブート に関連する
メディア および
カテゴリ があります。