PR

一部システムがユーザー・モードで動作する9x

 Windows 9xのカーネル・モードで実行されるシステム・コードは,デバイス・ドライバやファイル・システムなどのハードウエアに直接アクセスするモジュールだけである(図2の左)。残りはユーザー・モードで動作するようになっており,特に「User」「GDI(Graphics Device Interface)」「Kernel」といったモジュールが,ユーザー・モードで実行される点が問題といえる。

図2●Windows9x系とNT系のアーキテクチャの違い<br>Windows 9xでは,「User」「GDI」「Kernel」などのシステム・コードについても,32ビット・コードと16ビット・コードが存在する。
図2●Windows9x系とNT系のアーキテクチャの違い
Windows 9xでは,「User」「GDI」「Kernel」などのシステム・コードについても,32ビット・コードと16ビット・コードが存在する。
[画像のクリックで拡大表示]

 Userモジュールは,ウインドウやダイアログの表示など,主にユーザー・インターフェースをアプリケーションに提供するものだ。GDIモジュールはグラフィックス描画を提供する。Kernelモジュールは,メモリーやプロセス管理などOSの基本機能を提供する。

 また,Windows 9xは,互換性を維持しながら新しい機能を追加したために,「User」「GDI」「Kernel」のシステム・コードに,16ビット・コードと32ビット・コードが入り交じり,複雑に依存し合っている。そのため,システムに新しい機能を追加することが困難である。

システム・コードをすべて保護するNT系

 これに対してWindows NT系では,「User」「GDI」「Kernel」などのシステム・コードが,カーネル・モードで動作するようになっている(図2の右)。また,アプリケーションは「サブシステム」と呼ぶ仮想システムの上で動作する構造である。

 NT系OSのシステムのうちカーネル・モードで動作する部分は,大きく分けて「エグゼクティブ・サービス」と「HAL(Hardware Abstraction Layer:ハードウエア抽象化層)」に分かれる。エグゼクティブ・サービスの側は,主にデバイス・ドライバやシステムに必要なコードを実装し,HALはハードウエアとの橋渡しを行う。

 HALは,様々なプロセッサやハードウエア上でWindows NTを動作させるために用意された一種のドライバである。Windows NTは,かつてx86プロセッサ以外に,DEC AlphaやMIPS Rシリーズといった複数のプロセッサをサポートしていた。HALのおかげでそれらの違いを吸収することができ,システムは特定のプロセッサやハードウエアを意識する必要がなくなる。

 このようにWindows 9xでは,システムに必要なモジュールの一部がユーザー・モードで動作し,NT系ではカーネル・モードで動作するという違いがある。具体的にはWindows 9xでは,アプリケーションとシステムが共通のメモリー領域を使用するため,アプリケーションのトラブルが,即システムに影響を与えてしまう。しかし,NT系のシステム・コードは,CPUの動作モードにより保護され自由にアクセスされることはないのである。またNT系では,各アプリケーションが別々のサブシステム内で動作するため,あるアプリケーションがクラッシュしても,その被害はサブシステム内にとどめることができる。

 カーネル・モードで動作するプログラムに興味がわいてきた人は,Windows XPのタスク・マネージャをよく見てみよう。ここではCPUの使用率を示すグラフが表示できる。デフォルトではユーザー・モードのプログラムの負荷しか表示しないが,設定すればカーネル・モードによるプログラムのCPU使用率を追加できる。タスク・マネージャで[表示]-[カーネル時間を表示する]を選択するとカーネル・モード・プロセスによるCPU使用率が,赤線で表示される(図3)。

図3●Windows XPのタスク・マネージャ
図3●Windows XPのタスク・マネージャ
タスク・マネージャは,デフォルトではユーザー・モードのプロセスの負荷を表示する。[表示]メニューの[カーネル時間を表示する]を選択すると,カーネル・モード・プロセスによるCPU使用率も表示される。