次の方法で共有


ドライバー通知の概要

Windows Server 2008 以降、プロセッサまたはメモリ モジュールがハードウェア パーティションに動的に追加されたとき、オペレーティング システムはデバイス ドライバーに通知することができます。 ホット追加操作のプロセスのさまざまな段階で発生する通知がいくつかあります。 これらの通知はそれぞれ異なる通知方法を使用し、イベントについてデバイス ドライバーに通知します。 これらの通知方法の 1 つ以上を使用して、ホット追加操作が発生したとき、オペレーティング システムにドライバーに対して通知させることができます。 その後、ドライバーは、安全で最適な操作のため、必要に応じて応答できます。

次の表は、各種通知方法と、それらがプロセッサ、メモリ、またはプロセッサとメモリの両方に適用されるかどうかを示しています。

通知メソッド プロセッサの場合 メモリの場合

同期ドライバー通知

x

非同期ドライバー通知

x

x

メモリ通知イベント

x

リソースの再調整

x

同期ドライバー通知

同期ドライバー通知を使用すると、オペレーティング システムは、新しいプロセッサがハードウェア パーティションに追加されたことをデバイス ドライバーに同期的に通知します。 これは、デバイス ドライバーがプロセッサの数の変更について受け取る最初の通知です。

新しいプロセッサがハードウェア パーティションに追加されると、オペレーティング システムが新しいプロセッサを起動した後、かつオペレーティング システムがプロセッサ上のスレッドのスケジュールを開始する前に、オペレーティング システムはデバイス ドライバーにこの通知を送信します。 デバイス ドライバーは、この通知を受信すると、プロセッサ単位のデータ構造を割り当て、プロセッサ単位の他のリソースを新しいプロセッサに割り当てることができます。 これにより、ディスパッチ ルーチン、割り込みサービス ルーチン (ISR)、遅延プロシージャ呼び出し (DPC)、新しいプロセッサ上のその他のドライバー スレッドを実行するデバイス ドライバーが準備されます。

デバイス ドライバーは、同期ドライバー通知を受け取るため、オペレーティング システムに自身を登録する必要があります。 詳しくは、「同期ドライバー通知の登録」をご覧ください。

この通知方法は、プロセッサにのみ適用されます。 メモリの同期通知メカニズムはありません。

非同期ドライバー通知

非同期ドライバー通知を使用すると、オペレーティング システムは、新しいプロセッサまたはメモリ モジュールがハードウェア パーティションに追加されたことをデバイス ドライバーに非同期的に通知します。 Windows Server 2008 以降、プロセッサとメモリ モジュールはプラグ アンド プレイ (PnP) デバイスと見なされます。 そのため、オペレーティング システムは、非同期ドライバー通知の PnP 通知メカニズムを使用します。

新しいプロセッサまたはメモリ モジュールがハードウェア パーティションに追加されると、オペレーティング システムが新しいプロセッサまたはメモリ デバイスを起動した後、オペレーティング システムはデバイス ドライバーにこの通知を送信します。 新しいプロセッサの場合、オペレーティング システムは、新しいプロセッサでスレッドのスケジュールを開始するまで、デバイス ドライバーにこの通知を送信しません。

Note

すべての PnP 通知は非同期です。 したがって、オペレーティング システムがプロセッサまたはメモリ モジュールを起動するまで、これらの通知はデバイス ドライバーによって受信されない可能性があります。

デバイス ドライバーは、この通知を受け取ると、それに応じて次の項目の一部またはすべてを調整することができます。

  • メモリ バッファーと他のリソースの割り当て

  • 特定のプロセッサへのリソースの割り当て

  • 特定のプロセッサ上の DPC と他のスレッドのスケジュール

  • 負荷分散アルゴリズム

重要

新しいプロセッサをハードウェア パーティションに追加すると、新しいプロセッサが起動され、オペレーティング システムがスレッドのスケジュールを開始するまで、オペレーティング システムは PnP 通知を送信しません。 オペレーティング システムが新しいプロセッサでスレッドのスケジュールを開始する前に、デバイス ドライバーが特定のタスクを実行する必要がある場合 (プロセッサ単位のデータ構造の割り当てなど)、ドライバーの同期通知方法を使用する必要があります。

