特集
Windows 9x or Windows 2000?

4.Windows 2000カーネルの概要(2)

デジタルアドバンテージ
2000/07/18


カーネル モード コンポーネントの概要

 次はカーネル モード コンポーネントに話題を移そう。前ページでもご紹介しているが、便宜上、再度図「Windows 2000カーネルの構成」を示す。

クリックすると図が拡大表示されます

Windows 2000カーネルの構成

カーネル モード コンポーネントは、Executive(エグゼクティブ)とHAL(Hardware Abstraction Layer)の大きく2つに分類することができる。このうち「HAL」は、特定ハードウェアの違いを吸収して抽象化する働きを持ち、上位のExecutiveに対してハードウェアを制御するためのインターフェイスを提供する。そしてWindows 2000カーネルとしての各種システム サービスを実現するのがExecutiveである。

 本稿の冒頭で述べたとおり、Windows 2000カーネルの設計目標の1つは、移り変わりの激しい市場のニーズにも柔軟に応えられる拡張性と、さまざまなプラットフォームへの移植性を両立させることだった。このためWindows 2000カーネルの設計では、内部のコンポーネント化とレイヤ化が徹底して行なわれ、特定ハードウェアに依存する部分を独立したコンポーネントとしてひとまとまりにし、さらにOSの汎用的な要素と、特定のOSを特徴づける部分をも分離・階層化することで、移植性が高く、柔軟性の高いOSカーネルを実現した。

 この過程では、マイクロカーネル(OS内部処理の機能モジュール化を進め、カーネル部分の機能を必要最小限に限定し、各種のサービスはクライアント/サーバ方式で実装する)の技術や、オブジェクト指向の技術(データと、それらのデータを処理するためのプログラム コードの双方を内包する独立したデータ モジュールをコンポーネントとする技術)も活かされている。ただしWindows 2000は、研究を目的とするものではなく、あくまで実用環境として市販されるOSであるため、最終的には、性能向上のために、こうした論理構成を一部崩している部分もある(チューニング フェーズでは、ときとして論理構造を破壊する必要に迫られるものだ)。

 カーネル モード コンポーネントは、Executive(エグゼクティブ)とHAL(Hardware Abstraction Layer)の大きく2つに分類することができる。このうち「HAL」は、特定ハードウェアの違いを吸収して抽象化する働きを持ち、上位のExecutiveに対してハードウェアを制御するためのインターフェイスを提供する。そしてWindows 2000カーネルとしての各種システム サービスを実現するのがExecutiveである。各アプリケーションからの要求は、サブシステムによってExecutive API呼び出しに代えられ、Executiveに届けられることになる。

Executiveの上位コンポーネント

 Executiveの実体は、%windir%system32\ntoskrnl.exeというファイルである。図「Windows 2000カーネルの構成」から分かるとおり、Executiveの内部は、各種のカーネル サービスを提供するコンポーネントに分離されている。

■I/Oマネージャ
 I/Oマネージャは、ディスクI/OやネットワークI/Oなど、Windows 2000における入出力を統合的に管理するコンポーネントである。I/Oマネージャの内部はさらに小さなコンポーネントに分かれており、それらが階層構造をなしている(図「Windows 2000カーネルの構成」)。

 I/Oマネージャの中で最も下位に位置しているのは、ハードウェアを制御するデバイス ドライバ(図の「ハードウェア デバイス ドライバ」と「ネットワーク デバイス ドライバ」)である。ハードディスクやCD-ROMドライブなど、特定のデバイスに依存した違いはこのデバイス ドライバによって吸収され、デバイスに依存しないインターフェイスが上位コンポーネントに提供される。このため上位のコンポーネント(ファイル システム ドライバ)は、それがディスクなのか、ネットワークなのかを意識することなく、抽象化されたブロックI/Oとして、さまざまなデバイスを扱うことが可能だ。このような構成になっているため、デバイス ドライバさえ用意すれば、新しいデバイスやネットワーク プロトコルに対応することが容易になる。Windows 2000に標準で提供されるファイル システム ドライバとしては、FAT、NTFS、CDFS(CD-ROM File System。ISO9660準拠のCD-ROM用)、UDF(Universal Disk Format)がある。

 上位ソフトウェアから見て、I/Oマネージャ内の最上位に位置しているのは「キャッシュ マネージャ」である。キャッシュ マネージャは、ファイルI/Oの速度を高速化するために、ハードディスクやネットワークI/Oシステム全体に対するファイル入出力を監視し、キャッシュ機能を提供する。こうしてキャッシュに存在するデータに対する読み出しについては、遅いディスクにアクセスすることなくキャッシュの内容を返し、書き込みについては高速なキャッシュへの書き込みを終えるとすぐに制御を返し、バックグラウンドでキャッシュ内容のディスクへのフラッシュを行う(この機能は「遅延書き込み」と呼ばれる)。

■オブジェクト マネージャ
 前述したとおり、Executive内部では、各コンポーネントの独立性を高め、抽象化を進めるために、オブジェクト指向の技術が活かされている。このためExecutive内でのオブジェクトの生成や管理、削除などを司るのがオブジェクト マネージャの働きである。具体的なオブジェクトとしては、プロセスやスレッド、セマフォ、オブジェクト型、イベント、ポートなどがある。

■セキュリティ リファレンス モニタ
 ローカル セキュリティ ポリシーに従って、オブジェクトに対するアクセス権の検査や監査メッセージの生成などを行う。

