「割込み」の名付け親

前回、割込みの起源について触れたけど、もう少し深掘りしてみたいと思ったら、たまたま読んでいた高橋秀俊氏の伝記にPC-2の割込みの話が出てきたので、紹介しようと思う。

同氏は計算機屋からは計算機のパイオニアの一人だが、「物理の散歩道」シリーズで知られるロゲルギストの一人として記憶している人も多いだろう。計算機関係の業績としては、やはりパラメトロン計算機である。後藤英一氏の発明したパラメトロン素子を利用し、計算機PC-1、PC-2を開発した。当時の計算機屋ならば全員が読み、感銘を受けたというウィルクスの「The Preparation of Programs for an Electronic Digital Computer」を参考に、これらの計算機の命令セットはEDSACをベースに設計された。PC-1上で高橋氏が一番最初に書いたプログラムというのが「世界一周」で、先日、和田英一氏がブログにも書いておられた。これは自己書き換えを利用して、自分自身を後ろのメモリにコピーして、そこに制御を移し、動き続けるというプログラムで、メモリテストにもなったという。当然、メモリ保護機能がある、近代的な計算機、OS上でこのような行儀の悪いプログラムは動かない。しかし、自己書き換えはイニシャルオーダにも使われ、当時の計算機では欠かせないテクニックだった。

さて、このイニシャルオーダとは何だろうか。これは紙テープからプログラムを読み込み、機械語に変換し、メモリにロード、実行するプログラムで、今で言うアセンブラとローダを兼ねたものだ。OSなどに繋がる原始的なシステムソフトウェアと言える。PC-1の最初のイニシャルオーダは高橋氏が書いたが、すぐに和田氏が書いたR0に置き換えられた。R0は公開されている。私は学生時代にEDSACのイニシャルオーダを読んで感動したものだが、R0の方も読んでみたい。高橋氏曰く「芸術品」だそうだ。

EDSACやPC-1の頃の入出力と言えば紙テープやプリンタである。当時のCPUは今より圧倒的に遅かったとは言え、相対的に入出力機器が遅い状況は変わらない。入出力機器が動いている間、CPUが止まってしまうのは効率が悪い。割込み機能が欲しいというのは、このころからニーズとしてあった。EDSACにもそのような機能があったようだし、PC-2(予備テストとしてPC-1にも)にも実装された。ただし、ハードウェアとしての機能はあっても、その機能を利用したソフトウェアは結局作られなかったようだ。そもそもメモリが少なすぎて、割込みを活かすことは難しかったようだ。結局、割込みが活きてくるのはOS(モニタ)の登場を待つことになる。というか、割込みがないとOSは作れない。今の計算機の割込みに近い形になったのはIBM Stretchあたりだろうか。「人月の神話」で知られるブルックスJrが1957年に「A Program-Controlled Program Interruption System」という論文を書いている。

さて、この割込みはもちろんInterruptの訳語として使われているが、もとはと言えば、高橋氏がInterruptとは独立して考え、名付けたのだそうな。いや〜、知らなかった。

割込みの歴史に関しては、Mark Smothermanの文書History of Interruptsが参考になる。

(追記:2012-02-13)和田氏が1996年のプロシン用に書かれたPC-1の原稿に割込みに関する記述が書かれていたので、引用する。そうそう、例外を「割出し」と呼ぶこともあったんだよな。これも東大高橋研命名だろうか。結局、定着しなかったが。


PC-1が完成してほぼ 1 年使い, ライブラリも増えてきたころ, 高橋先生が走行中のプログラムに外から制御が出来ないのは面白くない, といい出された. 先述のフリップフロップは手動でもセットできたが, 入出力機器その他で制御できれば便利だということであった. そこで早速割り込み回路を設計した. 当面テレタイプが受信OKになると, 割り込みが発生し, さらなる割り込みをフリップフロップで禁止し, 次に実行するはずの命令の番地を510 番地へ格納し, 511 番地へ実行を移す. 511 番地には割り込み処理ルーチンへのジャンプ命令がおいてある, というものであった. さっそくサイクリックバッファを共用するかたちで, 主ルーチンと割り込み処理ルーチンの強調プログラムを書き, マルチプログラミングの世界初とも思われる実験を行なった.

割り込みが出来ればトラップ (割だしとも呼んだ) へ考えは及び, メモリープロテクションのアイディアもでたが, これはアイディアだけで, PC-1 への組み込みは行なわなかった.


引用元:「割込み」の名付け親 - Plan9日記