Un appel de procédure différée (DPC) est un mécanisme de gestion des interruptions dans le système d'exploitation Microsoft Windows auquel les pilotes peuvent faire référence lors de l'exécution de certains processus. DPC permet à une tâche d'être activée, mais non exécutée, à partir d'un niveau de requête d'interruption hautement prioritaire (IRQL). Cela permet à un pilote de traiter rapidement une routine de service d'interruption de haut niveau (ISR) tout en différant l'exécution de codes IRQL de niveau inférieur. Les pilotes utilisent des DPC pour planifier des opérations d'entrée / sortie (E / S). Les pilotes sont des logiciels utilisés par Windows pour communiquer avec des périphériques matériels.
Transferts
Un pilote de périphérique en mode noyau gère classiquement le transfert d'un flux de données audio ou vidéo depuis ou vers un périphérique externe. Le traitement des données des pilotes de périphérique est basé sur des interruptions. Le matériel externe génère régulièrement des interruptions pour demander au pilote de périphérique de transférer le prochain lot de données. Un pilote de périphérique ne peut pas traiter les données instantanément dans sa routine d'interruption; ainsi, le système d'exploitation doit déclencher une routine de rappel, qui est le DPC. Le mode noyau ou mode système et le mode utilisateur sont les modes de fonctionnement de votre unité centrale. Le noyau contrôle toutes les activités de traitement du système.
Calendrier
Le concept d'appel de procédure différée existe uniquement en mode noyau. Le système d'exploitation conserve les DPC planifiés par les pilotes de périphérique dans une file d'attente. Si votre système doit traiter des interruptions, le noyau vérifie la file d'attente DPC et exécute le premier DPC s'il n'y a pas d'interruption ni de processus DPC en cours d'exécution. Le DPC est le thread ayant la priorité la plus élevée dans le système, car le traitement de la file d'attente DPC a lieu avant que le répartiteur ne choisisse un thread et l'assigne à la CPU. Les CPD ont trois niveaux de priorité: faible, moyen et élevé.
Les processus
Chaque DPC est lié à un objet DPC défini par le système. Lorsqu'un pilote enregistre une routine DPCForslr, le système initialise l'objet DPC défini précédemment. Si plusieurs DPC sont requis, un pilote crée des objets DPC supplémentaires, appelés routines CustomDPC. La routine DPCForlsr gère plusieurs processus; il termine l'opération d'E / S décrite par les paquets de demande d'entrée / sortie (IRP), décode le prochain IRP, définit l'état d'entrée / sortie dans l'IRP reçu et le processus permettant de terminer la demande.
Les routines
Normalement, un pilote de périphérique doté d'une routine de service d'interruption dispose d'au moins une routine DPCForIsr ou CustomDPC pour terminer le traitement des opérations d'E / S déclenchées par une interruption. Selon Open Systems Resources, Inc., la raison fondamentale pour laquelle un pilote a une seule routine DPCForlsr, un ensemble de routines CustomDPC ou les deux dépend de la nature de son périphérique sous-jacent et de l'ensemble des demandes d'E / S qu'il doit prendre en charge. L’ISR d’un pilote doit appeler IoRequestDPC pour les opérations d’E / S basées sur des interruptions utilisant les routines DPCForlsr. Inversement, pour les opérations d'E / S basées sur des interruptions utilisant des routines CustomDPC se chevauchant, ISR doit appeler KeInsertQueueDPC.