ブートストラップの妙技について

コンピュータ

ブートストラップの妙技について

 以前、地下鉄の電車はどうやって地下に入れるのかという有名な漫才があった。
 コンピュータにも似たような問題がある。コンピュータを動かすには、メモリにプログラムが格納されていなければならない。これは、現在のディジタルコンピュータの基本概念である。しかし、電源を投入された直後のコンピュータのメモリには何もない。
 どのようにして、メモリにプログラムを格納するのであろうか。まさに、地下鉄の電車である。

 これを解決する方法がブートストラップである。
 コンピュータの分野で(単にブートと呼ばれることも多い)この用語は、電源投入後あるいはリセットの後に、コンピュータ上のメモリに基本的なソフトウェアを読み込むことを指す。ブートストラップ(英語: Bootstrapping)とは、一般的な用語として、外部の入力を必要とせずに実行される、自己開始型のプロセスを指す(『ウィキペディア』ブートストラップ)。

 現在のコンピュータ技術では特に妙味もない。例えば、OS(Operating System)をロードするためのプログラム(OSローダ)をディスクに格納しておき、それをメモリにロードするプログラムをROM(Read Only Memory) に格納しておく。スタートボタンが押下されると、ROMのプログラムを特定のメモリに読み込み、そこにブランチし、自動的にOSをローディングして動くようになる。
 このブートストラップの手順は次のようになる。

  1. スタートボタン押下(ROM読込み)
  2. OSローダをディスクからロードするプログラムの実行(OSローダの読込み)
  3. OSローダの実行(OSの読込み)
  4. OSの実行

 しかし、黎明期のコンピュータはハードウエアのサポートが十分でないため、ブートストラップは、よりソフトウエア依存性が強く、妙技が見られたのである。。
 具体的に説明するために、私が最初に使用したコンピュータを例にする。そのコンピュータの姉機は、1959年6月,ユネスコにより世界で初めての情報処理国際会議がパリで開催されたとき,その展示会 AUTO-MATH 1959 に出品し,安定して稼働させることができ好評を博した(Webサイト『IPSJ コンピュータ博物館』日本のコンピュータパイオニア:萱島興三)、という。ロダンの「考える人」の絵をタイプライタでプリントする実演を実施している。プリントしたものは見たことがある。

 私がブートストラップに興味を抱いたのは、その姉妹機で動く本格的なプログラム、プログラミングの練習用ではないということであるが、「シンタックスチェッカ(FORTRANというプログラミング言語で作成されたプログラムの文法チェックプログラム)」を初めて作成し、紙テープにパンチしたときである。シンタックスチェッカの頭に何やらわからないプログラムが自動的に付加されていた。(それから、数年後にシンタックスチェッカの論文を見ているので、当時としては先端的なものであったと思われる) 実は、それがブートストラップだったのである。そこで何なのかの教えを受け、解読することにしたのである。

 まず、スタートボタン押下時の動作を教えてもらった。そのコンピュータは、スタートボタンを押下すると、特定の2命令(命令とは特定の機能の実行を指示するコンピュータの言語。機械語ともいう)を特定のメモリに格納し、格納した最初の命令にブランチする。スタートボタンを押下したとき実行されるのはこれだけである。格納された最初の命令は、紙テープ上のブートストラップの一部をメモリに読み込む命令であり、読み込んだものを2命令の後に格納する。2つの命令が実行されたあと、紙テープから読み込まれたデータが命令として実行される。このようにして、紙テープ上のブートストラップの一部を順次メモリに読み込み、実行中のプログラムを再構成し、自己増殖させていくのである。こういう芸当は、プログラムをメモリに格納しておき順次に命令を実行するストアードプログラム方式の計算機(現在のディジタルコンピュータの方式)であるから実現できることであり、それを解読できた時にはその妙技に興奮を覚えたものである。

 ブートストラップには、

  1. 「シンタックスチェッカ」をメモリに読み込むプログラム
  2. aの部分をメモリに読み込むプログラム
  3. スタートボタンによって実行されるプログラムを自己増殖し再構成するための命令群

という3つの要素があり、紙テープ上には、c、b、a、シンタックスチェッカの順に配置される。a、bのプログラムは驚くほどのことはないが、cの部分が興味の核心である。わずか8ステップであるが自己増殖できるように命令を巧みに並べて配置しているのである。紙テープ上の命令の並びを見ただけでは理解できない。紙テープから読み込まれた命令がメモリ上のどこに格納されるかによって、自己増殖され再構成されてプログラムが次第に完成して行くのである。
 京都大学で数学の基礎論を学び、極めて緻密な思考をする人が、cのステップ数の短縮に取り組み、1ステップ短縮した。しかし、その内容を聞くと、紙テープの読み込みエラーが発生しないことを前提にしたものだったという笑い話である。裏返せば、それほど洗練されたものであったということである。

 この紙テープを紙テープ読取機にセットアップしてスタートボタンを押下すると、紙テープが読み込まれ、シンタックスチェッカが動きだす。シンタックスチェッカの代わりに給与計算プログラムをパンチすれば給与計算を行うことができる。
  このブートストラップの手順は次のようになる。

  1. スタートボタン押下(2命令をメモリに格納)
  2. cの部分の読込みと実行(cの部分を読み込み、実行中のプログラムを自己増殖し再構成する。続いて、bの部分の読込み)
  3. bの実行(aの部分の読込み)
  4. aの実行(シンタックスチェッカの読込み)
  5. シンタックスチェッカの実行

 このブートストラップを解読したことにより、コンピュータへの理解が深まったように記憶している。自己増殖し再構成されて行く様子を紙の上で再現し、手間暇かけて解読をしたがその効果は十分にあったように思う。

 ところで、OS上で動作するプログラムについて、自己増殖し再構成するようなプログラムを作成することは、インテグリティやセキュリティの観点から禁止されている。禁止されているだけでなくそのようなプログラムを実行すると異常終了する。このことは、理解しておいていただきたい。

 ブートストラップの語源については、『ウィキペディア』のブートストラップの項に見られる。

  •  背の高いブーツでは、その上部に指やブーツフックを引っ掛けて引き上げるためのつまみや輪がついている。 「自分でブートストラップを引っ張って自分を引っ張り上げる」という表現は19世紀に、不可能な動作の喩えとして存在した。
     1860年、形而上学的な言及として、「思考がそれ自身を分析しようとする試みというのは、人が自分のブーツのストラップを引っ張って自分を持ち上げようとするようなものだ」という表現がある。
     1922年、ブートストラップは「人の手を借りない努力で自身をより良くする」という意味の比喩として使用されている。この比喩表現は、「他の助けなしに行われる、自己維持のプロセス」を指す一連の表現に新しい比喩表現をもたらした。

     この用語は、ルドルフ・エーリヒ・ラスペの”The Surprising Adventures of Baron Munchausen(ほら吹き男爵物語)” に帰すると言われる。この物語の中で、ミュンヒハウゼン男爵は沼地で彼自身(と彼の馬)を髪の毛(特に後ろに垂らした髪) ―ブートストラップではなく― を掴んでいる。さらに、ミュンヒハウゼン男爵の物語のあらゆる版のどこにも、ブートストラップへの明確な参照は見つかっていない。
     エンジニア文化にはSFからの影響が見られることがあるが、日本では「時の門」という邦題で知られるハインラインの小説の原題は”By His Bootstraps”である。


という。

(奥谷 出)


Comments are closed.