Organización de colas de DPC
El sistema proporciona una cola DPC para cada procesador. Los controladores pueden controlar a qué cola el sistema asigna un DPC, la ubicación del DPC dentro de la cola y cuándo se procesa la cola.
Los DPC asignados a la cola de un procesador determinado se ejecutan en ese procesador. De forma predeterminada, cuando el controlador llama a KeInsertQueueDpc o IoRequestDpc, el DPC se pone en cola en el procesador activo actualmente. Los controladores pueden especificar la cola del procesador llamando a KeSetTargetProcessorDpc antes de llamar a KeInsertQueueDpc o IoRequestDpc.
En Windows Vista y versiones posteriores de Windows, el sistema también tiene una cola DPC en subproceso para cada procesador. Los controladores pueden usar KeSetTargetProcessorDpc para especificar la cola del procesador para los DPC en subprocesos.
La rutina KeSetImportanceDpc controla dónde se coloca un DPC dentro de la cola. Normalmente, el DPC se coloca al final de la cola; pero si el controlador llama primero a KeSetImportanceDpc con el parámetro Importance igual a HighImportance, el DPC se coloca al principio de la cola.
En el caso de dpCs normales (no subprocesos), KeSetImportanceDpc también determina si KeInsertQueueDpc o IoRequestDpc comenzarán inmediatamente a procesar la cola DPC. En la lista siguiente se describen las reglas para procesar la cola:
El procesamiento de la cola DPC comienza inmediatamente si el DPC se asigna al procesador actual y Importance no es igual a LowImportance, o si Importance es igual a LowImportance y la profundidad de la cola DPC del procesador actual supera un límite definido por el sistema o la tasa de solicitudes DPC ha caído por debajo de un mínimo definido por el sistema. De lo contrario, el procesamiento del DPC se aplaza hasta que se cumplan los requisitos de velocidad y profundidad de cola adecuados.
El procesamiento de la cola DPC comienza inmediatamente en el procesador de destino si el DPC se asigna a un procesador diferente del procesador actual y Importance es igual a MediumHighImportance o HighImportance, o si la profundidad de la cola DPC del procesador de destino supera un límite definido por el sistema. De lo contrario, el procesamiento del DPC se aplaza hasta que se cumplan los requisitos de velocidad y profundidad de cola adecuados.