Domain/OS

Domain/OS（ドメインオーエス）アポロコンピュータ社 (Apollo Computer, Inc.)製のワークステーション、Apollo DOMAINシリーズに搭載していた分散オペレーティングシステム。Apollo DOMAINシリーズには、CRT表示インターフェースボードありのDNシリーズ、CRT表示インタフェースボードなしのDSPシリーズが存在した。
また、従来はがオペレーティングシステムとして搭載されていたが、DN-10000・DSP-10000など、マルチプロセッサ構成のコンピュータをリリースにあたり、これまでのオペレーティングシステムの設計を見直し、再設計されたオペレーティングシステムがDomain/OSである。分散オペレーティングシステムの機能は、AEGISから受け継いだものである。

当時としては桁外れの先進機能を備えていたが、ヒューレット・パッカード社 (HP) に吸収され消滅した。
DOMAIN/OSは当時のワークステーション業界においてプログラム編集開発環境、ネットワーク技術分散技術、グラフィック技術において世界で最も進んでいたOSである。その技術の一部をOpen Software Foundation (OSF) へ提供し、さらにHP-UXへ機能移植行う数年がかりの計画を発表したが、UNIXとのあまりの機能格差が大きすぎたため途中で断念した。

理想を言えば既にマイクロカーネル化を実現していたDomain/OSカーネルに他のUNIX同様、HP-UXを4つ目のOSミドルウェアとして搭載する手法が妥当であったが、吸収された手前行われなかった。

分散オペレーティングシステムとは、ネットワークで接続された複数のコンピュータを、一つの大きなシステムと捉えて管理するオペレーティングシステムのことである。DOMAIN/OSは、AEGIS同様に分散処理の管理機能を備えており、さらに分散ファイルシステムも搭載していた。

ここでDOMAINとは、“” の略である。

 Domain/OSとは 
 OS概要 

DOMAIN/OSは複数のワークステーションやサーバをネットワークで接続し、以下の環境を実現することを目指した、OSである。
 メインフレームで実行するような大きなアプリケーションの実行。
 コンピュータ自身を使用者が直接利用できる。タイムシェアリングシステムとの決別。
 ネットワークによる共同作業と資源の共有。
 ネットワーク全体を1つのコンピュータと捉える管理機構。
 複数の環境を利用できることで、使いやすい環境をユーザーに提供するため、AEGIS,UNIX同時動作、ディスプレイマネージャとX Window System（以下X）の共存。
 マルチプロセッサ対応を柔軟にし、複数のOS環境を取込むためのマイクロカーネル。

DOMAIN/OSとともにリリースされたシリーズDN10000/DPS10000はマルチプロセッサ構成である。

DN10000/DPS10000はRISCプロセッサを4つまで搭載可能であった。

 OS構成 
DOMAIN/OSマイクロカーネルの上位にAEGISと当時の2つのUNIX (4.3BSD, SystemV 5.3) を搭載し、同時独立動作したものである。ウィンドウシステムを含め以下の全体をDomain/OSと呼ぶ。

Window System
（OSとの対話機能）Display Manager / X WindowOS MiddlewareAEGISUnix BSD4.3Unix SystemV R3OS CoreDomain/OS MicroKernel

DOMAIN/OSリリース当初はディスプレイマネージャのみでXは搭載していなかったが、SR10.2にバージョンアップ時、標準的に搭載するようになった。

当時のXは、他のUnix環境も取り込むだけのために搭載された経緯が大きく、現在のウィンドウマネージャが搭載されていなかった（現在でもXのウィンドウマネージャの機能を停止させれば似た環境になる）。また、ハードウェア面でもX用のアクセラレータを行っていなかったため非常に遅いという問題を抱えていた。

サン・マイクロシステムズ (SUN) を除く他社では、Xのみがウィンドウシステムであったため、Xの高速化としてX用のアクセラレータを搭載するなどを行っていたSUNもXに移行している。

 開発の終焉 
Apollo社独自のウィンドウシステムに比重を置いていたことと、ディスプレイマネージャが非常に軽いウインドウシステムであったため搭載されることはなかった。その後、別売りでHP-VUE（Motif (GUI) ベースのウィンドウマネージャー）が売られるようになり、Xもある程度まともに操作できる環境は整ったが、起動が遅いこと、別売り（高価）である問題が解決できていなかったこともあり、Xを動作条件するもの以外わざわざXを使用することは少なかった。

結局、Xの動作環境を改善することなくDOMAIN/OSのリリースは終了した。

なお、HP社内ではXにディスプレイマネージャ環境を移植したソフトウェアDMX (HP-UX)、ディスプレイマネージャとXを独立動作させるワークスペース切替など、いろいろと試みがあったようだが、リリースされることはなかった。

 OSの移行 
AEGISの時はモノリシックカーネルであった。その上にディスプレイマネージャが搭載されていた。

UNIXについては標準ではなく別売りの追加機能としてDOMAIN/IXという名称でUNIX (4.2BSD, UNIX System V) の機能をライブラリレベルで提供していた。

