BOOK Preview インサイドMicrosoft Windows 第4版 上 第2章 システムアーキテクチャ 2.4.2 Ntdll.dll 書籍情報のページ 2005/08/19 |
|
2.4.2 Ntdll.dll
Ntdll.dllは、サブシステムDLLを使用するための関数を提供する特殊なサポートライブラリです。このライブラリに含まれる関数は、次の2つのタイプにわかれます。
-
Windowsエグゼキュティブシステムサービスを呼び出すシステムサービスディスパッチスタブ
-
サブシステム、サブシステムDLL、および他のネイティブイメージが使用する内部サポート関数
第1タイプの関数は、ユーザーモードから呼び出すことができるWindowsエグゼキュティブサービスへのインターフェイスを提供します。NtCreateFileやNtSetEventなどの関数をはじめとする200個以上の関数があります。既に触れたように、これらの関数の機能のほとんどは、Windows APIから間接的にアクセスできます(つまり、オペレーティングシステム内部で使用されます)。
Ntdllは、第1タイプの関数と同名のエントリポイントを用意し、個々の関数へのアクセスを可能にしています。関数内のコードは、アーキテクチャ固有の命令で構成され、(第3章で詳述する)システムサービスディスパッチャを起動するために、ユーザーモードからカーネルモードへの遷移を発生させます。ディスパッチャはパラメータをチェックし、Ntoskrnl.exe内部の実際のコードを含んでいるカーネルモードシステムサービスを呼び出します。
Ntdllはまた、汎用ランタイムライブラリルーチン(Rtlで始まる関数)、イメージローダ(Ldrで始まる関数)、ヒープマネージャ、Windowsサブシステムプロセス通信関数(Csrで始まる関数)など、多くのサポート関数を提供しています。さらに、ユーザーモード非同期プロシージャコール(APC)ディスパッチャと例外ディスパッチャも提供しています。APCと例外については、第3章で取り上げます。
2.4.3 エグゼキュティブ
WindowsエグゼキュティブはNtoskrnl.exeの上位層です。この上位層は、次のようなタイプの関数を提供しています。
-
ユーザーモードから呼び出し可能なエクスポート関数 ― これらの関数は、システムサービスと呼ばれ、Ntdll経由でエクスポートされます。サービスのほとんどは、Windows APIか他の環境サブシステムのAPIを通してアクセスできます。しかし、2、3のサービスは、公開サブシステム関数経由では利用できません(たとえば、LPC関連関数、NtQueryInformationProcessなどの問い合わせ関数、あるいはNtCreatePagingFileなどの特殊関数など)。
-
DeviceIoControl関数経由で呼び出されるデバイスドライバ関数 ― DeviceIoControl関数は、ユーザーモードからカーネルモード機能を呼び出すためのインターフェイスを提供しています。つまり、この関数を使用すれば、読み書きを伴わないデバイスドライバ関数を呼び出すことができます。
-
カーネルモードからのみ呼び出すことができる公開関数 ― これらの関数は、Windows DDKやWindowsインストーラファイルシステム(IFS)キット内に公開され、エクスポートされています。IFSに関する詳細については、www.microsoft.com/whdc/ddk/ifskit/を参照してください。
-
カーネルモードからのみ呼び出すことができる非公開関数 ― これらの関数は、Windows DDKやWindowsインストーラファイルシステム(IFS)キット内からエクスポートされていますが、公開されているわけではありません(たとえば、Inbvで始まるブートビデオドライバが呼び出す関数など)。
-
グローバルシンボルとして定義されていてもエクスポートされない関数 ― これらの関数は、Ntoskrnl内部で呼び出される内部サポート関数です(たとえば、IopやMiで始まる関数)。
-
グローバルシンボルとして定義されていないモジュール内で使用される関数 ― エグゼキュティブは、次のような主要なコンポーネントで構成されています。個々のコンポーネントの詳しい説明は、後続の関連する各章で行います。
-
構成マネージャ ― このコンポーネントは、システムレジストリを実装管理する機能を提供します。詳細については第4章で取り上げます。
-
プロセス/スレッドマネージャ ― このコンポーネントは、プロセスとスレッドを生成消滅する機能を提供しています。詳細については第6章で取り上げます。プロセスとスレッドの低レベル実体はWindowsカーネルで実装され、エグゼキュティブはカーネル実装に意味と機能を追加しています。
-
セキュリティ参照モニタ(SRM) ― SRMコンポーネントは、ローカルコンピュータ上のセキュリティポリシーを適用します。詳細については第8章で取り上げます。基本的には、オペレーティングシステムリソースを守り、ランタイムオブジェクトの保護と監査を担当しています。
-
I/Oマネージャ ― このコンポーネントは、デバイスタイプに依存しないI/O動作メカニズムを実装し、I/O要求を適切なデバイスドライバにディスパッチする機能を提供します。詳細については第9章で取り上げます。
-
PnPマネージャ ― このコンポーネントは、特定のデバイスに必要なドライバを決定し、ロードする機能を提供します。詳細については第9章で取り上げます。PnPマネージャは、個々のデバイスにアクセスし、必要とされるハードウェアリソース情報を取り出します。そして、収集したリソース情報を基に、I/Oポート、IRQ、DMAチャネル、メモリスペースなどのハードウェアリソースを適切に割り当てます。また、システム上のデバイス変更(追加や削除)を検出し、イベントとして通知します。
-
電源管理 ― このコンポーネントは、電源周りで発生するイベントを監視し、I/O管理通知をデバイスドライバに送信します。詳細については第9章で取り上げます。システムがアイドル状態に入ると、このコンポーネントはCPUを休眠状態に置き、電力消費を押さえにかかります。個々のデバイスの電力消費量を変化させるのはデバイスドライバですが、調整するのはあくまでもこのコンポーネントです。
-
WDM WMIルーチン ― WDM WMIルーチンのWDMとWMIは、正式にはWindows Driver ModelとWindows Management Instrumentationの略語です。詳細については第4章で取り上げます。このコンポーネントは、デバイスドライバがパフォーマンスと構成情報を公開したり、ユーザーモードWMIサービスからコマンドを受け取る機能を提供しています。公開されるWMI情報は、ネットワーク内のローカルマシンやリモートマシンから利用できます。
-
キャッシュマネージャ ― このコンポーネントは、ファイルベースのI/Oパフォーマンスを改善する機能を提供します(この後で説明するメモリマネージャのマップドファイルを活用しています)。具体的には、最近参照されたディスクデータをメインメモリに格納しておき、後続のI/O処理を高速化します。また、ディスクへのデータ書き出し時には、更新部分をメモリに短時間の間保持しておき、適切なタイミングでディスクにまとめて転送します(つまり、ディスクへの書き込み操作回数を減らします)。詳細については第11章で取り上げます。
-
メモリマネージャ ― このコンポーネントは仮想メモリを実装しています。詳細については第7章で取り上げます。仮想メモリというのは、メモリ管理のスキームの1つで、実際に搭載されている物理メモリを超える巨大なプライベートアドレススペースを個々のプロセスに提供します。メモリマネージャは、キャッシュマネージャのサポートする低レベル機能も実装しています。
-
ロジカルフェッチャー ― このコンポーネントは、システムとプロセスの起動時に参照されるデータを最適化し、起動処理を高速化する機能を提供します。詳細については第7章で取り上げます。
Windowsエグゼキュティブは、先に説明したコンポーネントが使用する4種類のサポート関数グループを提供しています。これらの関数の3分の1は、デバイスドライバも使用することもあり、DDKで説明されています。4種類のサポート関数グループは次のようなものです。
-
オブジェクトマネージャグループ ― このグループは、Windowsエグゼキュティブオブジェクトを作成、管理、そして削除する機能を提供しています。また、このグループには、プロセス、スレッド、あるいは各種の同期オブジェクトを表現するための抽象データ型を作成管理する関数も含まれています。オブジェクトマネージャの詳細については第3章で取り上げます。
-
LPCグループ ― このグループは、同一コンピュータ上にあるクライアントプロセスとサーバープロセス間でメッセージを交換するための機能を提供します。LPCは、リモートプロシージャコール(RPC)の最適化バージョンであり、かなりの柔軟性を持っています。なお、RPCは、クライアントとサーバープロセス間のネットワークを超えた通信を可能とする業界標準機能です。
-
ランタイムライブラリ関数グループ ― このグループは、文字列操作、算術演算、データ型の変換、およびセキュリティ処理などの広範囲に及ぶ汎用的な機能を提供します。
-
Windowsエグゼキュティブサポートルーチングループ ― このグループは、システムメモリの割り当て(ページプールと非ページプール)、メモリアクセスのロック、特殊な同期オブジェクト(リソースと高速ミューテックス)管理などで利用できる機能を提供します。
INDEX | ||
インサイドMicrosoft Windows 第4版 上 | ||
第2章 システムアーキテクチャ | ||
2.1 要求と設計目標/2.2 オペレーティングシステムモデル | ||
2.3 アーキテクチャ概要/2.3.1 移植性/2.3.2 対称型マルチプロセッシング | ||
2.3.3 スケーラビリティ/2.3.4 クライアントとサーバー間の違い/2.3.5 チェックビルド | ||
2.4 キーシステムコンポーネント/2.4.1 環境サブシステムとサブシステムDLL | ||
2.4.2 Ntdll.dll/2.4.3 エグゼキュティブ | ||
2.4.4 カーネル/2.4.5 ハードウェア抽象化層(HAL)/2.4.6 デバイスドライバ | ||
2.4.7 システムプロセス/まとめ | ||
「BOOK Preview」 |
- Azure Web Appsの中を「コンソール」や「シェル」でのぞいてみる (2017/7/27)
AzureのWeb Appsはどのような仕組みで動いているのか、オンプレミスのWindows OSと何が違うのか、などをちょっと探訪してみよう - Azure Storage ExplorerでStorageを手軽に操作する (2017/7/24)
エクスプローラのような感覚でAzure Storageにアクセスできる無償ツール「Azure Storage Explorer」。いざというときに使えるよう、事前にセットアップしておこう - Win 10でキーボード配列が誤認識された場合の対処 (2017/7/21)
キーボード配列が異なる言語に誤認識された場合の対処方法を紹介。英語キーボードが日本語配列として認識された場合などは、正しいキー配列に設定し直そう - Azure Web AppsでWordPressをインストールしてみる (2017/7/20)
これまでのIaaSに続き、Azureの大きな特徴といえるPaaSサービス、Azure App Serviceを試してみた! まずはWordPressをインストールしてみる
|
|