速度を求めモノリシックに近づくWindows
実のところ,Windows NTはマイクロカーネルと呼んで差し支えなかったOSである。バージョン3.1から3.5までは,ウインドウを制御する「USER」,グラフィックス描画の「GDI」,グラフィックス・ドライバにプリンタ・ドライバと,OSのシステム・サービスの一部をユーザーモードで処理していた(図4[拡大表示])。グラフィックス・ドライバは,特権モードで動作する「ミニポート・ドライバ」とユーザーモードで動くデバイス・ドライバ本体に分かれていた。しかしユーザーモードと特権モードにまたがった形でデバイス・ドライバが動作するので,処理速度の面で難があった。特にデスクトップ環境で使うと,ウインドウ描画のオーバーヘッドが目立った。
そこでMicrosoftは,パフォーマンスの向上を狙いWindows NT 4.0のアーキテクチャに変更を施した。グラフィックス・ドライバとプリンタ・ドライバ,ウインドウ・マネージャおよびGDIを,特権モードで動作するように作り替えた。さらにWindows 2000では,ユーザーモードで動作していたサウンド・ドライバが特権モードで動作するようになった。
一連のアーキテクチャ変更の結果,Windows NTはもはやモノリシック・カーネルに近い構造に姿を変えた。そのため,ウインドウ・マネージャとGDI,およびデバイス・ドライバのバグが即OSの停止につながる。Windowsが不安定と言われるのも,このアーキテクチャによる可能性が高い。少々やりすぎといった印象がある*3。例えばUNIX系OSのGUI環境は,ユーザーモードで動作するウインドウ・システム「X Window System」である。このためXが落ちても,OSの停止に至ることはない。
Mac OS Xも脱マイクロカーネル
マイクロカーネルを捨てたもう一つの例がMac OS Xである。Mac OS Xはマイクロカーネルの代名詞とも言うべき存在である「Mach」に基づいている(図5[拡大表示])。しかしMachカーネルだけでなく,UNIX互換OSのFreeBSD 4.4ベースのカーネルとシステム・サービスを組み合わせたモノリシック・カーネルの形態を採っている。FreeBSDに由来するネットワークやセキュリティ機構といったシステム・サービスは,Machカーネルと同じ特権モードで動作する。
ただWindowsと違うのは,「Quartz」と呼ぶグラフィックス関連のライブラリや,ユーザー・インタフェースを提供する「Aqua」をユーザーモードで動作させている点だ。このためQuartzやAquaに障害が起こっても,OS全体が停止してしまうことはない。UNIX系OSと同様に,Mac OS XではGUI関連のシステム・サービスが停止してもカーネルのコンソール画面からウインドウ・システム(ここではQuartz/Aqua)やコマンド実行環境(コマンドシェル)を再起動できる。グラフィックス関連に限れば,高速性よりも安全性を重視した構造になっている。
アプリケーションを取り込むカーネル
このように安定性を犠牲にしてでも性能向上に力を注ぐ傾向は,さらに加速しつつある。利用頻度の高いアプリケーションを,特権モードで動作させてしまうものが出てきたのだ。
具体的にはWebサーバーやファイル・サーバーといった多数のユーザーによる同時アクセスが多発するネットワーク・アプリケーションだ。特権モードで動作するネットワーク・ドライバやTCP/IPのプロトコル・スタックと頻繁に通信するため,こういったアプリケーションではモードの切り替えが頻発する。であればアプリケーション自体を特権モードで動かせば,そのオーバーヘッドがなくなるという考えだ。
例えばMicrosoftのWebサーバー「Internet Information Services(IIS) 6.0」は,Webブラウザなどのクライアントからの要求を受け付けるHTTPエンジンが特権モードで動作する(図6[拡大表示])。この結果,HTTPエンジンとTCP/IPモジュールとの通信でモードの切り替えが発生せず,オーバーヘッドが減少する。HTTPによる通信のほか,キャッシュ機構,帯域制御,およびログファイル生成が特権モードで動作する。コンテンツ生成部はユーザーモードで動作するが一度送出したWebページをキャッシュとして保存しておける。従って,Webサーバーとして実行する処理の多くを特権モードでまかなえる。
IIS 6.0と同様に,米Red Hat社も特権モードで動作するWebサーバー「TUX」を同社のLinuxディストリビューションに組み込んだ。IIS 6.0との違いは,独自のキャッシュ機構を持たない点だ。動的なページの要求を受け付けると,ユーザーモードで動作するデーモンに処理を切り替える。静的なWebページは特権モードで動作するTUXが送出する。