Condividi tramite


Organizzazione delle code DPC

Il sistema fornisce una coda DPC per ogni processore. I driver possono controllare a quale coda il sistema assegna un DPC, la posizione del DPC all'interno della coda e quando viene elaborata la coda.

I CONTROLLER di dominio assegnati alla coda di un determinato processore vengono eseguiti su tale processore. Per impostazione predefinita, quando il driver chiama KeInsertQueueDpc o IoRequestDpc, il DPC viene accodato sul processore attualmente attivo. I driver possono specificare la coda del processore chiamando KeSetTargetProcessorDpc prima di chiamare KeInsertQueueDpc o IoRequestDpc.

In Windows Vista e versioni successive di Windows, il sistema dispone anche di una coda DPC thread per ogni processore. I driver possono usare KeSetTargetProcessorDpc per specificare la coda del processore per i controller di dominio thread.

La routine KeSetImportanceDpc controlla la posizione di un DPC all'interno della coda. In genere, il DPC viene posizionato alla fine della coda; ma se il driver chiama prima KeSetImportanceDpc con il parametro Importance uguale a HighImportance, il DPC viene posizionato all'inizio della coda.

Per i DPC ordinari (non a thread), KeSetImportanceDpc determina anche se KeInsertQueueDpc o IoRequestDpc inizierà immediatamente a elaborare la coda DPC. Nell'elenco seguente vengono descritte le regole per l'elaborazione della coda:

  • L'elaborazione della coda DPC inizia immediatamente se il DPC viene assegnato al processore corrente e l'importanza non è uguale a LowImportance oppure se Importance è uguale a LowImportance e la profondità della coda DPC del processore corrente supera un limite definito dal sistema o la frequenza delle richieste DPC è diminuita al di sotto di un valore minimo definito dal sistema. In caso contrario, l'elaborazione del DPC viene posticipata fino a quando non vengono soddisfatti i requisiti appropriati per la profondità e la frequenza della coda.

  • L'elaborazione della coda DPC inizia immediatamente sul processore di destinazione se il DPC viene assegnato a un processore diverso dal processore corrente e l'importanza è uguale a MediumHighImportance o HighImportance oppure se la profondità della coda DPC del processore di destinazione supera un limite definito dal sistema. In caso contrario, l'elaborazione del DPC viene posticipata fino a quando non vengono soddisfatti i requisiti appropriati per la profondità e la frequenza della coda.