デバイス ドライバーは、非同期ドライバー通知を受け取るため、オペレーティング システムに自身を登録する必要があります。 詳しくは、「非同期ドライバー通知の登録」をご覧ください。

メモリ通知イベント

メモリ通知イベント方法を使用すると、オペレーティング システムが \KernelObjects\HighMemoryCondition イベント オブジェクトを設定するのを待機するスレッドを、デバイス ドライバーにスケジュールさせることができます。 空き物理メモリの量が特定の値を超えると、オペレーティング システムによってこのイベント オブジェクトが設定されます。 このイベントは、イベント オブジェクトを待機しているスレッドに、現在大量の物理メモリがシステムで使用可能であることを通知します。 このイベントは、新しいメモリ モジュールをシステムに動的に追加したことを示している可能性があります。 オペレーティング システムがこのイベント オブジェクトを設定すると、デバイス ドライバーは、追加のメモリ バッファーを割り当てることによってイベントに応答できます。

\KernelObjects\HighMemoryCondition イベント オブジェクトについて詳しくは、「標準イベント オブジェクト」をご覧ください。

重要

オペレーティング システムが \KernelObjects\HighMemoryCondition イベント オブジェクトを設定する場合、イベントは、新しいメモリ モジュールをハードウェア パーティションに動的に追加した可能性があることの指示のみ提供します。 オペレーティング システムがこのイベント オブジェクトを設定する原因となることが考えられる他の状況もあります。 そのため、Windows Server 2008 以降では、デバイス ドライバーでこの通知方法を使用することはお勧めしません。 代わりに、デバイス ドライバーは非同期ドライバー通知方法を使用する必要があります。

この方法はメモリにのみ適用されます。 プロセッサに対応する通知メカニズムはありません。

リソースの再調整

Windows Server 2008 以降で、ハードウェア パーティションに新しいプロセッサを追加すると、オペレーティング システムによってシステム全体のリソースの再調整が開始されます。 デバイスがこのようなリソースの再調整に参加するかどうかは、デバイスの DEVPKEY_Device_DHP_Rebalance_Policy デバイス プロパティの設定によって決まります。 ネットワーク アダプター (Class = Net) デバイス セットアップ クラスのデバイスの既定の動作では、新しいプロセッサがシステムに動的に追加されると、リソースの再調整に参加しなくなります。 他のすべてのデバイス セットアップ クラスのデバイスの既定の動作では、新しいプロセッサがシステムに動的に追加されるとリソースの再調整に参加します。

デバイスがプラグ アンド プレイ (PnP) デバイスであり、そのようなリソースの再調整に参加する場合、オペレーティング システムは、リソースの再調整操作時に、IRP_MN_QUERY_STOP_DEVICEIRP_MN_STOP_DEVICE、および IRP_MN_START_DEVICE PnP IRP をデバイスのドライバーに送信します。 これらの PnP 要求は、ハードウェア パーティションでハードウェアの変更が発生したことをドライバーに通知します。 デバイス ドライバーは、IRP_MN_QUERY_STOP_DEVICE および IRP_MN_STOP_DEVICE PnP 要求を適切に処理することにより、リソースの再調整をサポートする必要があります。 デバイス ドライバーは、IRP_MN_QUERY_STOP_DEVICE PnP 要求を拒否してはなりません。

これらの PnP 要求により、デバイス ドライバーは、新しいプロセッサを追加した後、ハードウェア パーティションでアクティブなプロセッサの新しいセットを完全に使用することができます。 具体的には、リソースの再調整をサポートするデバイス ドライバーは、リソースの再調整時に受け取った PnP 要求を使用して、割り込みサービス ルーチン (ISR) を切断し、更新されたプロセッサ アフィニティ値を使用して再接続します。 これにより、デバイス ドライバーは、割り込み要求を処理するため、ハードウェア パーティション内のすべての現在アクティブなプロセッサ (新しいプロセッサを含む) を使用できます。

デバイス ドライバーは、リソースの再調整時にすべての I/O 要求をキューに入れます。

リソースの再調整について詳しくは、「デバイスの停止によるリソースの再調整」をご覧ください。

この方法はプロセッサにのみ適用されます。 新しいメモリ モジュールをハードウェア パーティションに追加しても、オペレーティング システムはシステム全体のリソースの再調整を開始しません。