Domain/OSに移行の際、AEGISのモノリシックカーネルの機能分離を行いマイクロカーネル化（Domain/OSカーネル）を行った。さらにAEGISソースコードはUNIXに合わせ、PascalからC言語に置き換えを行った。AEGISの高度な機能部分をミドルウェア化を行い、同時にUNIX (4.3BSD, UNIX System V Release 3) をミドルウェア化を行うことで、Domain/OSが完成した。PascalからC言語への置き換えの影響でOSのファイルシステムにてアルファベットの大文字、小文字を区別するようになった。

マイクロカーネル化したDomain/OSカーネルのSPI (System Programming Interface) は公開されていなかった。
また、将来Domain/OSカーネルをMach (Multiple Asynchronously Communication Hosts) カーネルに置き換える予定も存在したが、リリースすることなかった。

なお、Machへの置換えは、当時の流れとDOMAIN/OSカーネルの構造考えたとき、マルチプロセッサ化をより容易に行うことを目的としていた。さらに、メモリオブジェクトをネットワーク分散システム拡張することで理論上DOMAIN/OSカーネルの必要最低限の機能を実現できると言う憶測であったが、Machの完成度がまだ低かったため検討・計画のみ行われたが、HP社に吸収されたことで終了した。

 OSのルーツ 
DOMAIN/OSのルーツを知るには前OSのAEGIS（エイジス）のルーツを知る必要がある。

AEGISは、ハネウェル社出身のウェリアム・ポドゥカスとプライム・コンピューターから移籍したスタッフとの共同で作られたOSである。アポロコンピュータ社独自のOSであるが、ハネウェル社MulticsとPrimeOSの良い機能を吸収し、拡張・改善して再設計された先進的機能を備えるOSである。AEGISは一貫性のあるコマンド体系や分散ファイルシステム、シングルレベルストア、ダイナミックリンキングなどの先進機能を搭載しているが、UNIXのルーツ (Multics) と関係をもち、また影響を受けたOSでもある。

上記の流れで完成されたAEGISであったが時代の流れとともにUNIXの影響を無視できなくなり、AEGIS SR9.5よりDOMAIN/IXと言う名称でUNIX環境（UNIX SystemV、BSD4.2の両方）をライブラリレベルで提供した。

AEGISが優れた点は、世界初の分散環境OSであり分散ファイルシステムを実装していたことである。
1981年にリリースされたDN100という機種は、以下の仕様のハードウェアに分散OSを実現した。
 MPU ：MC68000
 MMU ：MC68000 （MMUがなかったので仮想記憶管理用プロセッサとしてMC68000を2個搭載していた）
 主記憶 ：3.5MB
 HDD ：30MB
 LAN ：Apolloトークンリング (12Mbps)
 CRT ：1024×800

独自にならざるを得なかったのは、ネットワーク環境が現在とは違いTCP/IP（当時仕様策定中）が実装された状態ではないためXNS (Xerox Network Systems) を手本としこの分散環境を実現したためである。

ただし、この上で実現した分散ファイルシステムはパフォーマンスが高く、100台以上接続してもパフォーマンスがほとんど落ちない優れものであった（この時代としては驚異であった）。

 時代背景 
なぜTCP/IPが利用されなかったかは以下の時代背景（簡略版）にある。
 1974年、TCPとIP発表と論文で「インターネット」という言葉が登場
 1976年、Unix to Unix Copy Protocol (UUCP) 発表
 1979年、ネットニュース (USENET) 登場
 1980年、アポロコンピュータ社創立
 1981年、アポロコンピュータ社が世界最初のEWSとしてDN100を出荷。4.1BSDリリース。
 1982年、ARPAnetがTCPとIPを採用し、TCP/IP仕様がほぼ決まった。サンマイクロシステムズ社創立。AT&T社UNIX System IIIリリース。
 1983年、4.2BSDリリースこのときTCP/IPが標準実装された。サンマイクロシステムズ社が一般向けにTCP/IPが標準実装されたUNIXを提供 (SunOS 1.0)
 1984年、サンマイクロシステムズ社がNFSを業界にフリーでライセンスする
 1985年、SunOS 2.0がNFSを実装
 1986年、アポロコンピュータ社がNCS (Network Computing System) 発表。カーネギーメロン大学がAFSを開発。

APOLLO DOMAINシリーズはリリースが時期尚早すぎたため、分散ファイルシステムをIPベースに実装できなかったのである。

年表上最初のEWSとしているが、それ以前にワークステーションおよび現在のPCの原型と言える機種は存在した。
それは、1974年に開発されたゼロックス社のAltoである。エンジェルバートが発明したマウスを使用し、世界初のビットマップ・ディスプレイ、世界初のイーサネット、世界初のレーザプリンタが接続されていた（その当時はEWSと言う区分けはなかった）。

ちなみに、ゼロックスのパロアルト研究所PARC (Palo Alto Research Center) は、「マウス」、「アイコン」、「グラフィカルユーザインターフェース (GUI)」、「ウインドウシステム」、「イーサネット」、「レーザープリンター」、「PostScript」などを開発している。

なお、分散OSおよび分散ファイルシステムではAEGISが世界初のOSである。
 Apple社とのパートナーシップ 
