遅延手続き呼び出しとは

目次:

Anonim

遅延プロシージャ呼び出し(DPC)は、特定のプロセスの実行時にドライバが参照できるMicrosoft Windowsオペレーティングシステムの割り込み処理メカニズムです。 DPCでは、優先順位の高い割り込み要求レベル(IRQL)からタスクをアクティブにすることはできますが、実行することはできません。これにより、ドライバは低レベルのIRQLコードの実行を延期しながら、高レベルの割り込みサービスルーチン(ISR)を迅速に処理することができます。ドライバーはDPCを使用して入出力(I / O)操作をスケジュールします。ドライバは、ハードウェアデバイスと通信するためにWindowsによって使用されるソフトウェアです。

送金

カーネルモードデバイスドライバは、従来通り、外部デバイスからのまたは外部デバイスへのオーディオまたはビデオデータストリームの転送を処理する。デバイスドライバのデータ処理は割り込み駆動です。外部ハードウェアは定期的に割り込みを生成して、デバイスドライバに次のデータのバッチの転送を要求します。デバイスドライバは、その割り込みルーチンで即座にデータを処理することはできません。したがって、オペレーティングシステムはコールバックルーチン(DPC)を起動する必要があります。カーネルモード、またはシステムモード、およびユーザーモードは、中央処理装置の動作モードです。カーネルはすべてのシステム処理活動を制御します。

スケジューリング

据え置きプロシージャー呼び出しの概念は、カーネルモードにのみ存在します。オペレーティングシステムは、デバイスドライバによってスケジュールされたDPCをキューに入れます。システムが割り込みを処理する必要がある場合、カーネルはDPCキューをチェックし、割り込みがなくDPCプロセスが実行されていなければ最初のDPCを実行します。 DPCキュー処理はディスパッチャがスレッドを選択してこれをCPUに割り当てる前に行われるため、DPCはシステム内で最も優先順位の高いスレッドです。 DPCには、低、中、高の3つの優先レベルがあります。

プロセス

各DPCは、1つのシステム定義DPCオブジェクトとリンクされています。ドライバがDPCForslrルーチンを登録すると、システムは以前に定義されたDPCオブジェクトを初期化します。複数のDPCが必要な場合、ドライバはCustomDPCルーチンと呼ばれる追加のDPCオブジェクトを作成します。 DPCForlsrルーチンはいくつかのプロセスを処理します。それは、入出力要求パケット(IRP)によって記述されたI / O動作を完了し、次のIRPをデキューし、受信されたIRPにおける入出力状態を設定し、そして要求を完了するためのプロセスを設定する。

ルーチン

通常、割り込みサービスルーチンを持つデバイスドライバには、割り込み駆動型I / O操作の処理を完了するためのDPCForIsrまたはCustomDPCルーチンが少なくとも1つあります。 Open Systems Resources、Inc.によると、ドライバが単一のDPCForlsrルーチン、一連のCustomDPCルーチン、またはその両方を持つ基本的な理由は、その基礎となるデバイスの性質とそれがサポートしなければならない一連のI / O要求によって異なります。ドライバのISRは、DPCForlsrルーチンを使用して割り込み駆動型のI / O操作を行うためにIoRequestDPCを呼び出す必要があります。逆に、重複した操作、CustomDPCルーチンを使用した割り込み駆動型I / O操作の場合、ISRはKeInsertQueueDPCを呼び出す必要があります。