互換タイムシェアリングシステム(Compatible Time-Sharing System, CTSS)は、1960年代初頭にマサチューセッツ工科大学(MIT)で開発された、世界初の本格的なタイムシェアリングオペレーティングシステムの一つである。IBM 7090/7094メインフレーム上で動作し、複数のユーザーが端末を介して同時にコンピュータリソースを共有することを可能にした。CTSSは現代のオペレーティングシステムにおけるマルチタスク、仮想記憶、ファイル管理などの基本概念を確立し、後のMulticsやUNIXに直接的な影響を与えた。
1 歴史的背景
CTSSは、1950年代末から1960年代初頭にかけてのコンピュータ利用の急速な拡大と、バッチ処理方式への不満を背景に生まれた。当時のメインフレームはプログラムを逐次実行するバッチ処理が主流であり、利用者は結果を得るまでに長時間待たされることが常であった。MITの研究者たちは、より効率的で対話的なコンピュータ利用を実現するためにタイムシェアリングの概念を追求した。
1.1 開発の動機
開発の主な動機は、複数の研究者が同時にコンピュータを対話的に使用できる環境を提供することであった。特にMITの人工知能プロジェクトや計算言語学研究グループからの強い要望があった。また、当時利用可能だったIBM 7090/7094の高性能を最大限に活用し、人間と機械の間の応答性を飛躍的に向上させることが目標とされた。経済的な観点からも、高価なコンピュータを複数ユーザーで共有することは資源の有効活用として合理的であった。
1.2 主要な開発者(フェルナンド・J・コルバートら)
CTSSの中心的設計者はフェルナンド・J・コルバート(Fernando J. Corbató)であり、彼はマービン・ミンキー(Marvin Minsky)やジョン・マッカーシー(John McCarthy)らの支援を受けながら開発を主導した。コルバートはタイムシェアリングの基本的な概念を体系化し、プロセス管理や割り込み処理の設計に貢献した。主要な開発チームには、ボブ・ウィンストン(Bob Winston)、ロバート・M・グレアム(Robert M. Graham)などが含まれ、彼らはそれぞれファイルシステムやスケジューリングアルゴリズムの実装を担当した。
1.3 タイムライン(1961年~1963年)
1961年、MITのコンピューティングセンターでCTSSのプロトタイプがIBM 709上で稼働を開始した。1962年には、コルバートらによる最初の主要論文"C Compatible Time-Sharing System: A Programmer's Guide"が発表され、システムの基本設計が公開された。1963年までに、IBM 7094にアップグレードされたシステムは、同時に30以上の端末をサポートする実用的なタイムシェアリング環境として稼働した。この期間中に、アクセス制御やファイル保護などの機能が段階的に追加された。
2 アーキテクチャと設計
CTSSのアーキテクチャは、限られたハードウェア資源の中で効率的なタイムシェアリングを実現するために設計された。システムはモノリシックカーネル構造を持ち、すべての制御プログラムが特権モードで動作した。
2.1 ハードウェア基盤(IBM 7090/7094)
IBM 7090およびその後継機種7094は、当時最高速の科学技術計算用メインフレームであった。これらのマシンは36ビットワードのアーキテクチャを持ち、主記憶容量は最大32Kワード(約144KB)であった。CTSSはこの比較的少ないメモリ空間を効率的に利用するために、動的再配置機構と外部記憶装置としての磁気ドラム(IBM 7320)や磁気ディスクパックを活用した。また、入出力チャネル(データチャネル)を用いた独立したI/O処理が可能であり、これがタイムシェアリングの実現に重要な役割を果たした。
2.2 タイムシェアリングの仕組み
CTSSのタイムシェアリングは、CPU時間を短い時間間隔に分割し、それを実行待ちの複数のジョブに順次割り当てることで実現された。各ユーザーは自分のプログラムが直接CPUを占有しているように感じるが、実際にはシステムが高速に切り替えを行っている。
2.2.1 タイムスライスとスケジューリング
CTSSでは、各ユーザーに0.1秒から0.2秒程度のタイムスライスが割り当てられた。スケジューリングは優先度付きラウンドロビン方式に基づき、短いジョブや対話的な応答を必要とするコマンドには高い優先度が与えられ、長時間の計算処理は低い優先度でバックグラウンドで実行された。スケジューラはタイムスライスを使い切ったジョブを待ち行列の末尾に戻し、次のジョブのコンテキストを切り替えた。
2.2.2 割り込み処理
タイムスライスの終了は、IBM 7090/7094の内部タイマー割り込みによって通知された。割り込みが発生すると、CTSSのスーパーバイザは現在実行中のジョブの状態(レジスタ、プログラムカウンタなど)をそのジョブ専用の記憶領域に保存し、次に実行すべきジョブの状態を復元した。割り込み処理は極めて高速に行われ、オーバーヘッドを最小限に抑えるためにアセンブリ言語で記述された。
2.2.3 入出力管理(チャネルプログラム)
CTSSでは、入出力操作は専用のチャネルプログラムによって管理された。IBM 7090/7094のデータチャネルは、CPUから独立して動作し、磁気テープやディスクとのデータ転送を実行した。CTSSは各ジョブのI/O要求をキューイングし、チャネルプログラムを動的に生成して効率的な転送を行った。これにより、ジョブがI/O待ちの間にCPUが別のジョブの処理に移行することが可能となった。
2.3 メモリ管理
CTSSのメモリ管理は、限られた主記憶を複数のユーザープロセスで共有するために重要な役割を果たした。システムは各ジョブに連続したメモリ領域を割り当て、実行中はその領域外へのアクセスを禁止することで保護を実現した。
2.3.1 動的再配置
CTSSは、バウンダリレジスタとリロケーションレジスタを使用した動的再配置を実装した。各ジョブには論理アドレス空間が割り当てられ、実行時に物理アドレスへと変換された。これにより、ジョブを主記憶内の任意の空き領域に配置することが可能となり、メモリ利用の効率が向上した。また、ジョブのスワップイン/アウトも容易になった。
2.3.2 仮想記憶の先駆け
CTSSは厳密な意味での仮想記憶(ページングによるアドレス変換)は実装していなかったが、磁気ドラム上にジョブのイメージを保存し、必要なときに主記憶にロードするスワッピング機構は、後の仮想記憶の概念に直接つながるものであった。このアプローチは、物理メモリよりも大きなプログラムを実行するための手動オーバーレイに代わる実用的な手法として高く評価された。
2.4 ファイルシステム
CTSSのファイルシステムは、階層的なディレクトリ構造とファイル保護機能を備え、現代のオペレーティングシステムの基礎を築いた。ファイルは磁気ディスクや磁気ドラム上に保存され、ユーザーは一貫した名前空間を通じてアクセスできた。
2.4.1 階層ディレクトリ
CTSSは、ユーザーごとのプライベートディレクトリと、全ユーザーが共有するシステムディレクトリからなる階層構造を採用した。ディレクトリはツリー状に編成され、各ユーザーは自分のホームディレクトリの下にサブディレクトリを作成できた。パス名はスラッシュ(/)で区切られる方式が使われ、これが後のUNIXのファイルシステムに直接的な影響を与えた。
2.4.2 ファイル保護とアクセス制御
CTSSは、ファイルごとに読み取り、書き込み、実行の各権限を設定できるアクセス制御リスト(ACL)を実装した。各ファイルには所有者とグループが設定され、所有者は他のユーザーのアクセス権限を個別に指定できた。これにより、共有システム上でのデータの機密性と完全性が確保された。また、パスワードによるログイン認証も導入され、ユーザーアカウントの管理が行われた。
3 利用体験とインターフェース
CTSSは、それまでのバッチ処理とは全く異なる対話的なコンピューティング体験を提供した。ユーザーはテレタイプ端末(IBM 2741やモデル33 ASR)を通じてシステムに接続し、コマンドを逐次入力しながら結果を即座に確認できた。
3.1 コマンド言語(RUNOFF、TECOなど)
CTSS上で開発された代表的なコマンドおよびアプリケーションには、文書整形ツールRUNOFF(後のtroffの前身)と、テキストエディタTECO(Text Editor and COrrector)がある。RUNOFFは単純なマークアップ命令に基づいて文書を整形し、マニュアルや論文の作成に広く使われた。TECOは非対話型のテキスト処理言語であり、パターンマッチングや置換などの強力な機能を備え、後のEmacsエディタの基盤となった。
3.2 マルチユーザー環境
システムは同時に最大約30人のユーザーをサポートした。各ユーザーは自分の端末からログインし、独自のプロセス空間の中でプログラムを実行した。ユーザー間の通信も可能であり、他のユーザーにメッセージを送ったり、ファイルを共有したりすることができた。また、システム管理者(オペレータ)はコンソールからシステム全体の状態を監視し、負荷が偏った場合にはジョブの優先度を調整した。
3.3 対話型コンピューティングの普及
CTSSは、MITキャンパス内および関連研究機関において対話型コンピューティングの普及に大きく貢献した。研究者はプログラムの開発やデバッグを迅速に行えるようになり、バッチ処理では数時間かかっていた作業が数分で完了するようになった。この経験は、後の対話型システムの設計思想に強い影響を与えた。
4 影響と遺産
CTSSは、タイムシェアリングの実用化を証明した歴史的なシステムであり、その設計思想と要素技術は後続のオペレーティングシステムに多大な影響を残した。
4.1 Multicsプロジェクトへの橋渡し
CTSSの成功を受けて、MITは1963年にGE(ゼネラル・エレクトリック)およびベル研究所と共同でMultics(Multiplexed Information and Computing Service)プロジェクトを開始した。Multicsは、CTSSで培われたタイムシェアリング技術をさらに発展させ、階層型ファイルシステム、リングプロテクション、仮想記憶などの高度な機能を導入した。CTSSのコア開発チームはMulticsの設計にも深く関与し、特にコルバートはMulticsの主任設計者となった。
4.2 UNIXへの影響
Multicsプロジェクトから撤退したベル研究所のケン・トンプソンとデニス・リッチーは、Multicsの経験を元にUNIXを開発した。UNIXはCTSSとMulticsの多くの概念(階層的ファイルシステム、シェル、プロセス管理など)を継承しつつ、より簡潔で移植性の高い設計を採用した。CTSSで使われたRUNOFFはUNIXのtroffに、TECOはviやEmacsに影響を与えた。また、CTSSのコマンドインタプリタは、UNIXのシェルの先駆けである。
4.3 技術史における評価
CTSSは、タイムシェアリングオペレーティングシステムの実用化に成功した最初のシステムとして、コンピュータ史上極めて重要な位置を占める。1960年代当時、CTSSは世界中の研究機関で導入され、数多くの実験や研究に利用された。後年、コルバートはこの功績により1990年にACMチューリング賞を受賞した。また、CTSSのソースコードとドキュメントは保存され、コンピュータ史の資料として現在も公開されている。
5 関連システムと比較
CTSSと同じ時代または直後に開発された他のタイムシェアリングシステムとの比較は、CTSSの革新性と限界を理解する上で有益である。
5.1 同時期のシステム(SDS 940, PDP-1など)
同時期に開発された代表的なタイムシェアリングシステムとして、System Development Corporation (SDC) の Time-Sharing System (TSS)、ダートマス大学のダートマスタイムシェアリングシステム(DTSS、1964年)、スタンフォード研究所の SDS 940 タイムシェアリングシステム(1966年)、MIT自身の PDP-1 上で稼働したタイムシェアリングシステム(ITSの前身)などがある。これらのシステムはそれぞれ異なるアプローチをとったが、CTSSは最も初期の実用システムとして、設計の雛形を提供した。SDS 940はハードウェア支援による保護機能を強化し、PDP-1のシステムはより小さな機種でのタイムシェアリングを実現した。
5.2 後継システムとの差異
後継システムであるMulticsやUNIXとの主な差異は、以下の点に集約される。CTSSはモノリシックカーネルであり、システムプログラムはすべてカーネル空間で動作したが、Multicsはリングプロテクションによりユーザー空間とカーネル空間を厳密に分離した。また、CTSSはページングではなくスワッピングによるメモリ管理を行っており、仮想記憶の完全な実装には至らなかった。さらに、ファイルシステムの機能は限定的であり、シンボリックリンクやマウントポイントなどの概念は後続で導入された。UNIXはこれらの複雑さを排除し、シンプルで移植性の高い設計を採用した点で大きく異なる。
6 参考文献と資料
CTSSに関する一次資料および二次文献は、コンピュータ史の研究において重要な拠り所となっている。
6.1 主要論文(Corbató et al., 1962)
CTSSの設計と実装を詳述した最も重要な論文は、F. J. Corbató、M. M. Daggett、R. C. Daleyらによる"An Experimental Time-Sharing System"(1962年、AFIPS Conference Proceedings)である。この論文では、タイムスライス、割り込み処理、ファイルシステムの基本設計が解説されており、その後数十年にわたり多くのシステム設計者に参照された。また、ユーザーマニュアル"C Compatible Time-Sharing System: A Programmer's Guide"も貴重な一次資料である。
6.2 アーカイブと復元プロジェクト
CTSSのソースコードとドキュメントは、MITのコンピュータ科学・人工知能研究所(CSAIL)によってアーカイブ化されている。また、歴史的システムの復元プロジェクトとして、MITのPaul McJones氏らがCTSSのソースコードを現代のエミュレータ上で動作させる努力を行っている。2000年代以降、IBM 7090エミュレータ(SIMHなど)を使用してCTSSを再現する試みが複数行われ、オリジナルのアプリケーションやゲームを当時の環境で実行できるようになった。これらの復元プロジェクトは、CTSSの技術を後世に伝える教育的価値が高い。