Apollo社はApple社とのパートナーシップを結んでいた。Domain/OS を実行するワークステーション系列に Mac デスクトップを移植する作業を行っていたが、スティーブ・ジョブズ (Steven Paul Jobs) がApple社を離れると、後任のジャン＝ルイ・ガセー（Jean-Louis Gassée)によりこの契約を解除された。この開発に投資していたApollo社にとっては大打撃となった。

 特徴 
 実行・開発環境 
 使用するライブラリ
 AEGISでもUNIXでも両方混在でも利用できた。
 実行環境に使用するシェル
 AEGISシェルでもUNIX系シェルのBourne Shell、C Shell、KornShellでもどちらでも操作しやすい環境が使用可能であった。
 AEIGISシェル
 UNIX環境との大きな違いは、AEGISコマンド自身がネットワーク分散環境用に設計されたため、ネットワーク全体の機器の稼動状況の監視（プロセス実行状態・負荷、ディスク容量、ファイル操作、ネットワークなど）が秀でていた。コマンド体系も整理され、一貫性があり高機能だが判りやすいコマンドであった。シェルスクリプトの機能もUNIXシェルを上回る機能を搭載していた。
 UNIX系シェル
 当時の2つのUNIX環境 (4.3BSD, SystemV 5.3) がそのまま動作した。過去も現在もそうだが、同時に2つの環境を同時に独立動作できたのは、このDomain/OSのみである。他のワークステーションはどちらか1つしか実装せず、メーカ独自の付加機能を追加する程度であった。それには理由があり、商用OSでマイクロカーネルを開発・実装したのは当時Domain/OSのみであったためである。その後、オムロン社がMachマイクロカーネルを実装し上位にUNIX BSDをミドルウェア化したOSを発表したが、他のOSをミドルウェア化しなかったため、上記のように複数の環境を同時に動かすことはできなかった。
 エディタ
 開発にはプログラム編集機能が重要となる。Domain/OSでは、ウィンドウシステムに標準的に搭載されていた、EDITウィンドウを利用することが普通であった。UNIXコマンドにviやADUSライブラリにEmacsなどがあったが、機能・編集能力で遙かに劣るため他のUNIXマシンしか知識がないもの以外は、そのままEDITウィンドウの機能を利用した。なおADUSとはApollo Domain USers group（アポロドメインユーザ会）のことである。
 コンパイラ
 アポロコンピューター社はコンパイラ製作にも非常に優れていた。当時、演算プロセッサの利用もソース対応でなく、コンパイラのオプション設定だけで利用できる優れものであった。GNUコンパイラも存在したが、ほとんど利用されることはなかった。
 ダイナミックリンクライブラリ
 今では当たり前にできるOSもあるが、当時のUNIXおよびPCの世界では夢の機能であった。Domain/OSでは標準的に搭載しており、コマンド (INLIB) でプロセス内のメモリに配置可能でそのライブラリを必要とする実行ファイルを起動するとライブラリをリンクしなくても利用することができた。もちろんライブラリをリンクすることもできる。
 DDE (Distributed Debugging Environment)
 分散デバッグ環境、といわれプロセス名がわかればリモートで実行しているプログラムをダイレクトにデバッグできてしまう、現在でも実現できるソフトはないと思われる機能を搭載したソースレベルデバッガ。
 TraceBack機能
 プログラムのバグ等で停止した際、どこで停止したかトレースバックが可能であった。また、動作中のプロセスもリアルタイムにトレースバックすることができた。
 UNIX系でのコアダンプ解析をすることなく、トーレースバック表示でルーチン名と行数がはっきりわかるため、問題解決は非常に早かった。
 dspst (display process status graphically)
 各プロセスの負荷状態と、OS内プロセス負荷状態（LEVEL1プロセス）、I/O 統計（ディスク、ネットワーク、ローカルマウントページング、ネットワークデマウントページング）をリアルタイム表示する。
 hpc (program counter histogram)
 各ルーチンでどれだけ処理にかかっているかを解析し、テキストの棒グラフで表示を行うツール
 DAPT
 Domain Performance Analysis Kitのひとつで動作中のプログラムの動きを表示し、プログラムの流れをサブルーチンコールのチャートで表現できる。これは、現在のソフトウェアでも珍しい機能である。
 lvolfs (list_volume_free_space)
 論理ボリュームの使用可能な領域のサイズを表示する。これはUNIXではdfコマンドである。違いは、接続されているネットワーク全体の詳細を事細かに表示することである。自分の機器のディスク容量が足りなければ他の接続機器で余裕がある機器に全部移動してしまうことができた。アクセス方法も簡単で、ネットワークワイドにシンボリックリンクを作ることで移動後も以前と変わらない動作環境を実現した。
 台数増加による相乗効果
 Domain/OSはネットワーク透過で完全な分散環境を実現していた。Domain/OSの能力は1台では出し切ることができない。複数台接続して初めて、その真価を発揮するOSであった。具体的には、自分で使用している機器以外にネットワーク接続された機器にもログインし、自分で使用している機器を参照させてコンパイルするなど、接続された機器を自由に制御できた。自分の機器に欲しい周辺機器がなくても、ネットワーク上の機器で搭載または接続されていれば自由に使用でき、ソフトウェアも同様にネットワーク上の機器でインストールされていれば利用できた。現在のコンピュータOSも進歩したがここまでの自由度はない。
