TENEX

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

BBNは1960年代にDARPA主導の多くのLISPベースの人工知能プロジェクトに参加していた。その多くは当時としては大容量のメモリを必要とした。この問題への対策として、LISP言語に仮想メモリ機能を追加し、ある時点で必要とされないメモリをディスクに追い出して、必要なときにメモリに戻すという方法が考えられた。マサチューセッツ工科大学(MIT)のダニエルマーフィーは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ワードとし、パフォーマンスに著しい悪影響をもたらすが、レジスタをコアメモリではなく高速な半導体に置く方法を断念した。

BBNとPDP-10 

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

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

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

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

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

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

最終的にDECはTOPS-20という名称でこれを販売した。経緯を知っていたハッカーらはすぐにTWENEX(Twenty+TENEX)と呼び始めた。しかしTENEX由来のコードはごく一部しか残っていなかった（AT&TのVersion 7 Unixと、BSDとの関係と同様）。DECの人々はTWENEXという名前を聞いて嫌な気分になったと言われてたが、その名称は一般化し、短縮形の20xもよく使われた。

TWENEXは成功を納めて広く普及した。実際、1980年代初期、TOPS-20はUNIXやITSなどと共に隆盛期を迎えた。しかしDECはVAXアーキテクチャやVMS OSと自社競合する製品を全て破棄することを決定し、DEC-20は放棄され、TWENEXの人気は長く続かなかった。DECはTOPS-20のユーザーにVMSを使用するよう推奨したが、1980年代後半にはTOPS-20ユーザーのハッカーたちのほとんどがUNIXへ移行してしまった。TOPS-20の熱狂的なマニアたちはTOPS-20のメンテナンスや拡張に努め、マークスクリスピンの活躍や、Panda TOPS-20などのディストリビューションが有名だった。

関連項目 
 タイムシェアリングシステムの進化

引用 
 この記事には、現在はパブリックドメインとなっているJargon Fileの記事TWENEXの内容が一部含まれている。

参考文献 
 ダニエルG.ボブロー、ジェリーD.バーチフィール、ダニエルL.マーフィー、レイモンドS.トムリンソン、「 TENEX、ページングされたPDP-10のタイムシェアリングシステム 」、Communications of the ACM、15号、1972年3月135-143ページ。

1969年のソフトウェア