遅延プロシージャ呼び出し( DPC ) は、高優先度タスク (割り込みハンドラなど) が、必要な優先度の低いタスクを後で実行できるように遅延させる Microsoft Windows オペレーティング システムのメカニズムです。これにより、デバイスドライバやその他の低レベルのイベント コンシューマは、処理の優先度の高い部分を迅速に実行し、重要でない追加の処理を低い優先度で実行するようにスケジュールできます。
DPC は、デバイス ドライバーまたは他のカーネル モード プログラムが DPC 要求を発行したときにカーネルによって作成および初期化される DPC オブジェクトによって実装されます。DPC 要求は、DPCキューの末尾に追加されます。各プロセッサには個別の DPC キューがあります。DPC には、低、中、高の 3 つの優先度レベルがあります。既定では、すべての DPC は中優先度に設定されています。Windows は、IRQLをディスパッチ/DPC レベルに下げると、DPC キューで保留中の DPC をチェックし、キューが空になるか、より高い IRQL を持つ他の割り込みが発生するまでそれらを実行します。
たとえば、クロック割り込みが生成されると、クロック割り込みハンドラは通常、現在のスレッドのカウンタを増分してそのスレッドの合計実行時間を計算し、残りのクォンタム時間を 1 減らします。カウンタがゼロになると、スレッド スケジューラを呼び出して、そのプロセッサで次に実行するスレッドを選択し、ディスパッチャでコンテキスト スイッチを実行する必要があります。クロック割り込みははるかに高い IRQL で発生するため、このスレッド ディスパッチはそれほど重要ではないタスクであり、プロセッサの IRQL が低下したときに後で実行することが望ましいです。そのため、クロック割り込みハンドラは DPC オブジェクトを要求し、プロセッサの IRQL が DPC/ディスパッチ レベルに低下したときにディスパッチを処理する DPC キューの末尾にそれを追加します。
割り込みを使用するストリーミングオーディオまたはビデオを扱う場合、DPC は、各バッファーにストリームされるオーディオを処理するために使用されます。別の DPC (不適切に記述されたドライバーから) に時間がかかり、最初のデータ バッファーが処理される前に別の割り込みによって新しいデータ バッファーが生成されると、ドロップアウトが発生します。[1]
参考文献
- 一般的な
- Art Baker & Jerry Lozano (2000)。Windows 2000 デバイス ドライバー ブック: プログラマー向けガイド、第 2 版。Prentice Hall。ISBN 978-0-13-020431-8. 2012年4月15日時点のオリジナルよりアーカイブ。2012年11月7日閲覧。
- Microsoft Docs: 遅延プロシージャ呼び出し (DPC)
- 特定の
- ^ Ute Eberhardt (2012年6月27日). 「DPC Latency Checker」. Thesycon.de. 2017年10月15日時点のオリジナルよりアーカイブ。 2017年10月14日閲覧。