なお、台数増加で演算能力の相乗効果を生むものとして、NCS (Network Computing System) が搭載されていた。

 ウィンドウシステム 
従来のディスプレイマネージャとXを同時に動作させることができた。ここではディスプレイマネージャについて説明する。

 ログイン関連
 どのようなアカウントでログインしたユーザーでもDM入力ウィンドウのコマンド（DMコマンド）により、ログイン、ログアウト、システムシャットダウンが行えた。なお、システムシャットダウンは行えないように設定することも可能である。AEGISには、システムをシャットダウンするコマンドは用意されていない。ただし、DMコマンドをShellから起動する方法を除く。それは、初めからウィンドウシステムで操作することから設計されたシステムだからである。なお、一緒に搭載しているUNIXコマンドにはhalt、shutdown、rebootなどのシェルコマンドが用意されている。DOMAIN/OSをサーバシステムで利用した場合、サーバをシャットダウンする方法として、shutspmコマンドが用意されている。ウィンドウシステム終了は、ウィンドウシステムのみ終了してPhaseIIShellに移行する特殊なモードである。
 仮想端末機能
 AEGIS Shell、Bourne Shell、C Shell、KornShellなどのコマンドライン・インタプリタ環境を提供
 トランススクリプトパッド
 トランススクリプトパッドは、仮想端末機能を有するウィンドウで以下の特徴をもつ。
 入力領域をホールド機能で固定すると、やはりコマンドラインが編集パットと同等に操作でき、他のウィンドウの文字列なのカット&ペーストが可能である。
 トランススクリプトはさらに操作+操作結果履歴が画面の中で遡ることができる。（ドライブの容量の許す限り）
 トランススクリプトの履歴は、読込み専用状態でオープンしたエディタと同じで、その出力内容をエディタへコピー&ペーストするなどの操作ができた。
 編集パッド (Edit Pad)
 テキストファイルエディットをサポートするウィンドウである。このため、DOMAIN/OSユーザは、UNIX特有のviやEmacs等の端末に縛られるエディタ操作を知らなくてもファイル編集を簡単に行えた。編集機能は現在のEmEditorや秀丸エディタ級の能力を搭載していた。編集パットは起動するときの命令（DMコマンド）により、編集モードと読取り専用モードで起動できた。またその状態の切替えも同様にDMコマンドで行えた。
 DMコマンド制御
 DMコマンドというウィンドウ制御用のコマンドも用意されており、ウィンドウ制御、ペーストバッファ制御、テキスト入力制御、検索、置換え、キー定義制御、プロセス生成制御などが行えた。利用方法は、DM入力ウィンドウかキー定義を行うことが一般的方法である。

 ペーストバッファ管理
 ペーストバッファを100個まで持つことができ、DMコマンドを使用して利用する。よってキー定義しだいで複数の内容をペーストバッファーに格納/取り出しが行う環境をユーザが設定可能であった。DOMAIN/OSのかな漢字変換機能はこの機能を利用し、変換したい文字をマークさせペーストバッファに転送し、その文字列を変換し再度、ペーストしなおすことで実現していた。
 キー定義管理
 DOMAIN/OSシリーズは、キーボードとマウスを自由にキー定義でき、キー定義はDMコマンド・スクリプトを使用する。スクリプトの利点で動的にキー定義の内容も変更できるため、ユーザーにとって便利な環境にプログラム可能であった。
 ウィンドウシステム共通編集機能
 ディスプレイマネージャは、トランススクリプトパッド、編集パット、DM入力ウィンドウ、DM出力ウィンドウの4つのウィンドウが存在する。どれも共通の操作でカット&ペースト、テキスト入力制御、検索、置換えが行える。

 ファイルシステム 
OS名ネットワークルートDOMAIN/OS//CIFS
 分散ファイルシステム
 分散ファイルシステムとは、複数のコンピュータのファイルシステムを1つに統合して利用者に提供する（透過的にアクセス可能とする）ファイルシステムである。
 DOMAIN/OSは、分散ファイルシステムを提供している。Unix系のファイルシステムにあるルート / をさらに拡張した「ネットワークルート」という概念があり、// でアクセスする。（参考として、マイクロソフトが提案していたCIFS（Server Message Blockの記事を参照）、カーネギーメロン大学のAndrew File Systemやその後継のCodaといった分散ファイルシステムがある）
