Loading AI tools
ウィキペディアから
RSTS (Resource Sharing Time Sharing System)[1] は、ディジタル・イクイップメント・コーポレーション (DEC)[2]が16ビットミニコンピュータシリーズPDP-11用に開発したマルチユーザー・タイムシェアリング・オペレーティングシステム。最初のバージョン RSTS-11 version 1 は1970年、PDP-8用タイムシェアリングOS TSS-8 のチームが開発した。RSTSの最終バージョン RSTS/E 10.1 は1992年9月にリリースされた。RSTS-11 と RSTS/E は通常単に "RSTS" と呼ばれ、本項目でもそのように記述する。
リモート接続でのテキスト表示例 | |
開発者 |
ディジタル・イクイップメント・コーポレーション (現在は Mentec Inc. が所有) |
---|---|
プログラミング言語 |
MACRO-11アセンブリ言語 lBASIC-PLUS-2 DCL Forth |
開発状況 | 開発は終了しているが、入手は可能 |
ソースモデル | クローズドソース |
最新安定版 | RSTS V10.1 / 1992年9月 |
使用できる言語 | 英語 |
アップデート方式 | バイナリパッチ、あるいはバイナリそのもの |
パッケージ管理 | BACKUP |
プラットフォーム | PDP-11 |
カーネル種別 | タイムシェアリング オペレーティングシステム |
既定のUI | コマンドラインインタフェース: DCL(DIGITALコマンド言語) |
ライセンス | プロプライエタリ |
RSTSのカーネルはアセンブリ言語 MACRO-11 で書かれ、DOS-11というOS上で動作する CILUS (Core Image Library Update and Save) プログラムを使ってディスクにインストールされる。RSTSをブートすると、BASIC言語の拡張版である BASIC-PLUS の処理系が立ち上がる。リソースアカウンティング、ログイン、ログアウト、システム管理などのOS内のシステムソフトウェアは CUSPS (Commonly Used System Programs) と呼ばれ、全てBASIC-PLUSで書かれていた。1970年から1973年まで、RSTSは56キロバイトの磁気コアメモリのみで動作可能だった(メモリ空間は64キロバイトで、メモリマップドI/Oの空間も含む)。この構成で最大16の端末を接続でき、最大17個のジョブを同時実行できる。プログラムの最大サイズは16キロバイトである[3]。1973年末時点で、RSTSがライセンスされたシステムは150ほどあった[4]。
1973年、新機種 PDP-11/40 および /45 のためにメモリ管理がサポートされた RSTS/E がリリースされた(PDP-11/20 は RSTS-11 でのみサポート)。メモリ管理サポートによって扱えるメモリ容量が4倍になっただけでなく(18ビット・アドレッシングで、256キロバイトをサポート)、ユーザーモードのプロセスとカーネルの分離が可能となった。
1975年、22ビット・アドレッシングの PDP-11/70 のためにメモリ管理サポートが改良された。これにより、最大2メガバイトのメモリを扱え、最大63個のジョブを同時実行可能となった。RTS (Run Time System) と CCL (Concise Command Language) のコンセプトが導入されたが、それらは "SYSGEN" の際にコンパイルする必要があった。マルチ端末サービスも導入され、1つのジョブが複数の端末を制御できるようになった(トータルで128端末)。メッセージ送受信のプロセス間通信がさらに洗練され効率化されている。同年8月にはライセンスされたシステム数が1,200となった[4]。
1977年、RSTSのインストールにDOS-11を使わなくて済むようになった。RSTSカーネルはRT-11の RTS にてコンパイルでき、RT-11の SILUS (Creates Save-Image Libraries) を使って SIL (Saved Image Library) ファイルとしてフォーマットされ、ターゲットシステムがタイムシェアリングで動作中にシステムディスクあるいは他のディスクにコピーできる。BASIC-PLUSのRTS(さらにはRT-11、RSX-11、TECOやサードパーティのRTS)は、RSTSカーネルから独立したユーザーモードのプロセスとして動作する。システムアドミニストレータはブートの際にどのRTSをデフォルトのKBM (Keyboard Monitor) とするかを選択可能になった。このころには3,100システムがライセンスを受けている[4]。
1978年、22ビット・アドレッシングが可能な全機種をサポートする最後のメモリ管理の更新が行われた。PDP-11がハード的に搭載可能な最大メモリ容量(4メガバイト)をサポート可能となった。SUPERVISORYモードが追加され、DECのOSでは初めてそのモードをサポートした。DECnetもサポートされ、コロラドスプリングスにあるDECのRDC (Remote Diagnostics Center) から遠隔診断が行えるようになった(有償サービス)。1970年代末にはライセンスを受けたシステムは5,000を越えている[4]。
1981年、Unibusマシン(PDP-11/44, /45, /55, /70)向けにユーザー空間の命令とデータの分離をサポートし、一種のメモリ保護を可能とした。これを使い、命令に64キロバイト、データに64キロバイト(さらにはバッファ用に64キロバイト)の別々の空間を使うプログラムが作成可能となった。DCL (Digital Command Language) RTS も含まれており、DECnet III の新バージョンもサポートされている。
1983年の RSTS/E V8.0-06 ではDECが販売した最小構成の18ビットPDP-11 (MicroPDP-11) をサポートしている。MicroPDP-11でのインストールを容易にするため、事前に生成済みのSILとCUSPSが含まれている。MicroPDP-11用の事前生成済みのバージョンを MicroRSTS として低価格で販売したが、カーネルの再作成が必要ならフルバージョンを購入しなければならなかった。ファイルシステムが更新されており、識別のため RSTS Directory Structure 1 (RDS1) と呼ばれた[5]。それに応じて従来のRSTSのファイルシステムは RDS0 と呼ばれるようになった[6]。新しいファイルシステムは1700以上のユーザーアカウントをサポートできるよう設計されている[7]。このころライセンスを受けたユーザーは1万以上で、ほぼ同数のユーザーがライセンスを受けずに(不正コピーして)使っていたと見られている[4]。
1985年から1989年にかけて、version 9 でRSTSは円熟期を迎えた。DCLが主要RTSとされ、新たなユーザーアカウント機能をサポートすべくファイルシステムも RDS1.2 に更新された。従来のパスワードは RADIX-50 フォーマットで6文字までという制限があったが、暗号化(ハッシュ)されるようになった。従来、プロジェクト(グループ)番号ゼロのシステムアカウント(識別番号 [0,1])があり、プロジェクト番号1の全アカウントに特権が付与されていた(UNIXのrootアカウントとは異なる)。version 9 以降はプロジェクト番号ゼロにアカウントを追加できるようになり、複数の特権を個別に任意のアカウントに付与できるようになった。LAT (Local Area Transport) プロトコルがサポートされ、DECnet IV の最新版も動作可能となった。それらのネットワーク強化により、任意のユーザーが端末から端末サーバ DECserver 経由でRSTSマシンに接続できるようになり、VMSの動作するVAXと同等のアクセスが可能になった。DCLのコマンド構造がDECファミリ内で共通していたため、ルック・アンド・フィールも似通っていた。
これはよくある擬似コマンドファイルプロセッサではなく、VMSの機能に基づいている。DCLとモニターに大幅な改造を施すことで、DCLコマンドファイルプロセッサをRSTSに統合し完全サポートしている。DCLはジョブの一部としてコマンドファイルを実行し、(ATPKと同様)擬似キーボードや実キーボードへの強制が不要である。[8]
1994年、DECはPDP-11のソフトウェア事業を Mentec という企業に売却し[9]、DEC自体はVAXに集中するためRSTSのリリースをやめた。
Mentecは後にPDP-11用OSを非営利の趣味的利用に限って無料ライセンスで提供した[要出典]。また、IBM PC 向けにPDP-11エミュレータがリリースされ、インターネット上でRSTSのイメージコピーが容易に入手可能となったため、パーソナルコンピュータ上のエミュレータでRSTS/Eを実機よりも高速に動作させることが可能となった。
最後のリリースとなった RSTS/E version 10.1 の機能と特徴はDECの Software Product Description によれば次の通りである[10]。
RSTSではオペレータとのやりとりにシリアル通信接続を使用する。この接続は、ローカルな端末なら20mAカレントループも使えるし、RS-232インタフェース(ローカルなシリアルポート接続かリモートのモデム接続)も使える。また、DECnetまたはLAT (Local Area Transport) を使ったイーサネット接続も可能である。最大128の端末を接続可能で、同時に最大63のジョブが動作可能である(CPU性能、メモリ容量、負荷状況によってはその前に限界となる場合もある)。バッチモードでジョブを実行させることもできる。仮想端末上で一連のコマンド列を実行する "ATPK" というバッチプログラムがあり、MS-DOSのバッチファイルに近い。
ユーザーがシステムと接続するには、LOGIN(またはHELLO)コマンドを使用する。実際にはログインしていない端末に任意のコマンドを入力すると、自動的にLOGINプログラムを起動してから入力されたコマンドを解釈するようになっている。ログアウト状態で入力されたコマンドについてログアウト状態で実行が許可されていない場合、"Please say HELLO" といったメッセージが表示される。version 9 より以前、1行でログインすることもできたが、そうするとパスワードが画面上にそのまま表示されるので、後ろから覗き見される危険性があった。
Bye HELLO 1,2;SECRET Ready
または
I 1,2;SECRET Ready
または
LOGIN 1,2;SECRET Ready
端末の状態は、コマンドに対する反応(表示)で識別できる。例えば BASIC-PLUS RTS にログインしている場合、KBM は "Ready" というプロンプトを表示し、ログアウトしているユーザーには "Bye" というプロンプトを返す。
ログインに際しては PPN (Project Programmer Number) とパスワードを入力する。ユーザーの番号は、プロジェクト番号(UNIXのグループ識別子に相当)、カンマ、プログラマ番号という形式である。どちらの番号も0から254までで、特別な例外もある。アカウントを識別するのにこれらの番号を使う場合、角括弧で囲む。例えば、[10,5](プロジェクト番号10、プログラマ番号5)、[254,31]、[2,146]、[200,220] といった形式である。ユーザーがシステムプログラムを起動してログアウトした場合(管理者がそれを許している場合)、PPN は [0,0] となり、SYSTATコマンドでは **,** と表示される。これは正しいアカウント番号ではないことを示している。
各プロジェクトのプログラマ番号0は、グループアカウントとして予約しておくのが一般的で、特殊記号 "#" で参照できる。あるユーザーの番号が [20,103] だとすると、"#" が前置された名前のファイルはユーザー番号 [20,0] のアカウントで格納されたファイルだとわかる。
特別なプロジェクト番号が2つある。プロジェクト番号0はシステムソフトウェア用に予約されているのが一般的で、version 9 より以前には1つしかアカウントがなかった(つまり、[0,1] しかなかった)。プロジェクト番号1を与えられたプログラマには特権が付与されており、Unix系のrootに似ているが、[1,0] から [1,254] までの全アカウントに特権がある点が異なる。version 9 以降、システム管理者が任意のアカウントに特権を付与できるようになった。
アカウント [0,1] はOSのシステムファイルなどに使われている。次の例の右端の太字はコメントである。
DIR [0,1] Name .Ext Size Prot Date SY:[0,1] BADB .SYS 0P < 63> 06-Jun-98 List of bad blocks SATT .SYS 3CP < 63> 06-Jun-98 Bitmap of allocated disk storage INIT .SYS 419P < 40> 06-Jun-98 Operating system loader program ERR .ERR 16CP < 40> 06-Jun-98 System error messages RSTS .SIL 307CP < 60> 06-Jun-98 Operating system itself BASIC .RTS 73CP < 60> 06-Jun-98 BASIC-PLUS run time system RT11 .RTS 20C < 60> 06-Jun-98 RT-11 run time system SWAP .SYS 1024CP < 63> 06-Jun-98 System swap file CRASH .SYS 35CP < 63> 06-Jun-98 System crash dump RSX .RTS 16C < 60> 23-Sep-79 RSX-11 run-time system TECO .RTS 39C < 60> 24-Sep-79 TECO text editor Total of 1952 blocks in 11 files in SY:[0,1] (注: この表示は Version 9 より以前のものである)
DIR コマンドはCCLとしてインストールされており、DIRECT というプログラムの実行に等しい。[0,1] はOS用アカウント番号(と同時にディレクトリ名)である。ファイル名の次に表示されているのは512バイト単位のブロック数で表したサイズである。"C" はそのファイルが連続ブロックを割り当てられていることを示す。"P" は特権ユーザーでも削除できない保護されたファイルであることを示す。次の("< 40>" のように)括弧に囲まれた数値は、十進数でファイルプロテクションを示している。他のプログラマ番号や他のプロジェクト番号のユーザーから見えるか、更新可能か、実行可能かなどを示すもので、UNIXのファイルパーミッションに相当する。
ライブラリファイル群はアカウント [1,1] が付与されており、通常は論理名 "LB:" で参照される。アカウント [1,2] はシステム起動アカウントで、システムのCUSPSが含まれており、"CUSP$" が名前に前置される。同様に、[1,3] では "!"、[1.4] では "%"、[1,5] では "&" が前置される。アカウント [1,1] はユーザーがログインに使うことが許されており、POKEシステムコールでメモリ上の任意の位置の値を変更することができる。したがって、この [1,1] がUnix系のスーパーユーザーに最も近い。
RSTSの特徴のひとつとして、プログラムの実行手段と実行時に使われる環境がある。BASIC-PLUS やその拡張である BASIC-PLUS 2、またもっと古くからの言語であるCOBOLやFORTRANといったプログラミング言語も利用可能である。これらの環境は互いに分離されていて、システムは実行するプログラムごとに環境を切り換えている。この環境をRTS (Run-Time System) と呼ぶ。RTSの多くはコマンドラインインタフェースを備えており、それを KBM (Keyboard Monitor) と呼ぶ。version 9 以前ではシステム起動時のRTSを事前に設定しておく必要があり、そのRTSはコンパイル済みプログラムを実行できる必要があった。
システム管理者は特別なCCLコマンド群をインストールすることもでき、(DCLを除く)KBMコマンド群に優先させることができる。CCLはWindowsでのショートカットやUnix系のシンボリックリンクに似ている。CCLは立ち上げ時にメモリ常駐コマンドとしてインストールするか、システム管理者がシステム動作中に動的にインストールする(つまり、ディスク上のファイルのように永続的なものではない)。
ユーザーはログイン後に環境を切り換えることができる。
BASIC-PLUSで書かれたプログラムは BASIC RTS で実行できる。BASIC RTS では64KBのメモリのうち32KBをBASICプログラム群に提供できる。言語処理系はプログラムのキーワードを1バイトのコードに変換して格納し、変数やデータはインデックス付けされてメモリ上別々に格納される。この内部のバイトコード形式をPCODEと呼ぶ。SAVEコマンドでBASICプログラムをセーブする場合、".BAC" という拡張子付きでメモリ上のイメージがそのままディスクに保存される。このフォーマットは公開されていなかったが、イギリスの大学生が ".BAC" ファイルから元のソースを生成する逆コンパイラを開発した(後にその2人の学生はDECに就職した)。64KBのメモリの残り32KBは BASIC RTS 自身が使用する。以下にBASIC-PLUSのコマンド行の例を示す。"Ready" はプロンプトである。
new New file name--HWORLD Ready 10 Print "Hello World" 20 Input "Press Control-T for 1 line status: ";a$ 30 End run HWORLD 10:17 PM 01-Jan-08 Hello World Press Control-T for 1 line status: ? 1 KB0 HWORLD+BASIC KB(0R) 2(16)K+14K 0.2(+0.0) +0 Ready save Ready compile Ready DIR HWORLD.*/na/ex/si/pr SY:[1,2] HWORLD.BAS 1 < 60> HWORLD.BAC 7C <124> Total of 8 blocks in 2 files in SY:[1,2] Ready
varsion 9 以降、DCL が立ち上げ時の主たるRTSとされたが、機械語の実行ファイルを実行する機能はない。これは後述する RSX RTS がカーネル内に吸収されたために可能となった。DCLは当時のDECのあらゆるOS(RSX-11、RT-11、VMS、OpenVMS)で導入され、互換性を提供していた。DCLの通常のプロンプトは "$"(ドル記号)である。
$ write 0 "Hello World, it is "+F$TIME() Hello World, it is 01-Jan-08 10:20 PM $ inquire p1 "Press Control-T for 1 line status:" Press Control-T for 1 line status: 1 KB0 DCL+DCL KB(0R) 4(8)K+24K 0.1(+0.1) -8 $ set verify/debug/watch $ show memory (show memory) (SYSTAT/C) Memory allocation table: Start End Length Permanent Temporary 0K - 85K ( 86K) MONITOR 86K - 1737K (1652K) (User) 1738K - 1747K ( 10K) (User) DAPRES LIB 1748K - 1751K ( 4K) (User) RMSRES LIB 1752K - 2043K ( 292K) ** XBUF ** 2044K - *** END *** $
COBOL、マクロアセンブラ、BASIC-PLUS 2 で書かれたプログラムはコンパイラにより機械語の実行ファイルとなり、RSX RTS で実行される。RTS自体は8KBを使用し、56KBがユーザープログラムで使用可能だった。RSTS version 7 で RSX RTS がカーネルに吸収され、ユーザー空間から消えたため、ユーザープログラムが64KB全部を使えるようになった。
このサイズの制限に対処するには、ライブラリや複雑なオーバーレイ機構を使用する、共有メモリを使ってプログラム間で協調動作するなどの方法がある。RSXをデフォルトのKBMとした場合、RSXの標準プロンプトは ">" となる。
>run Please type HELLO >HELLO 1,2;SECRET >run ?What? >help Valid keyboard commands are: ASSIGN DISMOUNT HELP RUN UNSAVE BYE EXIT MOUNT SHUTUP DEASSIGN HELLO REASSIGN SWITCH >run CSPCOM CSP>HWORLD=HWORLD CSP>^Z >RUN TKB TKB>HWORLD=HWORLD,LB:CSPCOM.OLB/LB TKB>// >run HWORLD.TSK Hello World Press Control-T for 1 line status: ? 1 KB0 HWORLD+...RSX KB(0R) 7(32)K+0K 0.8(+0.2) +0 >DIR HWORLD.*/na/ex/si/pr SY:[1,2] HWORLD.BAS 1 < 60> HWORLD.BAC 7C <124> HWORLD.OBJ 2 < 60> HWORLD.TSK 25C <124> Total of 35 blocks in 4 files in SY:[1,2] >
RT-11 RTS は、RT-11のシングルジョブ版をエミュレートしたものである。RSXと同様RTS自身は8KBを使用し、CUSPS (Commonly Used System Programs) のために56KBを提供する。CUSPSは FORTRAN-IV やマクロアセンブラで書かれる。RT-11をデフォルトのKBMとした場合、通常のプロンプトは "." となる。
.VERSION Please type HELLO .HELLO 1,2;SECRET .VERSION RT-11SJ V3-03; RSTS/E V8.0 .R PIP *HWORLD.MAC=KB: .MCALL .TTYIN,.PRINT,.EXIT HWORLD: .ASCII /Hello World/<15><12> .ASCIZ /Press Control-T for 1 line status:/ .EVEN Start: .PRINT #HWORLD .TTYIN .EXIT .END START ^Z *^Z .R MACRO HWORLD=HWORLD *^Z .R LINK *HWORLD=HWORLD *^Z .R HWORLD.SAV Hello World Press Control-T for 1 line status: 1 KB0 HWORLD+RT11 KB(0R) 2(28)K+4K 0.6(+0.2) +0 ..DIR HWORLD.*/na/ex/si/pr SY:[1,2] HWORLD.BAS 1 < 60> HWORLD.BAC 7C <124> HWORLD.TSK 25C <124> HWORLD.MAC 1 < 60> HWORLD.OBJ 1 < 60> HWORLD.SAV 2C <124> Total of 37 blocks in 6 files in SY:[1,2] .
テキストエディタ TECO はRTSとして実装されていた。これは編集バッファを可能な限り大きくするためで、RSTS V5B で実装された。これは、RSX や RT-11 といった汎用RTSよりも早い。TECOにはKBMが組み込まれていない。ユーザーはTECOを通常プログラムのように起動する。TECOからUNIXのテキストエディタ ed が生まれた。RSTSシステムでは、CCLとしてファイル生成、ファイル編集、TECOプログラム実行といったコマンドを用意していることが多かった。次の例はTECOを使って円周率を20桁まで計算するプログラムである[11]。
Ready run TECO *GZ0J\UNQN"E 20UN ' BUH BUV HK QN< J BUQ QN*10/3UI QI< \ +2*10+(QQ*QI)UA B L K QI*2-1UJ QA/QJUQ QA-(QQ*QJ)-2\ 10@I// -1%I > QQ/10UT QH+QT+48UW QW-58"E 48UW %V ' QV"N QV^T ' QWUV QQ-(QT*10)UH > QV^T @^A/ /HKEX$$ 31415926535897932384 Ready
TSS-8に引き続き、IOX (Input Output eXecutive) コードを使ってPDP-11用の初のタイムシェアリングOSが開発され、BTSS (Basic Time Sharing System) と名付けられた。しかしBTSSという名称はハネウェルが既に使用していたため、RTSS (Resource Time Sharing System) に改称。それが単なるタイプミスから RSTS (Resource Sharing Time Sharing System) と呼ばれることになった[12]。
バージョン | リリース時期 | 備考 |
---|---|---|
1 | リリースされず | |
2A-19 | 1971年 | Carleton College と Seattle Pacific College にてインストール |
2B | 1971年6月 | Delaware School Auxiliary Association にてインストール |
2C | 1971年10月 | Record I/O の機能追加 |
3A-19 | 1972年1月 | |
3B | 1972年5月 | |
3C | 1972年6月 | UPDATE mode の機能追加 |
4A-12 | 1972年10月 | 新機種サポート |
4B | 1975年7月 | バグ修正(パッチ) |
新たなメモリ管理サポートを追加し、新機種のメモリ容量増に対応。名称を RSTS-11 から RSTS/E に変更した。
バージョン | リリース時期 | 備考 |
---|---|---|
5A-21 | 1973年7月 | メモリ管理拡張(64KBから256KBへ) |
5B-24 | 1974年11月 | 複数スワップファイル。RTSとCCLを導入 |
5C-01 | 1975年3月 | バグ修正(パッチ) |
6A-02 | 1975年8月 | 22ビット・アドレッシングの新機種対応(2MBまで)。63ジョブ。 |
6B-02 | 1977年2月 | 新機種対応。RT-11でのSYSGEN。実行時CCL。 |
6C-03 | 1978年2月 | DECnet II 対応。DTR (Datatrieve) と DIBOL をサポート。SUPERVISORモード追加。 |
7.0 | 1978年8月 | 新機種対応(4MBまで)。遠隔診断サポート |
7.1 | 1981年2月 | カーネルモードでの命令/データ空間分離。DECnet III サポート |
7.2 | 1982年8月 | 新周辺機器対応 (UDA50 drives) |
8.0-06 | 1983年4月 | 新機種対応 (MicroPDP-11) |
9.0-14 | 1985年5月 | 新ハード対応。DCLをデフォルトに。PBS (Print Batch Services)。複数特権。ハッシュによるパスワード保持。新バックアップユーティリティ。Stardate |
9.1-05 | 1985年10月 | ハードウェアサポートの拡大。マルチスレッドFIP (File Information Processing)。LOAD INDEX |
9.2-10 | 1986年6月 | 新ハード対応 |
9.3-20 | 1987年1月 | ハードウェアサポートの拡大。DECnet IV サポート |
9.4 | 1987年7月 | 新ハード対応。スケジューラと端末サービスの強化 |
9.5-08 | 1987年12月 | クラスターを64機構成に拡大。BACKUP/DIR の追加 |
9.6 | 1988年9月 | LATサポート。HELP SPIKE |
9.7 | 1989年7月 | 新ハード対応。ANSI PDP-11C が使用可能になった。 |
10.0 | 1990年5月 | TTDRV でのコマンドライン履歴 |
10.1 | September 1992年9月 | 2000年問題対応 |
なお、ソビエト連邦ではRSTSのクローンとして DOS-KP ("ДОС-КП") というOSが存在した。
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.