OS omicronV4 - oraccha/omicron GitHub Wiki
OS/omicron Version 4
OmicronTiki では V4 と言えば IPv4 ではなく,OS/omicronV4.
ウィンドウシステム未の実行画面.プレゼンツール,Webブラウザ,ファイルビューア,テキストエディタなど.
MPEGプレイヤ,モジュールビューア,ターミナル,Wabaなど.
私が研究室に配属になって最初に関ったプロジェクト.あちこちに書き散らしてきたけど,少しまとめておこう.
マルチメディアデータを含むハイパテキストのように,複雑な関連性を持つ非定型なデータを操作するためのプログラム実行環境を実現するために,動的な機能拡張,構成変更を提供する OS として設計された.
- う〜む...
データオブジェクトはフラットなメモリ空間上に配置され,すべてのスレッドから共有される.データオブジェクトはそれぞれ OOP のクラスに相当するような属性を持っている.デバイスもメモリとしてマッピングされる.
そして,オブジェクトに対するメソッド実行環境として OSパーソナリティ(例えば Unix サーバとか)だけではなく,スクリプト言語のインタプリタやバイトコードインタプリタも一種の仮想マシンとして提供する.つまり,通常の層構造が垂直型のアプローチだとすると,水平型のアプローチを取っているとも言える.捕捉しておけば,OSパーソナリティは言語 C 仮想マシンと捉えることができる.
V4 の実装はマイクロカーネル,ダイナミックリンカ,オブジェクト管理部などのシステムモジュールと,OSパーソナリティ,ウィンドウシステム,プロトコルスタックなどのサーバ,モジュール群から構成される.
データオブジェクトの共有を容易にするため,64ビット単一アドレス空間とセグメント化ページングを提供しており,デバイスやデータオブジェクトなど,すべての資源はオブジェクト管理部によって仮想アドレス空間にマッピングされる(ワンレベルストア).オブジェクトへのアクセスはフォールトとしてオブジェクト管理部に通知され,オブジェクトの各属性に応じた処理(ハンドラ)が実行される.
- Mach の外部ページャに近い?
- Unix では VFS としてファイルレベルでインタフェースの共通化が行なわれているが,V4 のオブジェクト管理部ではメモリマッピングというより低レベルな抽象化を提供しており,属性ごとにフォールトに対するハンドラを登録することになる.
- このメモリマッピングオブジェクトに対するメソッドは最初に述べた仮想マシン上で実行される.実装言語非依存なインタフェースを提供するために IDL を利用する.
さらにモジュール間のバインディングはダイナミックリンカによって実行時に解決される.V4 ではモジュールの動的結合に必要な情報である識別子名,型情報,実際のアドレス,属性を言語処理系とは独立したリンケージテーブルとして出力している. そして,ある外部識別子を参照した場合,リンケージフォールトが発生し,ダイナミックリンカによりリンケージテーブル経由で名前空間からモジュールが検索され,参照が解決される.
- C コンパイラ(CAT)はコード,データセグメントなどとは別にリンケージセグメントを出力する.(→オブジェクトモジュールフォーマット)
- リンケージテーブルによる間接参照が基本なので,スタブルーチンを挟んだりすることも容易である.
- 名前空間はシステムで一意.イメージとしてはオブジェクト指向データベースが一番近いと思う.