RT-11

**RT-11** は、ディジタル・イクイップメント・コーポレーション (DEC) が16ビットコンピュータPDP-11ファミリ向けに開発した、小型のシングルユーザー。リアルタイムオペレーティングシステム。"RT" は *Real Time* の意。1970年に登場し、PDP-11の全機種に渡りリアルタイムシステム、プロセス制御、などに幅広く使われていた。

## 機能と特徴
### マルチタスク
RT-11はプリエンプティブ・マルチタスクをサポートしていないが、多くのバージョンで複数のアプリケーションを同時並行的に動作可能である。全バリエーションで「バックグラウンドジョブ」の機能を提供している。FB、XM、ZM のバリエーションでは「フォアグラウンドジョブ」も提供し、SYSGENによるシステム生成で選択すれば6個の「システムジョブ」も動作可能となる。それらのタスクは固定の優先度を持ち、「バックグラウンドジョブ」の優先度が最も低く、「フォアグラウンドジョブ」の優先度が最も高い。コンソールのユーザインタフェースからジョブ間の切り替えが可能である。また、SYSGENで単一の「バックグラウンドジョブ」のみを扱うようシステム生成することもできる（バリエーションとしては、SB、XB、ZB）。

### ソースコード
アセンブリ言語で書かれている。MACRO-11アセンブラの条件付アセンブリ機能とマクロプログラミング機能を多用することで、構成変更の自由度が向上しており、通常の機械語にはない高度な命令も使用可能になっている。OSとデバイスドライバのコメントを除去したソースコードもOS配布物に含まれており、"SYSGEN" というプログラムでOSやドライバをユーザーが設定した構成でビルド（システム生成）できる。開発者向け文書には、コメント付きのカーネルリストが含まれていた。

### デバイスドライバ
初期のバージョンでは、システム生成時にカーネルにデバイスドライバを組み込む方式だったが、後にデバイスドライバを別個にロード可能になった。RT-11はデバイス制御やデータ取得に使われることが多いため、デバイスドライバを書いたり改造したりといったことがよく行われていた。DECはサードパーティによるドライバ開発を支援するため、ハードウェア仕様やOS内部についても文書を公開していた。また、ユーザーグループである DECUSによる開発も支援していた。

### ユーザインタフェース
RT-11では、ユーザーは一般にテレタイプ端末かビデオ端末からシステムを操作し、端末とシステムの接続には当初はやRS-232インタフェースを使っていた（後にRS-422も加わった）。また、VT11とVS60というグラフィック表示装置もサポートしている。サードパーティ製では、 ファミリがよく使われた。

KMON (Keyboard Monitor) がユーザーの入力を受け付け、CSI (Command String Interpreter) 形式の各種ユーティリティをコマンドとして実行する。RT-11 のコマンド言語にはコマンド名やデバイス名に様々な特徴があり、後の時代において（CP/M経由で）MS-DOSがその影響を受けている。CSI形式では、コマンド名に続いて入力および出力のファイル名とオプション（RT-11では「スイッチ」と呼んだ）が続き、それらの順序や構文は明確に決まっていた。コマンド行のスイッチは、Unix系OSのように "-" で区切るのではなく、"/"（スラッシュ記号）で区切る。全てのコマンドには短縮名がある。例えば、RENAMEというコマンドは "REN" という名前でも起動できる。

コマンド列に初歩的な制御構造も加えたバッチファイルを処理するバッチプロセッサがある。バッチファイルの拡張子は ".BAT" である。後のリリースでは、".COM" の拡張子が付いたコマンドファイルというものも利用可能になったが、これは単純に書かれたコマンド列を順に実行するだけで制御構造はない。さらに後には、IND (Indirect Command File Processor) によって豊富な制御構造が可能となった。この場合は ".CMD" という拡張子を持つコントロールファイルを入力とする。

".SAV" という拡張子のあるファイルは、一種の実行ファイルである。これはRT-11のSAVEコマンドがメモリの内容をディスク上のファイルにセーブしたもので、後でロードすれば実行を再開できる。