■プロセス マネージャ
 プロセスの生成と終了、およびプロセス オブジェクトやスレッド オブジェクトのトラッキングを受け持つ。ユーザー モードにある上位の各サブシステムは、このプロセス マネージャが提供するサービスを利用することで、プロセスやスレッドの生成や利用が行えるようになる。

 プロセス マネージャは、前出のセキュリティ リファレンス モニタと協調し、あるプロセス内のスレッドが保護されたオブジェクトにアクセスする場合には、プロセスに正しいアクセス権が与えられているかを検査することで、プロセス間通信におけるセキュリティ機能を維持できるようにしている。

■LPC(Local Procedure Call)
 すでに述べたとおり、Windows 2000上で実行されるアプリケーションと環境サブシステムは、クライアントとサーバの関係にあり、両者の間でメッセージを交換することで、アプリケーションからサブシステムへの要求や、それに対する応答をやり取りできるようにしている。こうしたアプリケーションと環境サブシステムの通信メカニズムを提供するのがLPCである。ただしLPCがサポートするのは、同一コンピュータ内での通信のみで、ネットワーク環境でのサーバ・クライアント通信にはRPC(Remote Procedure Call)が使用される。

■仮想メモリ マネージャ
 Windows 2000の仮想メモリ システムを管理するコンポーネント。この仮想メモリ マネージャの働きにより、Windows 2000上で実行される各プロセスは、4Gbytes(32bit)という広大な仮想メモリ空間を利用できるようになる。

■ウィンドウ マネージャ/GDI
 ウィンドウ マネージャは、ウィンドウの生成や表示、ウィンドウの移動やサイズ変更などを管理するコンポーネントで、ユーザー インターフェイスを司ることから、一般にはUSERコンポーネントなどと呼ばれる場合もある。またGDI(Graphics Device Interface)はその名のとおり、グラフィックス描画を司るコンポーネントである。

 これらのコンポーネントは、Windows NT 4.0以前には、ユーザー モードで実行されるWin32サブシステム内部に存在していたが、主にパフォーマンス向上を目的として、Windows NT 4.0からはカーネル モードで実行されるExecutiveコンポーネントに変更された。

■グラフィックス デバイス ドライバ
 上述のGDIコンポーネントが、実際のグラフィックス デバイスに対する描画処理を行うためのインターフェイスを提供するのがこのグラフィックス デバイス ドライバである。具体的には、ディスプレイ表示を行うためのグラフィックス カード ドライバ、プリンタ出力を行うためのプリンタ ドライバ、FAX送信を行うためのFAXドライバがある。

マイクロカーネル

 マイクロカーネルは、HALの直上にあり、Windows 2000カーネルの最も基本的な処理を行うコンポーネントである。具体的には、スレッドのスケジューリングや割り込みおよび例外の処理などを行う。

 Windows 2000がマルチプロセッサ システムをサポートすることはすでに述べたが、このようなマルチプロセッサ システムにおいて、効率よく(各プロセッサをなるべく休ませることなく)スレッドをディスパッチし(割り当て)、各プロセッサ間での同期処理を行うのもマイクロカーネルの役割である。

 またマイクロカーネルは、Executive内の各サービス コンポーネント(I/Oマネージャやプロセス マネージャなど)間での同期処理も行う。

HAL(Hardware Abstraction Layer)

 異なるハードウェア プラットフォーム間での移植性を高めるために、ハードウェアの抽象化を行うのがHALの役割である。具体的には、I/Oインターフェイスや割り込みコントローラ、マルチプロセッサ システムにおけるプロセッサ間での通信メカニズムなどを制御する。Executiveの上位コンポーネントは、HALが提供するカーネル モード ライブラリを使用してハードウェアを操作する。こうしてHALは、特定のプラットフォームに依存するハードウェアの特徴をExecutiveの上位コンポーネントから隠蔽する。

 Windows 2000のインストール用CD-ROMには、単一プロセッサ システム向けのHALやマルチ プロセッサ システム向けのHAL、ACPI(電源管理機能)を使うHAL、使わないHALなど、標準でも複数のHALが提供されており、インストール時にこれらの中から最適なものが選択される。なお必要なら、セットアップ時に手動でHALを選択したり、システムのインストール後にHALを交換したりすることも可能である(具体的な方法については、別稿の「Windows TIPS:Windows 2000で選択可能なHALのシステム タイプ」、「Windows TIPS:システムが現在使用しているHALを確認する方法」、「Windows TIPS:インストール時に強制的にシステム タイプを指定する方法」を参照のこと)。

Windows 2000のインストール時に選択可能なHALのシステム タイプ
インストーラの起動時にF5キーを押していると、このようにシステム タイプを自分で選択するための画面が表示される。ここで希望するシステムタイプを選択することができる。この画面を表示させるためのメッセージなどは表示されないので、タイミングを図ってF5キーを押し続ける必要がある。
  カーソル移動キーの上/下を押すことで、選択項目を変更できる。スクロール バーはないが、上下に別の項目が隠れているので注意。

関連記事(Windows Insider内)
Windows 2000で選択可能なHALのシステム タイプ
システムが現在使用しているHALを確認する方法
インストール時に強制的にシステム タイプを指定する方法
 

 INDEX
  [特集]Windows 9x or Windows 2000?
     1.イントロダクション
     2.Windows 9xカーネルの概要
      コラム:Windows歴史、メモリの歴史 (1)
      コラム:Windows歴史、メモリの歴史 (2)
     3.Windows 2000カーネルの概要 (1)
   4.Windows 2000カーネルの概要 (2)
     5.プロセス管理の概要
     コラム:Windows 3.xのマルチタスク システム
     6.Windows 9xのプロセス管理メカニズム (1)
     7.Windows 9xのプロセス管理メカニズム (2)
     8.Windows 2000のプロセス管理メカニズム (1)
     9.Windows 2000のプロセス管理メカニズム (2)
 
 特集


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間