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とともにリリースされたシリーズDN10000/DPS10000はマルチプロセッサ構成である。
DN10000/DPS10000はRISCプロセッサを4つまで搭載可能であった。
DOMAIN/OSマイクロカーネルの上位にAEGISと当時の2つのUNIX (4.3BSD, SystemV 5.3) を搭載し、同時独立動作したものである。ウィンドウシステムを含め以下の全体をDomain/OSと呼ぶ。
DOMAIN/OSリリース当初はディスプレイマネージャのみでXは搭載していなかったが、SR10.2にバージョンアップ時、標準的に搭載するようになった。
当時のXは、他のUnix環境も取り込むだけのために搭載された経緯が大きく、現在のウィンドウマネージャが搭載されていなかった（現在でもXのウィンドウマネージャの機能を停止させれば似た環境になる）。また、ハードウェア面でもX用のアクセラレータを行っていなかったため非常に遅いという問題を抱えていた。
サン・マイクロシステムズ (SUN) を除く他社では、Xのみがウィンドウシステムであったため、Xの高速化としてX用のアクセラレータを搭載するなどを行っていた。
Apollo社独自のウィンドウシステムに比重を置いていたことと、ディスプレイマネージャが非常に軽いウインドウシステムであったため搭載されることはなかった。その後、別売りでHP-VUE（Motif (GUI) ベースのウィンドウマネージャー）が売られるようになり、Xもある程度まともに操作できる環境は整ったが、起動が遅いこと、別売り（高価）である問題が解決できていなかったこともあり、Xを動作条件するもの以外わざわざXを使用することは少なかった。
結局、Xの動作環境を改善することなくDOMAIN/OSのリリースは終了した。
なお、HP社内ではXにディスプレイマネージャ環境を移植したソフトウェアDMX (HP-UX)、ディスプレイマネージャとXを独立動作させるワークスペース切替など、いろいろと試みがあったようだが、リリースされることはなかった。
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社に吸収されたことで終了した。
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を実現した。
独自にならざるを得なかったのは、ネットワーク環境が現在とは違いTCP/IP（当時仕様策定中）が実装された状態ではないためXNS (Xerox Network System) を手本としこの分散環境を実現したためである。
ただし、この上で実現した分散ファイルシステムはパフォーマンスが高く、100台以上接続してもパフォーマンスがほとんど落ちない優れものであった（この時代としては驚異であった）。
なぜTCP/IPが利用されなかったかは以下の時代背景（簡略版）にある。
APOLLO DOMAINシリーズはリリースが時期尚早すぎたため、分散ファイルシステムをIPベースに実装できなかったのである。
年表上最初のEWSとしているが、それ以前にワークステーションおよび現在のPCの原型と言える機種は存在した。
それは、1974年に開発されたゼロックス社のAltoである。エンジェルバートが発明したマウスを使用し、世界初のビットマップ・ディスプレイ、世界初のイーサネット、世界初のレーザプリンタが接続されていた（その当時はEWSと言う区分けはなかった）。
ちなみに、ゼロックスのパロアルト研究所PARC (Palo Alto Research Center) は、「マウス」、「アイコン」、「グラフィカルユーザインターフェース (GUI)」、「ウインドウシステム」、「イーサネット」、「レーザープリンター」、「PostScript」などを開発している。
なお、分散OSおよび分散ファイルシステムではAEGISが世界初のOSである。
Apollo社はApple社とのパートナーシップを結んでいた。Domain/OS を実行するワークステーション系列に Mac デスクトップを移植する作業を行っていたが、スティーブ・ジョブズ (Steven Paul Jobs) がApple社を離れると、後任のジャン＝ルイ・ガセー（Jean-Louis Gassée)によりこの契約を解除された。この開発に投資していたApollo社にとっては大打撃となった。従来のディスプレイマネージャとXを同時に動作させることができた。ここではディスプレイマネージャについて説明する。環境変数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) という一義的識別子で管理する。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の実行できる最大の領域はそのディスクのフリースペースが仮想エリアサイズである。なお、論理的に実行できる仮想エリアサイズは機種ごとに違い、その機種の仮想アドレス空間サイズが実行可能な論理的サイズである。これは、ハードウェアの進歩とともに変更されるべきものとして扱われていたためである。
仮想アドレスレイアウトは以下のようになっている。
DOMAIN/OSはすべてのオブジェクトを96ビットで表現されるオブジェクトアドレス空間で管理されている。このアドレスは、ネットワークワイドに広がるオブジェクトをページ単位（オフセットも含む）でとり扱える。DOMAIN/OSで管理されているアドレス空間のひとつ。
マッピングは、プログラム実行時にオブジェクトアドレスと仮想アドレスの対応付けを行う行為である。
これにより、プログラム実行時にメモリにプログラムプログラム転送を行うのではなくオブジェクトアクセス時にでマウントページング行いページインを行なえるようにする。またこの機能により、利用者はネットワーク中に存在するプログラムやファイルを容易に共有することができる。
このマッピング処理はMST (Mapped Segment Table) マネージャが行う。MSTマネージャは以下の情報をもち仮想アドレスと、オブジェクトアドレスをマッピングする。
ページング処理については、ダブルレベル仮想ストアやシングルレベルストアと同じ条件で行われている。
大きな違いは、ネットワークワイドシングルレベルストアであるため、自ノード以外のリモートノードからマッピングを行うことがある。
そのため、ネットワークワイドにデマントページング処理を行う必要がある。
上記機能を実現するため、2つのネット・ページジング・サーバが動作しており、ローカル用とリモート用が動作している。
マッピングされるオブジェクトアドレスには、ノードID情報が含まれており、この値で、自ノードかリモートノードかを判定している。
グラフィックライブラリを搭載していた。ネットワークコンピューティングシステムと呼ばれ、複数分散されたのコンピュータ演算能力を利用し、スーパーコンピュータ級の能力を安く実現しようとする技術。
なお、この技術はネットワークに接続されるコンピュータでデータグラム通信サービスと搭載するものであれば実装できるという柔軟な設計であった。分散OS環境を実装するために、このPRCベースで作成するようである。
AEGIS, DOMAIN/OS以外の環境ではDCE (Distributed Computing Environment) がある。