SAVEコマンドのほかに、KMONに実装された基本コマンドとして GET、START、REENTER、EXAMINE、DEPOSIT などがある。一部のコマンドやユーティリティは後の時代において（CP/M経由で）MS-DOSがその影響を受けている。例えば、DIR、COPY、RENAME、ASSIGN、CLS、DELETE、TYPE、HELP などである。FORMATコマンドはディスクの物理フォーマットを行うが、ファイルシステムを生成することはできない。その場合はINITコマンドを使う（DOSの "FORMAT /Q" に似ている）。ほとんどのコマンドがファイル名でのワイルドカード使用をサポートしていた。

物理デバイス名は、'dd{n}:' という形式で指定する。'dd' は2文字のデバイス名で、'n' はユニット番号 (0-7) である。ユニット番号を省略するとユニット0とみなされる。例えば、TT: はコンソール端末、LP:（または LP0:）はパラレル・ラインプリンター、DX0:、DY1:、DL4: はディスクボリューム（順に RX01のユニット0、RX02のユニット1、RL01またはRL02のユニット4）を示す。論理デバイス名は1文字から3文字の英数字で、物理デバイス名の代わりに使うことができる。物理デバイスと論理デバイス名を結びつける ASSIGN コマンドがある。例えば、`ASSIGN DL0 ABC` とすれば、'DL0' の代わりに 'ABC:' でそのディスクボリュームを参照できるようになる。予約済みの論理名として 'DK:' があり、現在のデフォルトのデバイスを参照する。ファイルを指定する際にデバイスが指定されない場合、'DK:' にあるファイルとみなして処理する。予約済みの論理名 'SY:' はシステムデバイス（ブートデバイス）を参照する。

後のバージョンでは、特定デバイスのユニットを最大64個まで指定できるようになった（八進数で 0-77）。しかし、デバイス名の3文字の英数字という制限はそのままだった。そこでSYSGENでの選択で、DUおよびLDデバイスハンドラにのみこの拡張が適用可能とされた。その場合デバイス名の形式は 'dnn:' となり、'd' の部分はDUなら 'D'、LDなら 'L' とし、'nn' が 00 から 77（八進数）となっていた。

### ソフトウェア
RT-11には次のような様々なユーティリティが付属していた。
* ディスクボリューム管理 - *DIR*、*DUP*、*[[Peripheral Interchange Program|PIP]]*、*FORMAT*
* ファイル作成・編集 - *[[Text Editor and Corrector|TECO]]*、*EDIT*、*KED*（VT100用）、*K52*（VT52用）
* 実行ファイル作成 - *MACRO*、*LINK*、*LIBR*
* デバッグ - *[[:en:On-line Debugging Tool|ODT]]*、*VDT*、*SD*

他に Multics の文書作成プログラム runoff を移植したものもあった。また、モデムを介して他のコンピュータシステムと接続する VTCOM もある。

システム全体としてパーソナルコンピュータで行うようなタスクが十分実行可能だった。ユーザーグループ DECUS がRT-11用ソフトウェアを多数開発しており、C言語などもDECUSが実装している。アセンブリ言語での開発・デバッグツールはOSの一部として提供されていたが、C、FORTRAN、Pascal、いくつかのBASICといった言語処理系は別製品だった。サードパーティも各種言語処理系を提供していた。RT-11をDECnetを使ってネットワーク接続することも可能で、サードパーティがTCP/IPなどのプロトコルも開発していた。

### 配布媒体とシステム最小構成
RT-11が動作可能な構成は、（ハードディスクのない）8インチ250KBFDD2機と56KBのメモリで、8台の端末を接続可能である。他に、パック型磁気ディスク装置（2.5MBのRK05）や磁気テープからもブート可能。配布媒体としては、さん孔テープ、オープンリール式磁気テープ、カートリッジ式磁気テープ、フロッピーディスクがある。シングルユーザーの最小構成は、FDD1機と16KBのメモリである。その構成でスワッピングとオーバーレイを駆使してユーザープログラムを実行可能である。例えば、ユーザーのプログラムを実行中はキーボードからの入力を扱うユーザインタフェース部分 (KMON) をスワップアウトし、プログラムが完了するとスワップインするといった動作をした。

### ファイルシステム
単純で高速なファイルシステムを装備している。ファイル名は本体が6文字で拡張子が3文字に制限されており、RADIX-50で符号化されるので、9文字が6バイト（16ビットワードで3ワード）に圧縮される。ファイルはディスク上の連続なブロック（1ブロックは512バイト）に格納される。そのためファイル全体の読み書きが非常に高速である。しかしファイルを削除するとフラグメンテーションが起き、空き領域があるのにファイルを作れなくなる。そのため定期的にファイルシステムのデフラグメンテーション（RT-11では "squeeze" と呼ぶ）を行って、空き領域をまとめる必要がある。

