다음을 통해 공유


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의 경우 KeSetImportanceDpcKeInsertQueueDpc 또는 IoRequestDpc 가 DPC 큐 처리를 즉시 시작할지 여부를 결정합니다. 다음 목록에서는 큐 처리 규칙을 설명합니다.

  • DPC 큐의 처리는 DPC가 현재 프로세서에 할당되고 중요도가LowImportance와 같지 않거나 중요 도가 LowImportance 와 같고 현재 프로세서의 DPC 큐 깊이가 시스템 정의 제한을 초과하거나 DPC 요청 속도가 시스템 정의 최소값보다 낮은 경우 즉시 시작됩니다. 그렇지 않으면 적절한 큐 깊이 및 속도 요구 사항이 충족될 때까지 DPC 처리가 지연됩니다.

  • DPC 큐의 처리는 DPC가 현재 프로세서와 다른 프로세서에 할당되고 중요도가MediumHighImportance 또는 HighImportance와 같거나 대상 프로세서의 DPC 큐 깊이가 시스템 정의 제한을 초과하는 경우 대상 프로세서에서 즉시 시작됩니다. 그렇지 않으면 적절한 큐 깊이 및 속도 요구 사항이 충족될 때까지 DPC 처리가 지연됩니다.