テクニカルノート:コンピュータの歴史(1) 歴史の視点

テクニカルノート

コンピュータの歴史(1)
歴史の視点

個人会員 新井 全勝

 コンピュータの歴史について連載します。
 日本では電子計算機をコンピュータとしているが、コンピュータという用語には電子とかディジタルとかの区別はないといわれる。もともとは、コンピュータとは、研究機関や企業などで数学的な計算を担当していた人間、計算手のことであり、当時は “computer” という語の成り立ちが表す通り「計算する人間」ということであった(『ウィキペディア』計算手)、といわれる。
 機械によりけた上がりなどを自動化するアイディアが生まれ、これが計算機械の原点であり、その後、コンピュータはいろいろな視点で進化していくが、その視点は、いくつか存在する(『ウイキペディア』計算機の歴史)。そのような視点から捉えたコンピュータの歴史についてまず記してみたい。

(1)数値の表現: アナログ式 ⇒ ディジタル式

 数値を長さ,トルク,電圧,電流のような連続量で表現し演算するアナログ方式と離散的な数字の並びで表現し演算するディジタル式とがある。

 アンティキティラ島の機械は、アンティキティラ島近海の沈没船から発見された古代ギリシア時代(紀元前100年ごろ)の遺物で、最古のアナログコンピュータとされている。この機械は、模型を作成したりしながら現在も調査・研究が続けられている。37個の歯車を持ち(30個が現存)、太陽と月の位置を予測するために用いられた歯車式機械で、表示盤は少なくとも3つの針を持ち、日付、太陽と月の位置を示していたと考えられる(『ウイキペディア』アンティキティラ島の機械)。

 それから、1000年以上もたった1206年、トルコの博学者アル=ジャザリが「城時計」という天文時計を発明し、世界初のプログラム可能なアナログコンピュータとされている(『ウイキペディア』計算機の歴史)。
 第二次世界大戦以前、コンピューティングの世界においては、電子式アナログコンピュータとなっていたが、「最先端」のコンピュータといわれていた。しかし、アナログ式は精度は高いが正確性においてディジタルコンピュータに及ばず駆逐された歴史がある(同上)。

(2)計算の技法: 機械式 ⇒ 電子式

 アナログコンピュータもディジタルコンピュータも、計算の技法は機械式から電子式に進化した歴史がある。
 機械式アナログコンピュータは、前述のように古代ギリシャ時代に登場している。
 機械式ディジタルコンピュータも歯車を使って計算をする。1645年にフランスの哲学者・数学者のブレーズ・パスカルは加減算を行う試作機を作り、機械式計算機の発明者とされている。ドイツの哲学者・数学者のゴットフリート・ライプニッツは1672年、パスカルの計算機を改良して乗除算を直接計算できるようにした Stepped Reckoner を開発している(同上)。

 イギリスの数学者チャールズ・バベッジは、1835年に解析機関と呼ばれる機械式の計算機を設計している。しかし、開発はしていない。
 50桁の数値を1,000個格納できるレジスタがあり、機械語として四則演算、比較、平方根の演算、繰り返しと条件分岐、レジスタと演算装置との間でデータのやり取りをするロードとストアがある。これらの機械語、データをパンチカードで指示し、プログラミングが可能であった。また、機械語は現在のアセンブリ言語の原型のような記号的な記述法が考案されている。
 解析機関は、命令(機械語)によってプログラマブルになっており、原始的なコンピュータ(『ウィキペディア』解析機関)、といわれる。

 クロスカップル真空管アンプによりパルス列が生成されることが、1918年にウィリアム・エクルズとF・W・ジョーダンによって発見された。この回路がフリップフロップの基礎となり、2つの状態を持つ回路が電子式ディジタルコンピュータの基本要素となった(『ウィキペディア』真空管コンピュータ)。
 1939年、アイオワ州立大学のジョン・アタナソフとクリフォード・E・ベリーがアタナソフ&ベリー・コンピュータ (ABC) を開発し、世界初の電子式ディジタルコンピュータとされている。プログラムは不可能(単一機能)だが、真空管で加算器を構成したのはABCが最初である(『ウイキペディア』計算機の歴史)。

 1946年2月に公開されたENIAC (Electronic Numerical Integrator and Computer) は世界初の電子式汎用ディジタルコンピュータとされている。ENIACは個々の機能を持つ装置間の配線変更とスイッチ設定によりプログラミングするプログラム制御方式(ワイヤードプログラム方式)の計算機械であり、ペンシルベニア大学の物理学者ジョン・モークリーと電子工学者ジョン・プレスパー・エッカートにより開発された(同上)。

(3)プログラム方式: ワイヤードプログラム方式 ⇒ ストアードプログラム方式(内蔵方式)

 現在のコンピュータはノイマン型コンピュータといわれる。
 このコンピュータの着想は、

  1. プログラムとデータを同一のメモリに置く
  2. 現在実行中のプログラムの機械語を示すプログラムカウンタをもち、プログラムを逐次的に実行する