補足
 「商用OS」や「標準的のOSの機能として実装」という言葉の定義にもよるが、分散ファイルシステムを商用OSとして標準的のOSの機能として実装していたのはApollo DOMAINシリーズのみである、とする主張もある。
 他OSではこの機能を実装していない、として、分散オペレーティングシステムというミドルウェアとなっているの現状、とする主張もある。
 その理由として、Apollo DOMAINシリーズは、この機能の実現する独自プロトコルDDSをカーネルレベルで実装し、更にファイルシステム内のUID管理にノードIDを識別情報として記録されているためだとする。そのためApollo DOMAINシリーズ独自ではあったが、最初から分散ファイルシステムの設計施されていた。そのため当時の非力なマシンで高いパフォーマンスを実現できたと主張される。
 他OSでは後付システムであるため、「分散処理のための基本ソフト」または、「ミドルウェア」と言う扱いだと主張される。
 （他にも「商用OS」で、たとえばQNXにもネットワークルートがあるが、QNXはカーネルがマイクロカーネルのためカーネル外のサーバで実装されており、「カーネルレベル」ではないということであろう）
 ネットワークファイル共有機能
 ネットワーク上につながれたフォルダ（ディレクトリ）を共有する機能を「ネットワークファイル共有機能」という。なお、これは分散ファイルシステムではない。DOMAIN/OSは、DOMAIN/OSやAEGISなどの同系列のOSとは、分散ファイルシステムの機能が利用できるため、この機能は不要である。しかし他のOSとはそういかないので、DOMAIN/OSではNFS (Network File System) を搭載することで、異機種間ファイル共有を実現していた。当時、ファイル共有では1984年に発表したサンマイクロシステムズ社のNFS、1987年に発表されたAT&T社のRFS (Remote File System) が有名であった。そのうち異機種間ファイル共有はNFSのみであったそのため各社NFSを搭載した。AEGISが実現していた分散ファイルシステムが普及しない理由は、ベースに使用したプロトコルがXNS (Xerox Network Systems) の派生で独自プロトコルであったことと、分散ファイルシステムではオブジェクト（ファイル，ディレクトリ，リンク，etc...等）をネットワーク上一義的識別機能が必要となるため全オブジェクトの一義的識別子 (UID) にノードID（Apollo Domainシリーズ独自のホスト識別IDでPROMで提供され同じ番号はない）をなかに埋め込んでいた。
 他のコンピュータでは、分散OSとしての設計はないためこの概念を搭載することは困難であったため実装できなかった。これがApollo独自の分散ファイルシステムの特徴でもあり、非常に高速な処理を実現していた。
 SMB File Sharing (Common Internet File System)
 SMB (Server Message Block) を利用した、マイクロソフト社ファイル共有機能は標準的実装ではなくUNIXのPDSでDOMAIN/OSがサポートされていた。
 ファイルシステム構成要素
構成要素表記概要ネットワークルートディレクトリ//Domain/OSが分散ファイルシステムであるため、この//以下すべての接続機器のファイルシステムを参照検索が可能であった。ディレクトリ/MS-DOSやUNIXなどでおなじみのディレクトリで1〜256文字までの長さで名称を付けられる。ファイル[a-zA-Z0-9$_.]MS-DOSやUNIXなどでおなじみの1〜256文字までの長さで名称を付けられる。ソフトリンク[a-zA-Z0-9$_.]シンボリックリンクの機能である。Domain/OSでは環境変数含めたリンク先を指定できた。そのほか分散ファイルシステムの機能を利用し、ネットワークワイドにシンボリックリンクを作成でき、ディスク容量に余裕のある機器にプログラムを移動してしまうなどの方法が取れた。OS立ち上げに必要のない部分をすべて他の機器に移動し利用するという機能を実現させていた。ハードリンク[a-zA-Z0-9$_.]UID（64ビット一義的識別子）というファイルシステムを管理するIDでリンクする機能である。UNIX BSD系のハードリンクと同じ機能である。なおUNIXはiノード番号でリンクする。
 ノード名
 Domain/OSでは、ネットワークルートに登録される名前をノード名と呼んだ。NetBIOSではコンピュータ名が該当する。また、NetBIOSでは、コンピュータ名が1つしか割り当てできないが、Domain/OSはノードのカタログという方法で、1つの機器に複数のノード名と登録することで別名の利用が可能であった。
 親ディレクトリ
 AEGIS時代は “”（バックスラッシュ）で示していたがUNIX互換にするため、“..” （ピリオド2個）に変更された。ディレクトリ階層の区切りは当初より “/” である。
 複数OSを混在可能にしたファイルシステムの工夫
 複数のOSが同時に使用可能にするための仕組みとしてDomain/OSではシンボリックリンクの機能に環境変数を適用できた。そのため、2つのバッティングするディレクトリ (/bin, /etc, /usr) など環境変数を使用しシェルごとにまったく別のUNIX環境を実現可能にしていた。実例として、以下のような環境変数リンクを利用し、UNIXの2つのディストリビューションを同時混在させて利用されていた。
リンク名リンク先実ディレクトリbin/$(SYSTYPE)/bin/bsd4.3/bin または /sys5.3/binetc/$(SYSTYPE)/etc/bsd4.3/etc または /sys5.3/etcusr/$(SYSTYPE)/bin/bsd4.3/usr または /sys5.3/usr
環境変数SYSTYPE（設定値bsd4.3またはsys5.3）をプロセスウィンドウで動かすShell毎に選択可能なため、同時独立に複数の環境が実現されていた。

 ファイル管理 
DOMAIN/OSではネットワーク上のすべてのファイルをオブジェクトとして抽象化を行い管理する。このオブジェクト管理機構をOSS (Object Storage System) と呼んだ。DOMAIN/OSのオブジェクトはUID (Unique Identifier) という64ビットのネットワークワイド一義的識別子で管理される。

 アカウント管理 
レジストリデーモンというネットワーク分散技術を使用したアカウント管理を実現していた。ここで使用されたネットワーク分散技術（当時NCS (Network Computing System) と呼ばれた）は、その後、OMGのCORBAおよびMicrosoft DCOMの基となった技術である。

