Organisation des files d’attente DPC

Le système fournit une file d’attente DPC pour chaque processeur. Les pilotes peuvent contrôler la file d’attente à laquelle le système attribue un DPC, l’emplacement de la DPC dans la file d’attente et le moment où la file d’attente est traitée.

Les PDC affectés à la file d’attente d’un processeur particulier sont exécutés sur ce processeur. Par défaut, lorsque le pilote appelle KeInsertQueueDpc ou IoRequestDpc, le DPC est mis en file d’attente sur le processeur actuellement actif. Les pilotes peuvent spécifier la file d’attente du processeur en appelant KeSetTargetProcessorDpc avant d’appeler KeInsertQueueDpc ou IoRequestDpc.

Sur Windows Vista et les versions ultérieures de Windows, le système a également une file d’attente DPC threaded pour chaque processeur. Les pilotes peuvent utiliser KeSetTargetProcessorDpc pour spécifier la file d’attente du processeur pour les PDC threadés.

La routine KeSetImportanceDpc contrôle où un DPC est placé dans la file d’attente. En règle générale, le DPC est placé à la fin de la file d’attente ; mais si le pilote appelle d’abord KeSetImportanceDpc avec le paramètre Importance égal à HighImportance, le DPC est placé au début de la file d’attente.

Pour les PDC ordinaires (sans thread), KeSetImportanceDpc détermine également si KeInsertQueueDpc ou IoRequestDpc vont immédiatement commencer à traiter la file d’attente DPC. La liste suivante décrit les règles de traitement de la file d’attente :

  • Le traitement de la file d’attente DPC commence immédiatement si le DPC est affecté au processeur actuel et que l’importance n’est pas égale à LowImportance, ou si Importance est égale à LowImportance et si la profondeur de la file d’attente DPC du processeur actuel dépasse une limite définie par le système ou si le taux de requête DPC est passé en dessous d’un minimum défini par le système. Sinon, le traitement de la DPC est différé jusqu’à ce que les exigences de profondeur et de débit de file d’attente appropriées soient remplies.

  • Le traitement de la file d’attente DPC commence immédiatement sur le processeur cible si la DPC est affectée à un processeur différent du processeur actuel et que l’importance est égale à MediumHighImportance ou HighImportance, ou si la profondeur de la file d’attente DPC du processeur cible dépasse une limite définie par le système. Sinon, le traitement de la DPC est différé jusqu’à ce que les exigences de profondeur et de débit de file d’attente appropriées soient remplies.