DPC 큐 구성
시스템은 각 프로세서에 대해 하나의 DPC 큐를 제공합니다. 드라이버는 시스템에서 DPC를 할당하는 큐, 큐 내의 DPC 위치 및 큐가 처리되는 시기를 제어할 수 있습니다.
특정 프로세서의 큐에 할당된 DPC는 해당 프로세서에서 실행됩니다. 기본적으로 드라이버가 KeInsertQueueDpc 또는 IoRequestDpc를 호출하면 DPC는 현재 활성 프로세서에서 큐에 대기됩니다. 드라이버는 KeInsertQueueDpc 또는 IoRequestDpc를 호출하기 전에 KeSetTargetProcessorDpc를 호출하여 프로세서 큐를 지정할 수 있습니다.
Windows Vista 이상 버전의 Windows에서 시스템에는 각 프로세서에 대해 하나의 스레드 DPC 큐가 있습니다. 드라이버는 KeSetTargetProcessorDpc 를 사용하여 스레드된 DPC에 대한 프로세서 큐를 지정할 수 있습니다.
KeSetImportanceDpc 루틴은 DPC가 큐 내에 배치되는 위치를 제어합니다. 일반적으로 DPC는 큐의 끝에 배치됩니다. 그러나 드라이버가 HighImportance와 같은 Importance 매개 변수를 사용하여 KeSetImportanceDpc를 처음 호출하면 DPC가 큐의 시작 부분에 배치됩니다.
일반(스레드되지 않은) DPC의 경우 KeSetImportanceDpc 는 KeInsertQueueDpc 또는 IoRequestDpc 가 DPC 큐 처리를 즉시 시작할지 여부를 결정합니다. 다음 목록에서는 큐 처리 규칙을 설명합니다.
DPC 큐의 처리는 DPC가 현재 프로세서에 할당되고 중요도가LowImportance와 같지 않거나 중요 도가 LowImportance 와 같고 현재 프로세서의 DPC 큐 깊이가 시스템 정의 제한을 초과하거나 DPC 요청 속도가 시스템 정의 최소값보다 낮은 경우 즉시 시작됩니다. 그렇지 않으면 적절한 큐 깊이 및 속도 요구 사항이 충족될 때까지 DPC 처리가 지연됩니다.
DPC 큐의 처리는 DPC가 현재 프로세서와 다른 프로세서에 할당되고 중요도가MediumHighImportance 또는 HighImportance와 같거나 대상 프로세서의 DPC 큐 깊이가 시스템 정의 제한을 초과하는 경우 대상 프로세서에서 즉시 시작됩니다. 그렇지 않으면 적절한 큐 깊이 및 속도 요구 사항이 충족될 때까지 DPC 처리가 지연됩니다.