Domain/OSのアカウントはネットワーク全体を管理するネットワークレジストリとその機器のみのアカウントを管理するローカルレジストリが存在した。優先されるのはネットワークレジストリで、ネットワークレジストリにアクセスできない場合、ローカルレジストリが存在する。ログインする機器がネットワーク接続できないトラブルが発生してもローカルレジストリがカバーする仕組みである。これらの管理要素は、「オーナー」、「グループ」、「組織」という要素にパスワードをつける形式であった。

もともとUNIXより大きな枠組みがAEGISころから存在したのでそのまま機能を拡張していない。

スーパーユーザーはUNIXと同様rootが存在し、さらに、locksmithというスーパーユーザーグループが存在した。locksmithはUNIXには無い概念だが、WindowsのAdministratorsに相当する。

組織については特別なものは登録されていない。

Domain/OSには、他のUNIX機器とアカウント統合で互換性をもつためYP（Yellow Page、現在のNIS (Network Information Service)）も存在した。ただし、DOMAIN/OSで同士では利用しない。

 シェル（コマンドプロセッサ） 
シェルはAEGIS用にAEGISシェル、UNIX用にBourne Shell、C Shell、KornShellの環境が用意されていた。ユーザーはその中で使いやすい環境を選択できた。また、同時に複数種類の環境を走らせることも可能であった。

 オブジェクト 
DOMAIN/OSとAEGISは、ネットワーク上すべてのファイルはオブジェクトとして管理される。これをOSS (Object Storage System) といい、ファイル等のオブジェクトをUID (Unique Identifier) という一義的識別子で管理する。
 UID
 UIDは64ビットで構成され、以下のフォーマットである。UIDにノードIDが入ることでネットワーク全体を1つのオブジェクトとして容易管理することができた。また、64ビットと短いため、このUID利用したハードリンクなどはネットワークを越えて行うことを容易にした。また、同時にこれがAPOLLO/DOMAINシリーズの独自性を生む原因でもあった。
項目サイズ（ビット）内容生成時刻36オブジェクト生成時刻（4μ秒単位）未使用8将来用の未使用領域ノードID20DOMAINシリーズの機器各1台毎に付いていた機器識別番号
 オブジェクトのページ
 DOMAIN/OSは1024バイトを1ページとして分割し、ディスクブロックに格納する。よってDOMAIN/OSのディスクの1ブロックは1024バイトになっている。
 名前管理
 オブジェクトはUIDで管理されるが、OSSで管理される各マネージャー群で管理するのに使用される。しかし実際にオブジェクトをユーザーが操作する際はパス名で管理される。そこでUIDとパス名を関連付けるネーミング・サーバが存在する。ネーミングサーバは、ネットワークルートを管理するネーミング・サーバ・ヘルパー (NS_HELPER) とディレクトリマネージャのモジュールから構成される。パスネーム-UIDの変換、ディレクトリ管理、ネットワークルートの管理を行う。

 メモリ管理方式 
Domain/OSの特徴と言え、大きな利便性を発揮する裏方の機能としてネットワークワイドシングルレベルストアがある。
OSメモリ管理システムは、大きく分けると以下の種類がある。
ダブルレベル実ストア
ダブルレベル仮想ストア
シングルベルストア
ネットワークワイドシングルベルストア

 ダブルレベル実ストア 
下記のように2段階のストレージ階層化が行われており、
プログラムが直接実行できるプライマリストレージ
プログラムが直接実行できないセカンダリストレージ
ダブルレベル実ストアは、メインメモリのみがプライマリストレージとなっているものをいう。

プログラムの実行には、ファイルシステムにあるプログラムを、一度メモリイメージにし、プライマリストレージにコピーを行うことによって実行可能となる。
さらに、プライマリストレージが、メインメモリのみのため、メインメモリがプログラムの最大実行サイズとなる。
MS-DOS等一昔前のPC-OSがこの方式をとっている。

 ダブルレベル仮想ストア 
下記のように2段階のストレージ階層化が行われており、
プログラムが直接実行できるプライマリストレージ
プログラムが直接実行できないセカンダリストレージ
ダブルレベル仮想ストアは、メインメモリと、DISKのスワップエリアがプライマリストレージとなっているものをいう。

プログラムの実行には、ファイルシステムにあるプログラムを、一度メモリイメージにし、プライマリストレージにコピーを行うことによって実行可能となる。
さらに、プライマリストレージが、メインメモリ＋スワップエリアがプログラムの最大実行サイズとなる。

UNIXやLinux等はこの方式を採用しており、起動を高速化するため、Stickyパーミッションが、存在する。
これは、プログラムのメモリイメージを、プライマリストレージに転送するフラグである。

 シングルレベルストア 
この方式では、ストレージ階層化を行わない。
プライマリストレージは、プライマリストレージが、メインメモリ＋ディスクのフリースペースとなる。
そのため、プライマリストレージは可変長記憶システムとなっている。つまり、実行状況で変化する。

ファイルシステムには、その場所を示す「特別なアドレス」が割り当てられる。
特別なアドレスは、OSにより表現が違うのみで機能的に同一である。

