EDSAC

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

EDSAC(エドサック、Electronic Delay Storage Automatic Calculator[1])は、初期のイギリスコンピュータのひとつである[2]。このマシンはジョン・フォン・ノイマンがまとめたEDVACレポート(en:First Draft of a Report on the EDVAC)に刺激され、モーリス・ウィルクスケンブリッジ大学の数学研究所のチームが開発した。EDSACは、世界初の実用的なプログラム内蔵方式電子計算機であるが、プログラム内蔵方式の世界初の稼働したマシンではない[3]

プロジェクトは J. Lyons & Co. Ltd. が資金援助し、同社はEDSACのデザインに基づいた初の商用コンピュータ LEO I を開発した。1949年5月6日、EDSAC上で最初に動作したプログラムは、0から99までの整数の二乗の表を作るプログラムと[4]素数のリストを作るプログラムであった。

技術概要

ハードウェア構成

EDSACが開発されると即座に大学の研究用に使われ始めた。つまり EDSAC は実験的ではなく、あくまでも実用的であった。3000本の真空管を使用し、消費電力は12kW。主記憶装置には水銀遅延管を使用している。入力には5孔の紙テープを使用し、出力にはテレタイプ端末を使用している。

当初、レジスタとしてはアキュムレータと乗算器用レジスタしかなかった。1953年デビッド・ホイーラーイリノイ大学から戻ると、インデックスレジスタを設計してEDSACのハードウェアを拡張している。

記憶装置と命令

主記憶容量は1024ワード(1ワード(ショートワード)は17ビット)だが、実際にメモリが実装されたのは512ワードまでだった。ロングワードは35ビットで、偶数アドレスと奇数アドレスのショートワードを、真ん中に「サンドイッチビット」と呼ばれるビット(記憶装置の都合によるスタートビット兼ストップビットのようなものがそのまま入る)を挟んで連続して使用する。数値は2の補数表現の二進数である。

18個の命令を備えていた。17ビットのショートワード先頭5ビットが命令コードだが、紙テープの文字コードをそのまま使い、ニーモニックの文字コードを命令コードとしていた。例えば "Add" 命令の命令コードは "A" の文字コードだった。その後に1ビットの未使用ビットをはさみ、10ビットのメモリアドレスがあり、最後の1ビットはオペランドがショートワードなのかロングワードなのかを指定する。

乗算器は数値を固定小数点数として扱い、その範囲は -1 ≤ x < 1 となるよう設計されている。すなわち、小数点は符号のすぐ後にある。アキュムレータは71ビット幅で、35ビットのロングワード同士の乗算を行っても切捨てが起きないよう設計されている。

命令としては、加算、減算、乗算、照合[5]、左シフト、右シフト、乗算器用レジスタへのロード、アキュムレータの内容のストア(オプションでアキュムレータをクリア)、条件付スキップ、入力テープ読み込み、文字印字、アキュムレータを丸める、NOP、ストップなどがある。除算命令はなく(サブルーチンで実装)、アキュムレータに直接メモリからロードする命令もない(アキュムレータをストア命令でゼロクリアしてから加算命令でロードする必要がある)。

システムソフトウェア

イニシャルオーダ (initial orders) はスイッチ群で実装されていて、起動時にメモリの先頭ワード群にロードされる。1949年5月には、上述したニーモニック設計を生かした初歩的なアセンブラの機能がわずか31ワードのイニシャルオーダに搭載されている[6]。これが世界初のアセンブラであり、ソフトウェア産業の出発点とも言える。

EDSACは同大学の様々な実際の問題を解くのに使われ、今日のオペレーティングシステムに含まれるような様々な技法が考案された。ユーザーはプログラムをアセンブリ言語で書くと、紙テープをさん孔して入力の準備をする。ユーザーは紙テープを見てコードを読み取れるようになった。準備ができると、紙テープを読取装置の近くにある紐に引っ掛ける。オペレータはその紐に引っ掛けられた紙テープ群から1つを選び、EDSACに読み込ませる。これがいわゆるジョブキューの役割を果たした。プログラムの実行によってプリントアウトされたものと紙テープはユーザーに返される。何も出力されない場合は停止したメモリ位置をユーザーに知らせる。デバッガはまだなかったが、ブラウン管を使って指定したメモリ位置の内容を表示することができた。これは例えば数値が収束しているかどうかを見るのに使われた。通常業務時間が終了すると、許可を得たユーザーが自らマシンを操作でき、真空管が故障しない限り夜遅くまで使っていたが、あるユーザーによれば真空管の故障はよく起きたという[7]

