図4●米Microsoft社のWindows NT系OSのアーキテクチャの移り変わり
1993年に出荷した初期のバージョンでは,ウインドウ制御を司る「ウインドウ・マネージャ」とグラフィックス描画を司る「GDI」がユーザーモードで動作していた。1996年に出荷したWindows NT 4.0以降では,処理性能の不満の声が高かったことから両者を特権モードに移している。
図5●米Apple Computer社のMac OS Xのアーキテクチャ
米カーネギ・メロン大学のマイクロカーネル「Mach」と,UNIX互換のモノリシック・カーネル「FreeBSD 4.4」を組み合わせている。ウインドウ制御はユーザーモードで処理しているため,ウインドウ・マネージャに障害が起こってもOS全体が停止することはない。
図6●MicrosoftのWebサーバー「Internet InformationServices(IIS) 6.0」のアーキテクチャ
Windows 2000が備える旧版IIS 5.0では,HTTPエンジンはユーザーモードで動作していた。IIS 6.0では,特権モードで動作する。

速度を求めモノリシックに近づく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が送出する。

(高橋 秀和)