というものである。プログラム内蔵方式またはストアードプログラム方式と呼ばれる。

 ワイヤードプログラム方式の機械では、その都度、プログラムを作成する必要があった。ところが、ストアードプログラム方式の機械では、既存のプログラムを補助記憶装置から主メモリに転写することにより再利用できるようになり、自動化のレベルは向上し、ワイヤードプログラム方式に比べて性能的には劣るがその価値は十分にあった。

 ノイマン型の着想は、ENIAC開発の主要メンバーのモークリーとエッカートが考案していたとされる。モークリーとエッカートは、ENIACの開発が完了する以前から、EDVAC(エドバック、Electronic Discrete Variable Automatic Computer)というストアードプログラム方式のコンピュータの設計を始めていたが、そこに、ジョン・フォン・ノイマンがコンサルタントとして加わった(『ウィキペディア』EDVAC)。
 ノイマンは、数学・物理学・工学・計算機科学・経済学・気象学・心理学・政治学に影響を与えた20世紀科学史における最重要人物の一人とされ、特に原子爆弾の開発への関与でも知られる(『ウィキペディア』ジョン・フォン・ノイマン)。アインシュタインが「天才である」と評したとされるほどの学者であった。

 ストアードプログラム方式のコンピュータが考案者のモークリーとエッカートではなく、「ノイマン型」と呼ばれる理由としては、有名な文献『EDVACに関する報告書の第一草稿(1945年6月)』の著者がノイマン単独となっていることと、当時のコンピュータ関連の他の多くの資料が軍事機密であったのに対し、この文献は部外者への配布などが行われ、公開されたという理由が大きい、といわれる。
 一流数学者の名前を利用してEDVACの名声をあげたいペンシルベニア大学側の思惑があったともされ、モークリーとエッカートが開発メンバーから離脱したのは、このことへの反発があるとされることもある。
 そのため、EDVACは、最初に設計されたストアードプログラム方式の機械であるにもかかわらず、完成は最初ではなかった(『ウィキペディア』EDVAC)。

 世界最初のストアードプログラム方式のコンピュータは、Manchester Small-Scale Experimental Machine (SSEM) であり、愛称はBaby。英国マンチェスター大学でフレデリック・C・ウィリアムス、トム・キルバーン、Geoff Tootillらが製作し、1948年6月に最初のプログラムが動作した(『ウィキペディア』Manchester Small-Scale Experimental Machine)。

 世界初の実用的なストアードプログラム方式のコンピュータは、EDSAC(エドサック、Electronic Delay Storage Automatic Calculator)である。このマシンはノイマンがまとめたEDVACについてのレポート(『EDVACに関する報告書の第一草稿』)に刺激され、英国ケンブリッジ大学の数学研究所のモーリス・ウィルクスとそのチームが1949年5月に開発した。
 EDSAC上で最初に動作したプログラムは、0から99までの整数の二乗の表を作るプログラムと素数のリストを作るプログラムであった(『ウィキペディア』EDSAC)。

 EDSACは、システムソフトウエアという側面でも貢献した(『ウィキペディア』EDSAC)。

  1. イニシャルオーダ (initial orders) はスイッチ群で実装されていて、起動時にメモリの先頭にロードされ、実行される。ブートストラップの役割を果たした。
  2. 1949年5月には、初歩的なアセンブラの機能がわずか31ワードのイニシャルオーダに搭載された。これは世界初のアセンブラであり、ソフトウェア産業の出発点といわれる。
  3. 今日のオペレーティングシステムに含まれるような様々な技法が考案された。
    1. ユーザはプログラムをアセンブリ言語で書くと、紙テープにさん孔して入力の準備をする。(ユーザは紙テープを見てコードを読み取れるようになった)。
    2. 準備ができると、紙テープを読取装置の近くにある紐に引っ掛ける。
    3. オペレータはその紐に引っ掛けられた紙テープ群から1つを選び、EDSACに読み込ませる。これが いわゆるジョブキューの役割を果たした。バッチ処理型OSの技法である。
    4. プログラムの実行によってプリントアウトされたものと紙テープはユーザに返される。何も出力されない場合は停止したメモリ位置をユーザに知らせる。
  4. デビッド・ホイーラーは、このプロジェクトで世界初の計算機科学のPhDを取得したが、サブルーチンの概念の発明者とされている。サブルーチンにジャンプする命令のあるアドレスに1を加えたアドレス(戻りアドレス)をレジスタに格納した状態でサブルーチンにジャンプする(これを Wheeler jump と呼ぶ)。
  5. サブルーチンの概念からライブラリを開発できるようになった。1951年には数学用など87のライブラリが広く使われていた。入力ライブラリのように、今日のOSの基本機能も備えていた。
  6. 以上のような技法を初めとし、本機の利用によって得られた経験と、具体的にそのプログラムとを 『The Preparation of Programs for an Electronic Digital Computer』という書籍として公刊し、世界的に広く読まれた。
     当時は米国の一部のコンピュータのように、軍や兵器や米国の安全に関与しているため秘密にすることが強要され知見が全く共有されなかった等といった中で、同書は世界的にプログラミングの実例を広めたのみならず、その後にストアードプログラム方式コンピュータを設計する者への指針ともなったなど、広く世界に貢献した。

 コンピュータの論理回路を構成する論理素子が、真空管 ⇒ トランジスタ ⇒ 集積回路と変貌する視点は、電子式ディジタルコンピュータの世代分けとして知られているが、次回に記すことにしたい。


Comments are closed.