|
micro kernel
従来のOSでは、カーネル内部に置かれていたような数多くのサービスを、なるべくカーネル内部から分離/独立させて、カーネル部分のサイズを可能なかぎり縮小したOS。 従来のOSでは、割り込みサービスルーチンや仮想記憶管理、ファイルシステムサービス、デバイスアクセス、セキュリティシステム、ネットワークコードなど、非常に多くのサービス(システムコール)がカーネル内部に置かれており、さらにそれらの各サービスモジュール間が複雑に連携するという、渾然一体とした構造になっていることが多かった。これに対しマイクロカーネルでは、これらサービスモジュールを整理し、カーネルから独立したユーザープロセスとして動作するサブシステムとして実装し直している。 カーネル内部には必要最小限の機能として、メモリ管理、プロセス/スレッド管理、プロセス間通信機能、デバイスドライバインターフェイス、割り込み/例外処理、ハードウェア依存部分とのインターフェイス程度しか用意しない。アプリケーションプログラムでシステムコールを発行すると、制御はいったんはカーネル内部へ移るが、実際のサービスはカーネルからサブシステムに対してプロセス間呼び出しを使って行なわれる。つまり、従来の各種OSサービスは、クライアント/サーバ型モデルとして処理されることになる。 サブシステムをユーザープロセスとして実装するため、プログラムコードのバグなどによってサブシステムがクラッシュしても、システム全体には被害がおよばないし、マルチプロセッサ環境ならばサブシステムプロセスが複数のプロセッサ上で分散実行されるので、システム全体のパフォーマンスをあげげることができる(従来は、カーネル内部がマルチスレッド化されておらず、カーネルコードは特定の1プロセッサでのみしか動作しないというOSも多かった)。また、各種サービスがサブシステムとして分離しているので、新しいサービスやOS機能の追加も行ないやすい、という特徴を持つ。 マイクロカーネル技術を使ったOSとしては、CMU(カーネギーメロン大学)のMach OSやWindows NTなどが有名である。 ただしOSをマイクロカーネル化すると、サブシステム間での呼び出しや、カーネルモードとユーザモード間の遷移のオーバーヘッドなどのために、従来の一体型のカーネルに比べると若干パフォーマンスが低下する。そのためWindows NTでは、カーネルモードにNT Executiveという中間的な層を設け、サブシステム呼び出し時のコンテキスト切り換えを抑える工夫をして、パフォーマンス低下をある程度補っている。
|