編集この項目では、コンピュータの動作について説明しています。インドの悪霊については「ブータ」をご覧ください。bootstrap)は、コンピュータシステムの電源投入時、あるいはシステムのリセット後、モニタやOSなどなんらかの基本的なシステムソフトウェアを主記憶に展開し、ユーザプログラムを実行できるようにするまでの処理の流れをいう。loader)は、以上のプロセスで使われるローダ、すなわち不揮発性の補助記憶にある目的のプログラムを読み出し、揮発性の主記憶に書き込むプログラムのことである。電源投入時のブートのことを「コールドブート」、リセットされたことによるブートを「ウォームブート」という。ウォームブートでは、コールドブートにおける最初のほうの手続きのいくつかが必要無い場合もあり、そういった手続きを省略することもある。strap)を自分で引っ張って自分を持ち上げようとするイメージから来ている[1]。いうパラドックスに着目した呼称である[2]。初期のENIACではスイッチ群とプラグボードを使い、人手でプログラムを入力していた(正確に言えば配線を変えていた)。呼ばれ、非常に技巧的なわずか数十語のコードで単純なアセンブラの機能を実現していた。英語版WikipediaのEDSAC#System_softwareを参照。EDSACのイニシャルオーダの影響を受けて作成された。当時はそれらのうちの1つの手法を「ブートストラップ方式」と呼んでいた。Iの方式がブートストラップである。以降[4]、何らかのブート処理でプログラムやOSを主記憶にロードするようになった。表示されたボタンを押下するとハードウェアの論理回路が対応する周辺機器からブートプログラムを読み込み、それを実行する。するとブートプログラムがより大きなプログラムを自動的にロードする[5][6]。「ブート」という言葉は1958年からこの意味で使われている[7]。言葉の歴史としては、自分自身で自分のための土台を用意する、といったような意味では、電子回路の分野にもブートストラップという手法がある。2]も、そのような意味でブートストラップという語を使っている。以降のミニコンピュータでは、フロントパネルにあるスイッチ群を操作して短いプログラムを入力する方法が採用された。初期のミニコンピュータは磁気コアメモリを使っており、電源を切っても情報は失われない。従ってブートローダーは消去されない限りメモリ上に存在し続けるが、バグのあるプログラムを実行して全メモリの内容を上書きしてしまうこともある。PDP-11でも同様の手法を採用したが、後にDECはオプションで32ワード(64バイト)のブートプログラムを格納したROMを追加できるようにした。このROMは集積回路ではなく、M792というUnibus用カードであり、32×16のダイオードアレイで回路を構成している。ダイオードが通電する部分のビットは1になり、通電しないようダイオードを除くと対応するビットが0になる。シリーズとして販売した[8][9]。ボタンがあり、それによってパンチカード、磁気テープ、磁気ドラム装置のいずれかから先頭の36ビットワードを読み込む。そのうち先頭の18ビットは命令として実行され、通常はメモリに追加のワード群を読み込む命令になっている[10]。同様にパンチカードリーダーからプログラムをロードする。番地のメモリに読み込まれ、001番地から命令として実行開始する。命令は通常いつも同じで、この先頭80文字分の情報をアセンブリエリアに転送し、2枚目以降のパンチカードの内容を読み込んでプログラムを構成する。番地の命令へジャンプし、そこにある命令(カードを読み込む命令)を実行することで、次のパンチカードを読み込み、その情報を処理する。パンチカード1枚ずつが次のパンチカードをブートストラップする形になっている。呼ばれるパネルがある。それを命令列として実行することでPP0は自身のメモリに必要なコードをロードし、他のPPを初期化する。ボタンがある[11]。ブートコマンドがあった[12][13]。1975年、アルベルトCiaramellaはCSELTに、電話交換機のコンピュータをブートするデバイスの特許を取得した。ブートローダは、現代のROMメモリに常駐し、ブートプロセスはシングルボタン圧力から起動した。デバイスは、アドオン(例PDP-11用)などの任意の種類のコンピュータに適していた。登場したことでブート処理は一変した。ROMには、マスクROM、PROM、EPROM、フラッシュメモリなどがある。これによってファームウェアとしてブートプログラムをインストールした状態でコンピュータを出荷できるようになった。PROMチップが搭載されていたため、フロントパネルが不要になった。keyboard."(スイッチはいらない、ライトもいらない...PROM内のファームウェアで、キーボードからプログラムを入力し、表示し、デバッグできる)と宣伝している[16]。ホームコンピュータは、電源を入れるとROM上のOSがすぐさま起動する。そのため、二次記憶装置からOSをロードする機能が省かれている。システムのカスタマイズやアクセサリ、サポートソフトウェアなどはフロッピードライブからブート時に自動的にロードされる。電源投入から一定時間フロッピーがセットされない場合やフロッピー内に追加コンポーネントが見つからない場合、それらのロード処理はタイムアウトする。これによりブランクディスク挿入を防ぐ。多くのコンピュータシステムでは、メインメモリ上の実行コードだけを実行できる。CD、フラッシュメモリ(USBメモリなど)に格納されている。コンピュータの電源を入れた直後、メモリ上にはオペレーティングシステムは存在しない。コンピュータのハードウェアだけではオペレーティングシステムがやっているような複雑なことはできないので、ディスクから任意のプログラムをロードするというようなことはできない。ここで『オペレーティングシステムをメモリにロードするためには、オペレーティングシステムがメモリに存在していなければならない』というジレンマが生じる。このパラドックスの解決法は、ブートローダ(またはブートストラップローダ)と呼ばれるROM上にある特殊な小さいプログラムを使うことである。このプログラムはオペレーティングシステムの全ての機能を持っているわけではないが、オペレーティングシステムをロードして起動するための別のプログラムをロードするには十分な機能を持っている。多段階のブートローダがよく使われ、ある小さなプログラムから別の小さなプログラムを呼び出すということを繰り返して、最終的にオペレーティングシステムが起動される。ブートストラップのロードに使用するスイッチ群がある。初期のプログラム可能なコンピュータは、トグルスイッチがフロントパネルに並んでいて、それを操作することによってブートローダをプログラム格納域に置いてからCPUを起動するようになっていた。するとCPUはブートローダを実行して、オペレーティングシステムを外部記憶メディア(例えば紙テープあるいは磁気ディスク装置)からロードすることができた。初期のマイクロコンピュータなどがスイッチを使っていた。フロントパネルのスイッチ群は直接CPUに命令列を渡すのにも使われた。ボタンを押すだけで紙テープリーダからプログラムをメモリにロードすることができる。この紙テープリーダにはブートローダーが格納されており、それを実行すると二次ブートローダーまたはオペレーティングシステムを外部ストレージ媒体(紙テープ、パンチカード、ディスク装置など)からロードする。ブートローダの擬似コードは以下の8個の命令に単純化できる。3]のミニコンピュータに基づいている。二次ローダが紙テープから逆の順番に読み込まれることに注意。番地を上書きする長さになっている。番地から二次ローダを実行し始める。二次ローダはオペレーティングシステムが書いてあるもっと長いテープが紙テープ読取装置にセットされるのを待つ。ブートローダと二次ローダの違いは紙テープ読取装置がエラーを発生したときに対処できるかどうかである。当時のハードウェア(例えばASR-33)では紙テープ読取装置は頻繁にエラーを起こした。一部システムは人間のオペレータか周辺機器からのブート信号を受けて、固定の小さな命令列をロードしてメモリ上の特定のアドレスに配置し、1つのCPUを初期化してその位置から実行を開始させる。その命令列は一般に何らかの周辺機器(オペレータがスイッチ操作で機器を指定する場合もある)からの入力操作を開始するものである。他のシステムは、周辺機器またはチャネル・コントローラに直接ハードウェアコマンド列を送り、単純な入力操作(例えば、システムデバイスの0番セクタをリードし、メモリの1000番地にリード結果を置く)を実施させ、小さなブート用命令列をメモリ上にロードさせる。I/O完了を知らせる信号を契機として、CPUにその命令列を実行させることになる。BASIC)を起動するというものがもっぱらで、外部記憶装置からシステムを読み込むブートシーケンスは存在しなかった。クリーンコンピュータを標榜したシャープの一部のパソコンのように例外もある。最近のコンピュータではブート処理はCPUがROM内のソフトウェア(例えば、BIOSやEFI)を既定のアドレスから実行することで開始される(CPUはリセットされると外部からの助け無しにこのソフトウェア実行をするよう設計されている)。そのソフトウェアはブートに使用できる各種デバイスを探し、最も優先順位の高いデバイスの特殊な領域(一般にはブートセクタ)から小さなプログラムを読み込む。ブートローダには特有の制限、特にそのサイズの制限がある。その値を見て正しいブートローダであると判断する)。ハードウェアが非常に密接に関連しており、標準のOS以外でブートすることができない。そのような場合、一般にとられる解決策としては、標準OSに属するプログラムとしてブートローダを設計し、それがシステムをハイジャックして別のOSをロードする。ブート可能となっていた。90年代によく使われていたMS-DOS環境からLinuxを起動するloadlin(w:Loadlin)も同様のものである(もっともMS-DOSには保護がないので、ハイジャックというほど大袈裟なものでもない)。一般的な一次ブートローダーとしては、以下のものがある。BIOSEFIOpenBIOS(英語版)OpenBoot二次ブートローダ編集ブートローダが読み込む小さなプログラムは、オペレーティングシステムではなく二次ブートローダであることが多い。BOOTMGR、NTLDR、SYSLINUX、GRUBなどがある。ロードすることができ、最後にOSを実行する。OSは初期化処理を行い、デバイスドライバをロードし、OSの通常の処理に必要とされる他のプログラムをロードする。いったブートローダーは、マルチブート設定が可能である。Memtest86、ゲームなど[17])。ブートローダーに別のブートローダーをロードさせることもできる。GRUBがBOOTMGRをロードすることも可能である。一般にデフォルト設定があり、ある時間内にユーザーが選択しなければデフォルト状態でブートを行う。9x系ではMS-DOSが二次ブートローダのような役割を果たしている。MS-DOSを単体で起動することもできる。ブート処理はコンピュータがユーザとやりとりできるようになった時点で完了したと見なされる。オペレーティングシステムが普通のアプリケーションを実行できるようになった時点で完了と見なすこともできる。費やす時間で、残りはオペレーティングシステムのロードにかかる時間である。OSロード後の経過時間はシステム内のコアを同時に起動することで3秒程度にまで短縮可能で、例えばcorebootでそのようなブートが可能である[18][19]。大きなサーバでのブートは全てのサービス起動まで何分かかかる。多くの組み込みシステムではほとんど即座にブートが完了しなければならない。テレビが映るまでに1分かかったのでは使い物にならない。フラッシュメモリに格納して、直接実行できるようにしている。ROMやフラッシュメモリはRAMに比べると、2007年現在の水準では1000倍と桁違いに遅い為、複合機など高機能な機器ではROMの内容をRAMに書き出して実行している。VxWorksなどではROM上の直接実行形式で用意されたブートストラップローダーがROM上の圧縮されたプログラム本体をRAMに展開して本体プログラムが起動するという実装がとられている。組み込みシステムでは、製造工程や保守工程でプログラムを変更するためにフラッシュブートローダが必須である。フラッシュブートローダはフラッシュメモリ内にあり、リセット後に最初に実行されるアプリケーションである。フラッシュブートローダを出荷製品に入れておくと、アプリケーションの更新・修正、設定の変更が容易に行える。ベースのフラッシュブートローダが一般的であり、診断プロトコルを使って通信・ダウンロードを行う。多くのコンピュータはコンピュータネットワーク経由でブートを行う機能を持っている。ような単純なプロトコルでクライアントに転送する。内蔵ディスクを持たないシンクライアントは、ネットワークブートによって起動される。Environment(PXE)などが存在する。対応のブート可能なフラッシュドライブ。USBの一種ブートデバイスとはオペレーティングシステムをロードする前に初期化しなければならないデバイス(周辺機器)のことである。これには一つの入力機器(キーボード)、ひとつの出力機器(ディスプレイ)、初期プログラムロード用機器(フロッピーディスクドライブ、ハードディスクドライブ、CD-ROM、USBメモリなど)がある。用機器とは、オペレーティングシステムを格納し、ブート処理でOSをロードするのに使われる機器であり、他にも単独動作するユーティリティ(例えば、memtest86+)やブートローダが格納されている。古いシステムではこれはフロッピーかハードディスクと限定されていた。最近のPCのBIOSは様々なデバイスからのブートをサポートしており、ローカルのハードディスク(あるいはディスク上のパーティション)、光学ドライブ、USBデバイス(フラッシュドライブ、ハードディスクドライブ、光学ディスクドライブなど)、フラッシュメモリカード、ネットワークカード(PXEを使用)などがある。古いPCではフロッピーディスクドライブ、SCSIデバイス、ZIPドライブ、LS-120ドライブなどに限定されていた。一般にユーザーがBIOSでブート順を設定することができる。1番目をDVDドライブ、2番目をハードディスクと設定した場合、BIOSはまずDVDドライブからのブートを試みる。DVDがセットされていないなどの理由でブートに失敗するとローカルなハードディスクからのブートを試みる。入れておけば、ハードディスクにLinuxをインストールしなくともLinuxを起動することができる。これがマルチブートの一例であり、ユーザーはPOST実行後にどちらのOSを起動するかを選択できる。番地のメモリにある命令を実行する(ここはx86を使用するどんなコンピュータでも同じである)。このメモリ位置は(リアルモードでの)システムメモリのほぼ最後尾にあたる。そこにはBIOSの初期プログラムの位置へのジャンプ命令が含まれていて、BIOSに制御が渡る。実行して必要な機器が正常に動作するかをチェックする。同時にそれら周辺機器の初期化も行う。次にBIOSは事前に設定されたデバイスリストを順にあたって、ブート可能な周辺機器を探す。いうワード(ブートシグニチャ)があるデバイスである。十六進ダンプそのようなデバイスが見つからない場合、エラーが発生してブート処理は停止する。使用)にロードして実行する。呼ばれ、その内容はオペレーティングシステムには依存しない。それが見つかったら、MBRのコードはパーティションのブートセクタをロードして実行する。ブートセクタはオペレーティングシステムに依存することが多いが、その機能はカーネルをロードして実行することである。カーネルはさらに初期化処理を続行する。アクティブなパーティションがなかったり、アクティブなパーティションのブートセクタが不正だった場合、MBRは第二ブートローダをロードして制御を渡す。第二ブートローダは(多くの場合ユーザーに入力してもらって)パーティションを選択して、そのブートセクタをロードする。パーティションのブートセクタは一般にオペレーティングシステムのカーネルをロードする。Windows)はインテルのEFIを採用している。あるドライブからブートでき、標準のMBRブートローダを使わない。corebootもシステムマネジメントモードを使った過剰に複雑なファームウェア/BIOSを使わずにブート可能である。多くのPCはBIOSチップを搭載していれば、BIOSチップメーカー名、著作権、そのチップのIDなどを起動時に表示する。同時に利用可能なメモリ容量など、そのコンピュータに関する情報も表示する。他のプロセッサは異なるブートモードを持つ。CPUやマイクロコントローラのブート方法として以下のような技法がある。一部のDSPは、ブートROMを内蔵しており、単独で洗練されたブートシーケンスを実行でき、NANDフラッシュ、SD、MMCカードなど各種ソースからブートプログラムをロードできる。各種デバイスへの対応を回路で実現するのは困難であり、その代わりにブートROMを集積している。ブートROMであれば、複数のデバイスからのブートを試行することもできる。UART、SPI、USBなどから診断プログラムやブートローダをロードすることもできる。不揮発性メモリ上のブートソフトウェアが何らかの原因で消去されてしまった場合なども、この機能を使って復旧することができ、製造直後に不揮発性メモリにプログラムを格納するのにも使える。JTAGなどのハードウェアデバッグ用インタフェースを使ってシステムの制御を獲得することもできる。そのようなインタフェースを使ってブートローダーを不揮発性メモリ(フラッシュなど)に書き込むことができる。デバッグ用インタフェースを使ってRAMに診断コードやブートコードをアップロードすることもでき、アップロードしたコードをプロセッサに実行させることができる。ブートROMを集積していないプロセッサで、不揮発性メモリの内容が消去された場合、これを使って復旧を図る。一部のマイクロコントローラはブート可能な不揮発性メモリにブートコードを書き込むことができる単純なプロトコルのインタフェースを用意している。製造時にそのようなインタフェースを使ってブートコードを不揮発性メモリに書き込む。システムをリセットすると、マイクロコントローラが自動的に不揮発性メモリ上のプログラムを実行開始する。この際のインタフェースはハードウェアで実装されていることが多い。ブートROMを持つプロセッサの場合、ブートROM上のソフトウェアでGPIOピンをそのようなインタフェースに使うこともできる。以下のようなブートモードがある。シリアルモードブートパラレルモードブート(HPIブートなど)DSPはマイクロプロセッサやマイクロコントローラが別に存在するシステム設計ということが多く、それらがシステム全体の動作、割り込み処理、外部イベント処理、ユーザインタフェースなどを担当しており、DSPは信号処理だけを扱う。その場合DSPは別のプロセッサからブートすることができ、そのプロセッサを「ホストプロセッサ」とも呼ぶ。ホストプロセッサは「マスター」とも呼ばれる。DSPは自前のブート用メモリを持たないことが多く、必要なコードをホストプロセッサから供給してもらう必要がある。携帯電話、モデム、オーディオプレイヤー、ビデオプレイヤーなどがそのような構成を採用していることが多い。FPGAチップは、電源を入れるとその回路構成情報を外部EEPROMからロードする。System/360の設計に由来する用語であり、今でも使われている[22]。System/370と以降のシステムでは、スイッチ群とLOADボタンの代わりに、グラフィックス・コンソール上の選択エリアを使用する。キーボードから入力すると入力エリアにキー入力したデバイスアドレスからのIPLが実行される。16進4桁でデバイスアドレスを指定する。オペレータ指定のデバイスか事前定義されたデバイスのゼロ番地の位置から24バイトをロードする。そのうち2番目と3番目の8バイトグループがチャネルコマンドワード(CCW)として解釈され、さらに続けてスタートアッププログラムがロードされる。I/Oチャネルコマンドが完了すると、1番目の8バイトグループをステータスレジスタ(PSW)にロードし、指定された位置からスタートアッププログラムの実行を開始する[22]。ハードウェア機能であり、システム上で動作するプログラムではない。事前に定義されたI/Oチャネルコマンドが起動され、デバイスを直接選択し、スタートアッププログラムをメモリ上にロードする。同じプロシージャがディスク装置だけでなく、テープドライブやカードリーダなどからもスタートアッププログラムをロードする。指定されたデバイスは実際のオペレーティングシステムを主たるストレージからロードする専用プログラムを格納していなければならない。プログラムかそれと等価なプログラムをOS上で実行する。存在する状態で配布されている。ブートストラップROMもハードウェアIPLも持たない。その代わり、システムをリセットすると、フロントパネルに装着されたテープから機械語を読み込んで、これがRAM上のブートローダとなる。この方式では、装着するテープを診断プログラムに代えれば、通常のOSも立ち上げられないほどの障害が発生している状況でシステムの診断が可能となる。クイックブート編集Linux(例えばSplashtopなど)をOSとして採用している各種機器にはクイックブートと呼ばれる素早い起動が可能なものもある[23][24][25][26][27][28][29][30]。ブート処理中に解決できないエラーが発生すると、いわゆるブルースクリーン状態になる。EDSACの場合はロータリースイッチなどによるハードウェアから成る仕掛けからロードされた。ハインラインは軍時代に無線を扱っているので、そちらからこの語を採った可能性がある。改題されて収録された作品集があり、そちらから採ったものと思われる。MBRに仕様にもよるが、アクティブなパーティションはプライマリパーティションである必要はない。いずれにしてもブートセクタに適切なコードがあることは必須である。インテル版Macintoshでは、古いBIOSとの互換モードをファームウェアでサポートしている。一部制御ユニットには8台のデバイスしか接続しないが、16台以上を接続するものもある。コントローラはオプションで32台のドライブをアドレッシングする。2012年4月7日閲覧。2012年4月7日閲覧。2012年4月7日閲覧。2010年1月18日閲覧。2008年1月7日閲覧。2010年11月20日閲覧。2010年11月20日閲覧。2012年4月7日閲覧。2008年1月7日閲覧。2012年4月7日閲覧。2007年4月14日閲覧。2012年9月7日時点のオリジナルよりアーカイブ。2010年11月20日閲覧。2010年11月20日閲覧。2010年11月20日閲覧。2010年11月20日閲覧。2010年11月20日閲覧。2013年1月28日時点のオリジナルよりアーカイブ。2010年11月20日閲覧。2010年11月20日閲覧。2012年9月14日時点のオリジナルよりアーカイブ。その逸話が「boot(靴)」「bootstrap(靴紐)」の語源とされている外部リンク編集ウィキメディア・コモンズには、ブートに関連するカテゴリがあります。2012年4月7日閲覧。2012年4月7日閲覧。2012年4月7日閲覧。2012年4月7日閲覧。3.0のもとで利用可能です。プライバシーデスクトップ。