THEマルチプログラミングシステム

THEマルチプログラミングシステム（THE multiprogramming system）は、エドガー・ダイクストラらが開発した初期のマルチタスクオペレーティングシステム (OS)。1965年から66年に論文に記され (original; transcription)、1968年に発表された。ダイクストラはこのシステムを命名したことはない。"THE" とは "Technische Hogeschool Eindhoven" の略で、オランダ語でアイントホーフェン工科大学を意味する。THEシステムは基本的にマルチタスクをサポートしたバッチ処理システムである。マルチユーザーOSとしては設計されていない。同時期の Project GENIE で開発された SDS 940 に似ているが、THEシステムでのプロセス群は静的だった。

THEシステムは初のソフトウェアベースのメモリセグメンテーションを導入し（Electrologica X8 はハードウェアでのメモリ管理をサポートしていなかった）、プログラマは磁気ドラムメモリ上の物理的位置を気にする必要がなくなった。そのために修正を加えたALGOLコンパイラ（ダイクストラのシステムでサポートされた唯一のプログラミング言語）を使い、システムルーチン呼び出しを自動生成し、必要な情報が必要なときにスワップインされることを保証している。

 設計 
THEマルチプログラミングシステムの設計は階層構造となっている点が重要で、上位層は下位層にのみ依存している。

Layer 0
マルチプログラミングを実現する階層。CPUを割り当てるプロセスを決定し、セマフォ上でブロックしているプロセス群の責任を持つ。割り込みを処理し、必要に応じてコンテキストスイッチを行う。最も低いレベル。現代的に言えばスケジューラである。
Layer 1
プロセスへのメモリ割り当て機構。現代的に言えばページャである。
Layer 2
プロセス間通信機能。オペレーティングシステムとコンソールとの通信機能。
Layer 3
全周辺機器の入出力管理。各種機器からの情報をバッファリングする機能も含まれる。
Layer 4
ユーザープログラムを処理する階層。そこに5つのプロセスが存在し、ユーザープログラムのコンパイル・実行・プリントアウトを行う。完了すると制御はスケジュールキューに戻され、開始されたばかりのプロセスや入出力でブロックされているプロセスを優先する。
Layer 5
ユーザー層（ダイクストラは「我々は実装していない」と述べている）

上位層が下位層にのみ依存するという制約を課したのは、（準形式手法的に）システムの挙動を推測しやすくし、システムを段階的に構築できるようにするためである。システムは Layer 0 から順に実装され、それぞれの層が提供する抽象化を順に試験していった。この形式手法的設計プロセスは大いに成功し、ダイクストラは次のように述べている。

我々は、論理的健全性が演繹的に証明できる方法で洗練されたマルチプログラミングシステムを設計可能であり、その実装が徹底的な評価に耐えることを見出した。評価中に見られた誤りは瑣末なコーディング上の誤りだけであり（500命令に1回の割合で発生した）、10分程度のマシンでの調査で個々の問題を検出でき、その対処も容易であった。

このようにカーネルを階層化するという方式はMulticsのリングプロテクションモデルに似ている。その後のOSは何らかの階層化を導入していることが多く、例えば Windows NT や macOS がそうだが、階層の数はTHEシステムより少ない。

動作プラットフォームはオランダの Electrologica X8 コンピュータで、システム自体はアセンブリ言語で書かれている。このコンピュータは32キロワードの磁気コアメモリ（1ワードは27ビット）、LRU方式のバッキングストアを備えた512Kワードの磁気ドラムメモリ、紙テープリーダー・パンチャー、プリンターを備えていた。

 脚注 

 参考文献 
 E. W. Dijkstra . EWD 126: 'The Multiprogramming System for the EL X8 THE (manuscript). 1965年6月14日 テキスト  PDF 

 関連項目 
 リングプロテクション

Category:オペレーティングシステム
Category:エドガー・ダイクストラ
Category:1968年のソフトウェア