Cosa sono le chiamate di procedura differite?

Una chiamata di procedura differita (DPC) è un meccanismo di gestione degli interrupt nel sistema operativo Microsoft Windows a cui i driver possono fare riferimento durante l'esecuzione di determinati processi. DPC consente di attivare un'attività, ma non di eseguirla, da un livello di richiesta di interruzione con priorità elevata (IRQL). Ciò consente a un driver di elaborare rapidamente una routine di servizio di interrupt di alto livello (ISR) mentre rinvia l'esecuzione di codici IRQL di livello inferiore. I conducenti utilizzano i DPC per programmare le operazioni di input/output (I/O). I driver sono software utilizzati da Windows per comunicare con i dispositivi hardware.

Trasferimenti

Un driver di dispositivo in modalità kernel gestisce convenzionalmente il trasferimento di un flusso di dati audio o video da o verso un dispositivo esterno. L'elaborazione dei dati dei driver di dispositivo è guidata da interrupt. L'hardware esterno genera regolarmente degli interrupt per richiedere al driver del dispositivo di trasferire il successivo batch di dati. Un driver di dispositivo non può elaborare i dati istantaneamente nella sua routine di interruzione; quindi, il sistema operativo deve attivare una routine di callback, che è il DPC. La modalità kernel, o modalità di sistema, e la modalità utente sono le modalità di funzionamento dell'unità di elaborazione centrale. Il kernel controlla tutte le attività di elaborazione del sistema.

Programmazione

Il concetto di chiamata di procedura differita esiste solo in modalità kernel. Il sistema operativo mantiene in coda i DPC pianificati dai driver di dispositivo. Se il tuo sistema ha bisogno di elaborare gli interrupt, il kernel controlla la coda DPC ed esegue il primo DPC se non ci sono interruzioni e nessun processo DPC in esecuzione. Il DPC è il thread con la priorità più alta nel sistema, poiché l'elaborazione della coda DPC avviene prima che il dispatcher scelga un thread e lo assegni alla CPU. I DPC hanno tre livelli di priorità: basso, medio e alto.

Processi

Ogni DPC è collegato a un oggetto DPC definito dal sistema. Quando un driver registra una routine DPCForslr, il sistema inizializza l'oggetto DPC precedentemente definito. Se è richiesto più di un DPC, un driver crea oggetti DPC aggiuntivi noti come routine CustomDPC. La routine DPCForlsr gestisce diversi processi; completa l'operazione di I/O descritta dai pacchetti di richiesta di input/output (IRP), deques l'IRP successivo, imposta lo stato di input/output nell'IRP ricevuto e il processo per completare la richiesta.

routine

Normalmente, un driver di dispositivo che ha una routine di servizio di interruzione ha almeno una routine DPCForIsr o CustomDPC per completare l'elaborazione delle operazioni di I/O guidate dall'interruzione. Secondo Open Systems Resources, Inc., il motivo fondamentale per cui un driver ha una singola routine DPCForlsr, un insieme di routine CustomDPC o entrambi dipende dalla natura del dispositivo sottostante e dall'insieme di richieste I/O che deve supportare. L'ISR di un driver deve chiamare IoRequestDPC per operazioni di I/O basate su interrupt utilizzando le routine DPCForlsr. Al contrario, per operazioni sovrapposte, operazioni di I/O guidate da interrupt che utilizzano routine CustomDPC, ISR deve chiamare KeInsertQueueDPC.