プログラムの実行には、プライマリストレージに、「特別なアドレス」をマップすることで実行される。
このため、プライマリストレージへの転送がないため、実行が高速である。
さらに、スワップエリアを専用で持つ必要がない。

なお、「特別なアドレス」の範囲が機器単体で管理される範囲としている。
Multics (Multiplexed Information and Computing Service) やIBM System/38,AS/400等ではこの方式を採用している。

 ネットワークワイドシングルレベルストア 
基本的に、シングルレベルストアと同じ方式で実行される。
違いは「特別なアドレス」は、オブジェクトアドレス空間と言い、ネットワーク全体を含む96ビットの巨大なアドレス空間をあつかう。
このため、Domain/OSでは、特別な手続きなしに、ネットワーク接続されたすべての機器にあるプログラムを直接実行が可能である。

これにより、ネットワーク全体を1システムととらえ、プログラムリソースを分散できるという強みを持っている。
また、この機能をサポートするため、ネットワークワイド・デマウントページングをサポートしている。

なお、UNIXもOSF（Open software Foundation = IBM, HP, DEC, Apolloによって設立された分散コンピューティング技術の普及を目的として設立された非営利の業界団体）のOS再構築にて、シングルレベルストアへ移行することを計画した。

ただし、実際の製品ではそこまでの改変されていなかった。

 仮想記憶用ページアウトの領域 
一般にUNIXやLinuxはページングという処理でスワップエリア（スワップ用パーティション）へページアウトを行う。

DOMAIN/OS,AEGISはこのようなスワップ用パーティションをもたない。その代わり、ページアウトをディスクのフリーエリアに置く。すなわちDOMAIN/OSおよびAEGISの実行できる最大の領域はそのディスクのフリースペースが仮想エリアサイズである。なお、論理的に実行できる仮想エリアサイズは機種ごとに違い、その機種の仮想アドレス空間サイズが実行可能な論理的サイズである。これは、ハードウェアの進歩とともに変更されるべきものとして扱われていたためである。

仮想アドレスレイアウトは以下のようになっている。
プロセスのレベル名称空間名称用途レベル2プロセスユーザ・プライベート空間実行プログラム、データ等各OSミドルウェア、グローバルライブラリ用レベル1プロセススーパーバイザ・プライベート空間DOMAIN/OSカーネルレベルプロセススーパーバイザ・グローバル空間DOMAIN/OSカーネル、システムデータ

 オブジェクトアドレス空間 
DOMAIN/OSはすべてのオブジェクトを96ビットで表現されるオブジェクトアドレス空間で管理されている。このアドレスは、ネットワークワイドに広がるオブジェクトをページ単位（オフセットも含む）でとり扱える。DOMAIN/OSで管理されているアドレス空間のひとつ。
項目サイズ内容UID64ビットネットワークワイドでオブジェクト区別するための一義的識別子セグメント番号17ビットオブジェクト内でのセグメント番号MST (Mapped Segment Table Manager) が管理するプロセス内仮想メモリの最小単位ページ番号5ビットセグメント内のページ番号オブジェクトを1024バイトのページに分割しており、ディスクブロックにも同様のサイズで管理されるオフセット10ビットページ内でのバイトオフセット

 仮想アドレス
 仮想アドレスは実行時オブジェクトアドレスとのマッピングを行う際に使用される。このアドレス空間は機種によって異なる、それはハードウェアの進歩に応じて変更されている。構成要素は「リージョンインデックス」,「セグメントインデックス」,「ページインデックス」,「バイトオフセット」からなる。DOMAIN/OSで管理されているアドレス空間のひとつ。
 物理アドレス
 ノード内でのメインメモリのアドレス。DOMAIN/OSで管理されているアドレス空間のひとつ。
 ディスクアドレス
 ノードで使用されるディスクのアドレス。DOMAIN/OSで管理されているアドレス空間のひとつ。

 マッピング 
マッピングは、プログラム実行時にオブジェクトアドレスと仮想アドレスの対応付けを行う行為である。

これにより、プログラム実行時にメモリにプログラムプログラム転送を行うのではなくオブジェクトアクセス時にでマウントページング行いページインを行なえるようにする。またこの機能により、利用者はネットワーク中に存在するプログラムやファイルを容易に共有することができる。

このマッピング処理はMST (Mapped Segment Table) マネージャが行う。MSTマネージャは以下の情報をもち仮想アドレスと、オブジェクトアドレスをマッピングする。
UIDセグメント番号
仮想アドレス仮想セグメント番号ページ番号バイトオフセット
オブジェクトアドレスオブジェクトUIDオブジェクトセグメント番号ページ番号バイトオフセット

 ネットワークワイド・デマウントページング 
ページング処理については、ダブルレベル仮想ストアやシングルレベルストアと同じ条件で行われている。

大きな違いは、ネットワークワイドシングルレベルストアであるため、自ノード以外のリモートノードからマッピングを行うことがある。
そのため、ネットワークワイドにデマントページング処理を行う必要がある。

上記機能を実現するため、2つのネット・ページジング・サーバが動作しており、ローカル用とリモート用が動作している。
マッピングされるオブジェクトアドレスには、ノードID情報が含まれており、この値で、自ノードかリモートノードかを判定している。

 グラフィック機能 