プログラミング技法

初期のプログラマは今日では推奨されない技法、特にコード書き換えを使う必要があった。当初インデックスレジスタがなかったため、配列にアクセスするには命令内のアドレス部分を実行時に書き換えてやる必要があった。

デビッド・ホイーラーはこのプロジェクトで世界初の計算機科学のPhDを取得したが、サブルーチンの概念の発明者とされている。ルーチンにジャンプする命令のあるアドレスに1を加えたアドレスをレジスタに格納した状態でルーチンにジャンプする(これを Wheeler jump と呼ぶ)。サブルーチン側はその渡されたアドレスで最後尾のジャンプ命令のアドレス部を書き換える。この書き換えをサブルーチンの先頭で行えば、さらに別のサブルーチンコールを呼ぶ、入れ子を実現することもできる(再帰はできない、ということに注意)。

ただし当時はリロケータブルバイナリなどといったものがあるわけでは当然なく、プログラマがジャンプ先の位置を計算する必要があり、各ルーチンの長さを予め正確に知っている必要があった。プログラマはサブルーチンをマスターテープからコピーして自分のプログラムの後ろに置いて使用した(そのため、サブルーチンの先頭位置はプログラムによって異なり、事前のアドレス計算が必要となる)。

アプリケーションソフトウェア

サブルーチンの概念からライブラリができるようになった。1951年には次のような分野の87のサブルーチンが広く使われていた。

EDSACの利用例

その後の開発

EDSACの後継機 EDSAC 2 は1958年に動作を開始した。1961年、EDSAC 2 用のAutocodeALGOL風の科学技術計算用高水準言語)を D.F. Hartley が開発した。

1960年代半ばには EDSAC 2 の後継機が計画されたが、結局 Atlas 2 のプロトタイプである Titan が導入された。Atlas 2 はマンチェスター大学フェランティ、Plessy の三者で開発した Atlas コンピュータの後継機である。

復元プロジェクト

2011年1月13日、Computer Conservation Society がEDSACの実動するレプリカをブレッチリー・パークの博物館にて製作すると発表した[10]。2015年の稼働を目指し、その後は定期的に動作させるデモンストレーションを行う予定だという。

プロジェクトを指揮する Andrew Herbert はモーリス・ウィルクスの下で学んだことがある。

参考文献

テンプレート:Refbegin

  • The Preparation of Programs for an Electronic Digital Computer by Professor Sir Maurice Wilkes, David Wheeler and Stanley Gill, Addison–Wesley, Edition 1, 1951.[11]

テンプレート:Refend

脚注

テンプレート:Reflist

関連項目

外部リンク

テンプレート:Sister

  • "delay storage" は使用している遅延記憶装置を指している
  • テンプレート:Cite journal
  • Manchester Mark IプロトタイプであるBabyの方が早い。ただし Baby はウィリアムス管の評価用に製作されており、実用的ではなかった。A brief informal history of the Computer Laboratory を参照。マンチェスター大学では1949年4月から Manchester Mark I が稼働しはじめているが、完成したのは少し後である。
  • テンプレート:Cite journal
  • 指定されたメモリワードと乗算器用レジスタの内容にビット単位のANDを施し、結果をアキュムレータに格納する命令
  • テンプレート:Cite web
  • Professor David Barron, Emeritus Professor of the University of Southampton at a Cambridge Computer Lab seminar to mark the 60th anniversary May 6th 2009.
  • Gene Frequencies in a Cline Determined by Selection and Diffusion, R. A. Fisher, Biometrics, Vol. 6, No. 4 (Dec., 1950), pp. 353-361
  • Caldwell - largest known primes by year One reference gives Miller, J. C. P. "Larger Prime Numbers" (1951) Nature 168(4280):838, ただし こちらには言及がない。
  • テンプレート:Cite web
  • テンプレート:Cite journal