TENEX

TENEXは1969年にBBNがPDP-10用に開発したオペレーティングシステムで、後にDECのTOPS-20オペレーティングシステムのベースとなった。

BBNは1960年代にDARPA主導の多くのLISPベースの人工知能プロジェクトに参加していた。その多くは当時としては大容量のメモリを必要とした。この問題への対策として、LISP言語に//仮想メモリ機能//を追加//し、ある時点で必要とされないメモリをディスクに追い出して、必要なときにメモリに戻すという方法が考えられた。//マサチューセッツ工科大学のダニエルマーフィーはBBNに入社する前にPDP-1上で既に同様のシステムを開発していた。初期のDECマシンは1ワードが18ビット長で、アドレス空間は256Kワードまで参照可能だった。それらのマシンは高価なコアメモリを採用しており、容量は要求に全く足りていなかった。ページング機構はアドレスの最上位にある未使用ビットを、//バッキングストア//として機能する磁気ドラムメモリ上のブロックのテーブルを示すインデックスに使用した。ソフトウェアは必要に応じてページをフェッチし、RAMの正しい領域を指すようアドレスを処理した。

1964年にDECはPDP-6をリリースした。DECはMITのAIラボと関係が深く、LISPハッカー達の様々な要望がこのマシンに取り入れられた。36ビット機は特にLISPでのプログラミングに役立った。アドレス空間は18ビットで、1ワードに2本のアドレスを含むことができ、当時主流のLISPであるCARとCDRの動作に完全に対応していた。BBNもこのマシンをAI研究用に購入することを検討し、マーフィーのページング機構を直接ハードウェアで実装することをDECに要望した。このハードウェアの追加により全てのプログラムが自動的にページングの恩恵を受けられるようになり、プログラミングがより簡単になるはずだった。DECは最初は興味を示したが、1966年にPDP-6系列の開発を止めて18ビット機や新たな16ビット機の系列に専念すると発表した。PDP-6は高価で複雑だったことから販売に失敗していた。

しかしDECはすぐに、後にPDP-10となるマシンで36ビット機市場に再参入することを明らかにした。BBNは新機種にページングサブシステムを実装するべくDECとの話し合いを始め、新CPUの名前がKA-10であることを知った。DECはページングにはあまり興味を示さなかった。しかしながら、ユーザーアドレス空間の半分を物理メモリの別の領域に割り当てることができるバーチャルメモリーセグメントをサポートする方向に話が発展した。またDECはコストをできるだけ削減するため、コアメモリの最小構成を16Kワードとし、パフォーマンスに著しい悪影響をもたらすが、レジスタをコアメモリではなく高速な半導体に置く方法を断念した。

1. BBNとPDP-10
-------------

全ての要望は通らなかったが、BBNは数台のPDP-10を購入し、ハードウェアによるページング機構を独自に開発することを決めた。同時に新機種で走らせるオペレーティングシステムについての議論も始まった。TOPS-10で動作する既存のソフトウェア資産を最小限の手間で継続利用できるようにするという強い要求があった。そのためOSを新規に開発するのではなく、TOPSにページング機構を組み込むという手法を取らなければならなくなり、これが最大の障害となった。またTOPSは開発者が望んでいた機能の多くをサポートしていなかった。結局OSを一から書き直し、TOPS-10のソフトウェアを最小限の手間で実行できるエミュレーションライブラリをその上に実装することになった。

ダニエル・マーフィーとダニエル・ボブローを擁する開発者チームは新システムの名称としてTENEXを選択。完全な仮想メモリ機能を搭載しており、プログラムは仮想アドレス空間内で18ビットをフルに使った262144ワードにアクセスできるだけでなく、プログラム毎に別のアドレス空間が割り当てられて同時に利用できた。ページング機構がマッピングを制御し、必要なページをバッキングストアからコピーした。RAMとバッキングストアのマップを複数保持できるようにし、プログラム毎に1つずつ割り当てる改良が後にページング機構に加えられ、これが唯一の更新となった。ページング機構は最適化のためにアクセス時刻を保持していた。この結果ページング機構はかなり複雑なものとなり、フルサイズの19インチラック筐体1台を使い切った。

