Real-Time Mach はマイクロカーネルアーキテクチャに基づいた リアルタイム・オペレーティングシステム(OS)です. いわゆる組み込み型コンピュータ(embedded computer)からワークステーションまで, ハードリアルタイムアプリケーションからソフトリアルタイムアプリケーションまで, 幅広い要求に応えることができる分散リアルタイム OS ファミリの提供を目指しています.
Real-Time Mach を使うと,
割り込み応答時間のみを追及したリアルタイムOSでは, 優先度逆転現象によって最高優先度のプロセスが低優先度のプロセスによって ブロックされることがあります. これは,緊急時における処理が不可能となり得ることを意味しています. すなわち,ハードリアルタイムシステムで必要な predictability がありません. Real-Time Mach は,このようなことを防ぐことを目指しています. NASAで打ち上げたマーズパスファインダーが火星上で制御不能となる事故があり, ソフトウェアのバグと報じられていましたが, これは優先度逆転現象によって引き起こされたものです.
Real-Time Mach では, さまざまなスケジューリングポリシが選択可能なリアルタイムスケジューラとともに, このような優先度逆転を起こさないように工夫された同期制御機構を備えています. また,ハードリアルタイムシステム向けのツールとして Scheduler 1-2-3 と ARM を備えています. Scheduler 1-2-3 は, アプリケーション設計時に スレッドセットがスケジュール可能かを検証するツールです. ARM は,リアルタイムアプリケーション走行中にリアルタイムにイベントを収集し, タイミングを検証するためのツールです.
予測可能性を向上させるためには, スケジューラや同期制御機構以外での工夫も必要です. Real-Time Mach では, 指定されたメモリ領域をページアウトしないようにしたり (メモリのワイアリングをしたり), キャッシュメモリを制御したり, メモリ領域を予め確保したり, メモリの利用状況に応じてワイアリングをしたり することができます. また,Real-Time Mach ファミリの一員には メモリベースのファイルシステム, リアルタイムプロトコル処理システム, ディスク帯域幅制御システム, ネットワーク帯域幅制御システム, メモリへの自動圧縮ページインページアウトシステム などがあり, その目的に応じて,予測可能性を向上させるために利用することができます.
さて,UN*X流のOSのような公平を目指した資源管理では, 優先度の低いプロセスが資源を食いつぶすことで 優先度の高いプロセスへのサービスをほぼ不能とすることができます. これは,いわゆる Denial of Service が容易におきることを意味しています. Real-Time Mach では, 様々な資源を予約メカニズムを提供しており, これを利用することで特定のプロセスに対して資源を確保し, 必要な資源が食いつぶされないようにすることが可能となっています.
Real-Time Mach はマイクロカーネルアーキテクチャを採用しているため, OS環境を提供するサーバを自由に交換することができます. つまり,開発時にはフルの 4.4BSD 環境を利用し, 実行時にはメモリベースのコンパクトなシステムを利用する, 逆に,分散共有メモリやパラレルシェルを利用したPCクラスタを利用する, といったことが可能です.
Real-Time Mach は様々なアーキテクチャのコンピュータで動作しますが, 最も簡単に利用できるのは i386 以上を用いた PC/AT 互換機です. PCCard もサポートしていますので,ノートPCでも動きます.
欠点もないわけではありません. サポートしているデバイスがLinuxやFreeBSDに比べて少ない, BSDシステムとして利用したときにモノリシックカーネルシステムに比べて重い, という点があげられます.
マイクロカーネルアーキテクチャとは,OSを
マイクロカーネルアーキテクチャはモノリシックカーネルアーキテクチャに比べると,
マイクロカーネルだけではセルフコンパイルはできませんし, プログラムをロードするだけでも大変なことが多いです. このため, ほとんどのマイクロカーネルアーキテクチャをとるOSでは, Un*x personality を実現するシステムサーバを用意しています.
Real-Time Mach マイクロカーネル は Mach 3.0 マイクロカーネル に対してリアルタイム機能や資源予約機構などの新しい機能を加えたものです. Mach 3.0 にリアルタイム機能を加えたことから, RT-Mach 3.0 とも呼ばれることもありますし, 単に RT-Mach と呼ばれることもあります. また,最近は資源予約機能を主な売りとしているため, Carnegie-Mellon University (CMU) の開発グループでは Resource Kernel とも呼んでいます. 現在配布されているバージョンは, CMU で開発されたものをもとに 慶應義塾大学 MKng プロジェクト で開発したもの, それをもとにさらに CMU で改良を加えたものなどがあります. JAIST でも盛んに改良が行われており, 主要なものは MKng プロジェクトの成果にマージされています. NTT で開発した機能は MKng プロジェクトの成果にマージされていますが, さらに改良したもの(FreeBSD 2.2.8R 対応とインストーラの導入など)を公開 しています.
これには,
以前の CMU 版 RT-Mach 上で安定して動くのは,UX, POE, RTS でした. UX はフルの4.3BSDの機能を持っていますが,BSDのライセンスがないと入手できません. 一方,POE はライセンスフリーですが, 単独ではネットワークは使えませんし, ファイルシステムへの書き込みもできません. 固定的な応用でプログラムをブートするときに用いたり, 自分用の OS personality server を作成するときのスケルトンとして用いられています. もちろん,x-kernel を同時に動かせば TCP/IP の処理はできます. だからといって telnet とかがすぐに使えるようになる訳ではありませんが.
POE と UX は同時に動作するようになっており, UX から POE を立ち上げたり, POE から UX を立ち上げたりして, UX の世界と POE の世界をひとつのマイクロカーネル上に同時につくることが可能です. POE は同時に複数立ち上げても大丈夫です. マルチパーソナリティシステムとかOSをユーザレベルでデバッグするとかの実験ができます. もちろん,ディスクを分ければ,UX を複数同時に立ち上げることも可能で, たとえば,UX から gdb を立ち上げ,そのなかから UX を立ち上げてデバッグをする ということもできます.
Lites は 4.4BSD Lite の機能をフル実装しており,ライセンスフリーです. これは,Mach 4 用の部分しか保守されていなかったので,木原誠司氏他が Lites を Mach 3.0 や RT-Mach へのポーティングしました. また,MKngプロジェクトにおいてもたくさんの改良がなされ, 安定して動くようになりました. ただ,UXに比べてパフォーマンスが悪い点が気になります. これは RT-Mach へのポーティングの仕方が悪いのではなく, Lites のもともとの設計が良くないのかもしれません. 現在の RT-Mach では,Lites をメインの OS personality server として用いています.
Lites から Lites を 2nd OS server として そのまま立ち上げることができるようになっています. この場合,stdin/stdout が Lites のコンソールになりますので, xterm を開いて,そこで 2nd Lites を起動することもできます. もちろん,ディスク(またはディスクスライス)を別にしないと, ファイルシステムが壊れてしまいますが.
RTSはリアルタイム処理向けの OS personality で,ライセンスフリーです. Un*x と似た機能を提供していますが, ファイルシステムはメモリベースとなっています. RTS はマイクロカーネルと予めリンクして利用するのが一般的です.
Real-Time Java server が RT-Mach マイクロカーネルの上で動きます. RT-Java はマイクロカーネルと予めリンクして利用するのが一般的です. 筆者は動かしたことがないので,これ以上のことはわかりません.
DOSサーバです.最近の RT-Mach マイクロカーネルの上で動くかどうかはわかりません.
US とは 4.3 BSD ベースのマルチサーバです. これまで紹介した personality server はシングルサーバで, 単一のプログラム(というか,プロセス,というか,タスク)で ひとつの personality を実現していますが, US は複数のサーバで Un*x personality を実現しています. マルチサーバとすることで, OS の機能の一部分を取り替えたり,追加したり, モノリシックカーネルにモジュールをロードする方法ではできない 様々なおもしろいことができます.
パフォーマンス的には UX と遜色のない結果が出ているそうです. なお,US 全体を入手するためには BSD ライセンスが必要です. ライセンスフリーでないファイルを取り除いたものがフリーに配布されていますが, このままではコンパイルできません. 欠けている部分を補うのはかなり大変な作業になると思います.
GNU Hurd はマルチサーバで実現されています. GNU Hurd は GNU Mach 特有のインターフェースを使っていないようなので RT-Mach でも動きます. Hurd のカーネルである GNU Mach と RT-Mach の違いには次のものがあります.
現在分かっている大きな問題は,setuid され(もしくは,オーナが root で設定されたトランスレータで), かつ,ダイナミックリンクされたプログラムのうち,libnss_*.so をダイナミックにロードするプログラムが動かないという点です. libc.so から libnss_*.so をダイナミックにロードするところがうまく動かないようです. これを回避するには,
ちなみに GNU Mach は U. of Utah の Mach 4 から派生したもので, さらに Mach 4 は Mach 3.0 から派生したものです. Mach 4 は migrating thread, つまり,RPC をするとサーバにスレッドが移動するというモデルもサポートしています. これは Georgia Tech の Clouds や Georgia Tech の人たちが CMU に移ってから作った Alpha Kernel の流儀のスレッドモデルですね.
MKng プロジェクトの活躍で RT-Mach が動作する環境はだいぶよくなりました. サポートしている CPU としては, Intel i386 系, MIPS R3000, R4000, R5000 系, Super SPARC, PPC 603, 604(?) などがあります. Mach 3.0 では 68k, 88k, Alpha などでも動いていたので, それらへのポーティングは難しくないと思います. 具体的には,
これらのコードを入手したい場合には, 我々の RT-Mach のホームページをご参照下さい. 現在配布中の RT-Mach は,全てライセンスフリーとなっています.
最も簡単に RT-Mach を利用するためには, FreeBSD 2.2.8R がインストールされた PC に RT-Mach NR2 のバイナリパッケージを pkg_add することです. もちろん,両者がマージされたディストリビューションを使って, PC に FreeBSD 2.2.8R もろともインストールしてしまうのもいいでしょう. これらをゲットする方法も ここをどうぞ. これらは基本的に PC アーキテクチャ用ですが, それ以外のソースコードも入っています.
NTTでなされたカーネル拡張,バグ修正,ST-II Protocol Server 等は 上記のコードにマージされています.
Satoshi Moriai / 盛合 敏
$Id: intro-j.html,v 1.22 2006/07/19 10:57:15 kihara Exp $