この項目では、コンピュータの動作について説明しています。インドの悪霊については「ブータ」を、ブート盤については「海賊盤」をご覧ください。
「ブート」の語義については、ウィクショナリーの「ブート
」の項目をご覧ください。ブート(英: boot)またはブートストラップ(英: bootstrap)は、コンピュータシステムの電源投入時、あるいはシステムのリセット後、モニタやOSなどなんらかの基本的なシステムソフトウェアを主記憶に展開し、ユーザプログラムを実行できるようにするまでの処理の流れをいう。ブートローダ(英: boot loader)は、以上のプロセスで使われるローダ、すなわち不揮発性の補助記憶にある目的のプログラムを読み出し、揮発性の主記憶に書き込むプログラムのことである。
電源投入時のブートのことを「コールドブート」、リセットされたことによるブートを「ウォームブート」という。ウォームブートでは、コールドブートにおける最初のほうの手続きのいくつかが必要無い場合もあり、そういった手続きを省略することもある。
ブートストラップまたはブートストラップローダ(英: bootstrap loader)という名前は、ブーツを履くことはまずどんな仕事のはじめにもやる事で、さらにブーツのつまみ革(英: strap)を自分で引っ張って自分を持ち上げようとするイメージから来ている[1]。つまり、コンピュータはプログラムをロードしないと動作できないが、プログラムをロードするプログラムはどうロードするのだ? というパラドックスに着目した呼称である[2]。 初期の電子計算機のひとつであるENIACは、いわゆるノイマン型コンピュータではなく、プログラムはパッチボードを利用した配線によっておこなわれ、また解決したい問題の計算式の初期値などを最初から設定して計算を行うような計算機であった。 ノイマン型として実用的に稼働したとされる初期のコンピュータのEDSAC(1949年稼働)では、イニシャルオーダ (英: initial orders) と呼ばれたプログラムが、ロータリースイッチで実現された一種のROMからハードウェア的に主記憶に書き込まれる。イニシャルオーダは非常に技巧的なわずか数十語のコードで単純ながらアセンブラ的機能を実現しており、紙テープを読み込んでそれを機械語に変換し主記憶の残りの部分に書き込む(英語版WikipediaのEDSAC#System_software
歴史
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]。 IBM 701 (1952?1956) には "load" ボタンがあり、それによってパンチカード、磁気テープ、磁気ドラム装置のいずれかから先頭の36ビットワードを読み込む。そのうち先頭の18ビットは命令として実行され、通常はメモリに追加のワード群を読み込む命令になっている[10]。IBM 1401 (1958) では同様にパンチカードリーダーからプログラムをロードする。
集積回路のROMが登場する以前