TENEXの特筆すべき機能の1つとしてユーザーフレンドリーなコマンドラインインタープリタがある。当時の一般的なシステムとは異なり、TENEXはあえて長いコマンド名を採用し、将来の拡張に備えた「ノイズワード」と呼ばれる部分を持っていた。例えばディレクトリ内のファイルをリスト表示するUNIXのlsコマンドは、TENEXではDIRECTORY というコマンド名になっている。DIRECTORYはコマンド名で、はコマンドの機能を明確にするためのノイズである。当然ユーザーはこれらの長いコマンドを好まないため、ユーザーが入力したコマンド名の一部を完全なコマンド名に置き換えることができるコマンド補完システムを備えていた。例えば、ユーザーがDIRと入力してエスケープキーを押すと、TENEXのコマンドラインインタプリタはDIRを完全なコマンドに置き換えた。インタープリタ側の工夫によりこの補完機能はファイル名にも使用できた。これにより人にも読みやすくて分かりやすい長いファイル名を使用できた。TENEXにはクエスチョンマークを入力することで呼び出せるヘルプ機能も搭載していた。その時点で入力済みのコマンド列から推測して、最も可能性が高い入力候補の一覧を表示し、元のコマンド列の?記号を候補と置き換えることができた。このコマンドライン補完とヘルプは、tcshのような現在のCLIでもそのまま使える。

2. TENEXからTOPS-20へ
------------------

TENEXは小さなPDP-10市場でかなりの人気を呼び、外部ページング機構の開発はそれ自体が1つのビジネスとなった。1970年代初期にDECはPDP-10のプロセッサを新しいKI10にアップグレードする作業を開始した。BBNは再びDECに問い合わせ、間接ページテーブルに対応した完全なページング機構のサポートを求めたが、DECはよりシンプルな単一レベルのページング機構を採用した。この妥協はシステムの販売に悪影響を与えた。TENEXはPDP-10で動作するサードパーティー製のOSとして当時最も人気があったが、新しくて高速なKI-10では動作しなかった。

この問題に対処するため、DECのPDP-10担当セールスマネージャはBBNからTENEXの権利を買い取り、新機種に移植するプロジェクトを立ち上げた。マーフィーはBBNからDECに転職して移植プロジェクトを支援した。主な作業はBBNのハードウェアによるページング機構をソフトウェアとKI10の単純なハードウェアでエミュレーションすることだった。PDP-6とKI-10の性能差がこれを可能にした。また移植の際には新しいバッキングストアデバイスをサポートするためにたくさんのデバイスドライバを新たに開発しなければならなかった。

新TENEXがリリースされるとDECはKI-10の低コスト版であるKL-10の開発を開始した。その頃スタンフォード大学のAIプログラマー達は元のKA-10を10倍高速にしたPDP-10を独自に開発していた。このプロジェクトはFoonlyに進化した。DECもこのプロジェクトを訪問し、彼らのアイデアの多くがKL10プロジェクトにも取り入れられた。同じ年にIBMも仮想メモリを採用した新たなマシンを発表し、仮想メモリのサポートは必須条件となりつつあった。最終的にKLはシステムにいくつかの大きな変更を統合することになり、コスト削減は全く実現しなかった。新しいDECSYSTEM-20はオペレーティングシステムとしてTENEXを最初から標準搭載した。

KL-10プロセッサに追加された新機能は少なかった。モデルBというハードで動作する際に仮想メモリのアドレス空間を拡張できる、ページャーのマイクロコードに対する修正が最も大きな変更だった。アドレス長は30ビットで、物理メモリの18ビットを超えるアドレスを指定できたが、仮想メモリ空間は23ビットまでしかサポートされなかった。下位互換性を保つため、オリジナルの18ビットの空間を利用するプログラムはコードを変更することなく利用できた。

オペレーティングシステムの社内でのコード名は当初VIROS だった。顧客から問い合わせが来るようになり、VIROSというプロジェクトの存在を完全否定するため、DECはコードネームを SNARK に変更した。SNARKという名前が知れ渡ると今度は名前を逆さにしてKRANSにした。しかしクランはスウェーデン語で「葬式の花輪」を意味するということが指摘され、この名称はすぐに撤回された