### 他のDEC製OSとの互換性
特別な周辺機器を必要としないRT-11用プログラムは、RSTS/Eの RT-11 RTS (Run-time system) 上で直接実行可能である。また、RSX-11とVMS上にはRTEM（RTエミュレータ）が用意されていた。

がRT-11上で実装されたことで、他のDEC製OSとの互換性が向上した。DCLには各OS独自のコマンドやオプションがあるが、OS間で共通するコマンドやオプションもある。

## 互換OS
; Fuzzball
: Internet Protocol のルーティングソフトウェア。RT-11のプログラムを実行可能。
; SHAREplus
: HAMMONDsoftware が販売したRT-11互換OSで、マルチプロセス/マルチユーザ版RT-11となっており、VMSからアーキテクチャ上のコンセプトを借用している。他にマルチコンピュータ版の STAReleven も販売していた。RT-11のデバイスドライバを別途用意する必要があった。ネットワークオプションとして、他のPDP-11やVAXの周辺機器に透過的にアクセスできる機能も提供している。RSX-11のアプリケーションについても限定的な互換性を提供していた。主にヨーロッパで人気となった。
; TSX-Plus
: S&H Computer Systems が開発・販売した、マルチユーザー/マルチプロセッシング版RT-11。ただし純正のRT-11がないとブートできない。TSX-PlusはRT-11上でユーザープログラムとして起動し、RT-11からシステムの制御を完全に奪って動作する。ユーザー間の完全なメモリ保護、ユーザーアカウント機能、ディスクボリュームのユーザー毎の分離などの機能を提供。RT-11上のプログラムは多くの場合そのままTSX-Plus上で動作可能。デバイスドライバは若干修正する必要があった。

## バージョン
### リリース履歴

### バリエーション
マルチタスクのサポートレベルの異なる4種類から選択可能だった。
* **RT-11SJ** (Single Job) - 一度に1つのタスクのみ実行可能。最初リリースされたのはこれである。
* **RT-11FB** (Foreground/Background) - 2つのタスクをサポート。フォアグラウンドのジョブは、高優先度で非対話的。バックグラウンドのジョブは低優先度で対話的。
* **RT-11XM** (eXtended Memory) - 64KB以上のメモリをサポート。ただしメモリ管理ハードウェアを備えた機種でなければならない。1975年以降にリリース。
* **RT-11ZM** - 命令空間とデータ空間の分離をサポート（Unibusベースの 11/44, 45, 55, 70, 84, 94 およびQ-busベースの 11/53, 73, 83, 93）

### 特殊バージョン
いくつかのPDP-11ベースの特殊ハードウェアは RT-11 を搭載していた。
* LAB-11 - 研究室などのアナログデータ収集用周辺機器 LPS-11 を付属したPDP-11
* PEAK-11 - ガスクロマトグラフィーに特化したPDP-11。RT-11のフォアグラウンドジョブとしてデータ収集機能が動作し、ユーザー作成の解析プログラムがバックグラウンドジョブとして動作する。
* GT4x - VT11ベクターグラフィックス周辺機器を付属したPDP-11。デモプログラムとして Lunar Lander やスペースウォー!がシステムに付属していた。
* GAMMA-11 - RT-11とPDP-11/34をパッケージ化した核医学システム。高速A/Dコンバータ、16ビット・カラーグラフィックディスプレイ、シンチグラフィのためのデータ収集・解析・表示アプリケーション開発用ソフトウェアライブラリを含んでいる。

### ソビエト連邦でのクローン
ソビエト連邦では以下のような RT-11 クローンが作られた。
* RAFOS ("РАФОС") — SM EVM
* FOBOS ("ФОБОС") — Electronika 60
* FODOS ("ФОДОС")
* RUDOS ("РУДОС")
* OS DVK ("ОС ДВК") — DVK
* OS BK-11 ("ОС ВК-11") — エレクトロニカBKシリーズ
* MASTER-11 ("МАСТЕР-11") — DVK

## 脚注

## 外部リンク
* PDP-11 How-to guide with RT-11 commands reference