グラフィックライブラリを搭載していた。
 GSR (Graphic Service Routine)
 Domain/OSでは最も基礎になるグラフィックサービス。このインターフェースの解説英文のみ存在し、日本語はなかった。Domain/OSで一般的に使われた、グラフィックライブラリ (GPR) の下位ライブラリである。
 GPR (Graphic Primitive Resource)
 Domain/OSで一般的に使われた、グラフィックライブラリで2次元ビットマップ制御機能を搭載する。
 GMR2D (Graphic Metafile Resource 2 Dimension)
 高速グラフィック技術のひとつで、描画命令リスト（ディスプレイリストとも言う）をファイル化し、描画制御を行う方式である。なお、この技術は高速グラフィックディスプレイとホストコンピュータが分かれていた頃の高速描画方法を纏めた方式である。
 GMR3D (Graphic Metafile Resource 3 Dimension)
 上記GMR2Dの3次元バージョン。当時ヒグスという3次元グラフィックの標準規格が検討されて時に、概要モデル参考にアポロコンピュータ独自で完成させたライブラリ。後に他社でもヒグスは搭載されたが、GMR3Dほどの機能・性能は実現されなかった。そしてOSFに技術提供したシリコングラフィックス社のOpenGLが一般的に広がった。
 DOMAINダイアログ
 ユーザインターフェース（メニュー、描画領域確保）とプログラムインターフェースを結合させるコンパイラ兼描画ライブラリ。現在のリソースコンパイラに相当する。

 ディスクレス起動 
 CPUが違ってもディスクレス起動できるアーキテクチャ
 Domain/OSはサポート範囲の機種であれば、CPUやハード構成が違ってもディスクレスでブートが可能であった。ハードウェアの違いはSAU[1〜15]というブート用のディレクトリに歴代機種のブート部分が格納されていた。ネットワーク起動用のサーバ（以下netmanという）と、ブートROM内プログラムの機能で、各種の番号（SAU）を交換することでnetmanから適切なブートプログラムが転送されOSをローディングした。OSをローディングし起動段階で仮想記憶を使う必要がでると、ブートプログラムを提供したコンピュータにネットワークページングリクエストを行い、ネットワークワイドにデマウントページングを行う。それによりディスクレス起動を行うことができる。また、ディスクを搭載する機種でもブートROMレベルのコマンド操作（ニーモニックデバッガと言う）でディスクレス起動を行うことができる。
 ディスクレス起動の利点
 ハードウェア診断に役立つ（起動しなければディスク以外のハードウェア障害と判定）。
 ディスクを搭載する機種でこの操作をおこなうと、OSを起動した状態で本体機種の初期化。OSの再インストールが行えた。
 当時ハードディスクは高価であったので、ディスクレス起動できるワークステーションは魅力であった。

 その他 
 Domain/OSの遺産 
 NCS (Network Computing System) 
ネットワークコンピューティングシステムと呼ばれ、複数分散されたのコンピュータ演算能力を利用し、スーパーコンピュータ級の能力を安く実現しようとする技術。

なお、この技術はネットワークに接続されるコンピュータでデータグラム通信サービスと搭載するものであれば実装できるという柔軟な設計であった。分散OS環境を実装するために、このPRCベースで作成するようである。

AEGIS, DOMAIN/OS以外の環境ではDCE (Distributed Computing Environment) がある。

 実装対象プロトコル
 NCS実装条件は、コネクションレスサービスを提供するプロトコルであれば良い。最初に実装しあプロトコルはDDS（Apollo独自通信方式）、UDP/IPを搭載しているものが対象となった。
 インタフェース定義言語
 コンピュータ間インタフェース定義言語としてNIDL (Network Interface Definition Language) が設計された。NIDLでコンパイルされると、クライアント側で使用するクライアントスタブと呼ばれるコードと、サーバ側で使用するサーバスタブと呼ばれるコードを生成する。さらにそれを利用するための、C言語インクルードファイルとPASCAL言語のインクルードファイルが生成された。この技術は、OMGのCORBAおよびMicrosoft DCOMの基となり、この技術を利用を応用したものとして、OSFが開発したDEC分散ファイルシステムなどがある。HP RPCまたはDEC RPCとは、このNCSのRPC技術である。NIDLは、後のIDL (Interface Definition Language) となった。
 DSEE (Domain Software Engineering Environment)
 開発履歴管理システム
 DOMAIN ダイアログ
 ユーザインターフェースとプログラムインターフェース定義言語で、これは現在のリソースコンパイラの基となった。
 NLS (Network License Server)
 ネットワーク上のソフトウェアライセンス管理するシステム。すでにネットワーク透過な分散環境であったApollo DOMAINの環境ではネットワーク上に1ソフトウェアがあれば、接続されるすべての機種で同時使用が可能であった。そこでソフトウェアライセンスを守る目的で搭載された機能であった。このネットワークライセンスサーバも現在にも機能的拡張されながら引き継がれている。

 脚注 

 外部リンク 
アポロコンピュータ化石館
NCS(Network Computing System)開発秘話？

Category:分散オペレーティングシステム
Category:Unix系オペレーティングシステム