TOPS-20
TOPS-20は、ディジタル・イクイップメント・コーポレーション(DEC)によるPDP-10向けの2番目のオペレーティングシステムである。PDP-10をTOPS-10で使っていたハッカー(少なくともITSやWAITSに移行していなかったユーザー)には大歓迎で迎えられた。TOPS-20の起源は、Bolt, Beranek and Newman社のTENEXオペレーティングシステム(1969年)であり、特製のページング機構を使用していた。このシステムは名前の類似しているTOPS-10とはほとんど全く関係なかったが、PA1050 TOPS-10モニターコール・エミュレーションファシリティが同梱されていて、これを使用するとTOPS-10用実行ファイルを(全部ではないが)ほとんど修正なしで動作させることができた。DEC自身のポリシーとして、DECのソフトウェアが必要とした場合を除いて PA1050 がアップデートされることはなかった。
1960年代、BBNはDARPA主導の多くのLISPベースの人工知能プロジェクトに参加していた。その多くは当時としては大容量のメモリを必要とした。その解決策のひとつとしてLISP言語にページングソフトウェアを追加し、ある時点で必要とされないメモリをディスクに追い出し、必要になったときにメモリに戻すという方式が考えられた。マサチューセッツ工科大学(MIT)の Daniel L. Murphy はBBNに入社する前にPDP-1上でそのようなシステムを開発していた。初期のDECマシンは18ビットワードで、アドレス空間は 262Kワードまで可能だった。それらのマシンのメモリは高価な磁気コアメモリで、その容量は必要量には全く足りなかったのである。つまり、磁気コアメモリ容量は262Kワードよりずっと小さかったので、アドレス指定に使用する18ビットワードには全く使われないビット群があった。ページング機構はそのアドレスの内の使われていないビット群に磁気ドラムメモリ上のブロックのテーブルへのキーを埋め込んで使用した。磁気ドラムメモリはページングの「バッキングストア」として機能し、ソフトウェアは必要なページをフェッチして使用する。
1964年、DECはPDP-6を発表した。DECはMIT人工知能研究所と関係が深く、LISPハッカー達の様々な要望がこのマシンに取り入れられた。BBNもこのマシンをAI研究用に購入することを検討したが、BBNはDECに Murphy のページング機構を直接システムのハードウェアとして組み込むことを要望した。そのようなハードウェアを追加すれば全プログラムが透過的にページングの恩恵を受け、プログラミングがもっと簡単になる。DECは最初は興味を持ったが、1966年にPDP-6系列の開発を止めて18ビットと新たな16ビットの系列に専念することを発表した。PDP-6は高価で複雑であり、そのせいもあってあまり売れなかったのである。
しかし、DECが後にPDP-10と呼ばれるマシンで再度 36ビットの市場に参入することが明らかになるまで長くはかからなかった。BBNはページング機構導入についてのDECとの話し合いを再開し、新しいCPUの名前が KA10 であることを知った。DECはページングにはあまり興味が無かった。話し合いの成果として、メモリ領域を2つに分割し、プログラムをプロテクトされた領域とユーザー領域に分割できるようにした。さらにDECはマシンのコストを可能な限り削減するため、コアメモリ容量を16Kワードとし、レジスタ (コンピュータ)をRAM上に配置することで性能向上を図った。
それにも関わらずBBNは何台かのPDP-10を購入し、ハードウェアによる独自のページング機構を開発することを決めた。同時にどのようなオペレーティングシステムをこの新しいマシンで動作させるかが議論された。TOPS-10上の既存のソフトウェア資産を最小限の努力で引き続き使用可能にするという大前提があった。このため、TOPS-10にページング機能を組み込むことが必要となり、それが最大の問題となった。同時にTOPS-10は開発者が要望しているいくつかの機能をサポートしていなかった。最終的に彼らは全く新しいシステムを開発し、TOPS-10ソフトウェアを実行するためのエミュレーションライブラリをその上に構築することになった。
この新しいシステムはTENEXと呼ばれるようになり、完全な仮想記憶システムを含んでいた。すなわち、すべてのプログラムが同時に262Kワードのアドレス空間にアクセスできるようになっていた。ページング機構によりマッピングが制御され、必要なページがバッキングストアからコピーされた。後に必要となった修正は、ページング機構がRAMとバッキングストアの間のマッピングを何組か保持し、各プログラムがその内の1つずつを使用するようにしたことである。性能を最適化するため、ページング機構はアクセス時刻情報を保持した。結果としてページング機構はかなり複雑化し、大きな19インチラック筐体を1つ使い切ったのである。
TENEXの特筆すべき機能の1つとしてユーザー指向のコマンドラインインタプリタがある。当時の一般的なシステムとは異なり、TENEXは意図的に長いコマンド名を使用し、将来の拡張に備えて「ノイズワード」と呼ばれる部分も持っていた。例えば、UNIXでディレクトリ内のファイルをリスト表示するcodice_1コマンドがあるが、TENEXでは codice_2 というコマンド名になっている。ここで、"DIRECTORY" がコマンド名で、"(OF FILES)" がコマンドを明確化するためのノイズワードである。もちろん、ユーザーは長いコマンド名を入力したがらないので、TENEX は "escape recognition"システムを使用して短いキー入力からコマンド名に拡張するようにした。例えば、ユーザーが codice_3 と入力してエスケープキーを押下すると、TENEXのコマンドラインインタプリタは DIR を完全なコマンド名に置き換えたのである。コマンドラインインタプリタの努力により、同様の機構がファイル名にも働いた。これによって人間が読んで理解できる長いファイル名が使えるようになった。TENEXにはクエスチョンマークを入力することで呼び出されるヘルプ機能もあった。その時点の入力にマッチするコマンド群のリストを表示し、抜け出すとクエスチョンマークも消去される。
TENEXは小さなPDP-10市場でかなり人気を呼び、外部ページング機構の開発はそれ自体が小さなビジネスとなった。1970年代初期、DECはPDP-10の新たなプロセッサ KI10 の開発を開始した。BBNは再度DECに接触し、完全なページング機構のサポートを打診したが、DECはもっと単純なシステムを採用することにした。この計画は失敗だった。当時TENEXはPDP-10上で最も人気のあるオペレーティングシステムであり、新しいマシンではこれが動作しなかったのである。DECsystem-10と呼ばれたTOPS-10搭載システムにはいかなる種類の仮想記憶システムもなかった。
この失敗を糧として、DECのPDP-10担当セールスマネージャはBBNからTENEXの権利を買い取り、新たなマシンにその機能を取り入れるプロジェクトを開始した。同時に Murphy がBBNからDECに移って移植プロジェクトを助けた。主な仕事はBBNのハードウェアによるページング機構をソフトウェアとKI10の単純なハードウェアでエミュレーションすることである。KI10とPDP-6の性能差によってこれが可能となった。また、新たな種類のデバイスをバッキングストアとして使用するため、多くのデバイスドライバを新たに開発しなければならなかった。
この新しいTENEXが出荷されたころ、DECはKI10の低コスト版のKL10の開発を開始した。そのころ、スタンフォード大学のAIプログラマ達(多くはMIT卒業生)がPDP-10の性能をオリジナルのKA10の10倍にするプロジェクトにとりかかっていた。DECはそこを訪れ、彼らのアイデアの多くがKL10プロジェクトにも取り入れられた。同じ年にIBMも仮想記憶を採用した新たなマシンを発表した。仮想記憶が必須となりつつあったのである。KL10は結果として低コストで様々な変更が加えられた。新たなDECSYSTEM-20では、当初からデフォルトのオペレーティングシステムとしてTENEXが動作した。
新しいマシンの拡張は制限され困難を伴った。主なアップグレードは「拡張アドレス指定」の追加である。これは23ビットアドレスをサポートするものである。追加のビットはマイクロプログラム方式で実装されたページング機構によって追加されている。これによって複数のページを同じ物理的実体にマッピングすることを可能にし、同時により大容量のRAMをサポート可能にした。下位互換を保つため、KL10では必要に応じて18ビットアドレスを生成する命令も持っている。
このオペレーティングシステムの社内での最初のコードネームは VIROS(VIRtual memory Operating System)であった。顧客から問い合わせが来るようになったため、DECはコードネームを SNARK に変更し、VIROSなるプロジェクトの存在を否定した。SNARK の名前が知られるようになると、さらに逆さにして KRANS とした。しかし、"krans" がスウェーデン語で「葬儀の花輪」という意味であることが判明したので、即座にその使用をやめた(正確には、単にリースを意味する単語であり、この逸話は怪しい)。
最終的にDECはTOPS-20という名称を選び、その名称でマーケティングが行われた。ハッカー達はその成り立ちを知っていたので、即座にTWENEX(Twenty+TENEX)と名づけた。しかし、その時点でTENEX由来のコードはごく一部であった(AT&TのVersion 7 UnixとBSDの関係に似ている)。DECの人々はTWENEXという名前を聞いて嫌な気分になったと言われているが、その名称は一般化し、短縮形の"20x"もよく使われることになった。
TWENEXは成功を収め、非常に一般化した。実際、1980年代初期、TOPS-20はUNIXなどと共に隆盛期を迎えた。しかしDECはVAXアーキテクチャとVMSに専念することを決定し、DECSYSTEM-20およびTWENEXは早々に消え去っていった。DECはTOPS-20ユーザーをVMSに移行させようとしたが、1980年代末にはかつてのTOPS-20ハッカー達はUNIXへと流れていったのである。
いずれも英文