Quali sono le chiamate a procedure differite?

Sommario:

Anonim

Una chiamata di procedura posticipata (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 l'attivazione di un'attività, ma non l'esecuzione, da un livello di richiesta di interrupt ad alta priorità (IRQL). Ciò consente a un driver di elaborare rapidamente una routine di servizio di interrupt di alto livello (ISR) durante il rinvio dell'esecuzione di codici IRQL di livello inferiore. I driver utilizzano i DPC per pianificare le operazioni di input / output (I / O). I driver sono software utilizzati da Windows per comunicare con dispositivi hardware.

trasferimenti

Un driver di periferica 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 normalmente interrupt per richiedere al driver del dispositivo di trasferire il successivo batch di dati. Un driver di periferica non può elaborare immediatamente i dati nella sua routine di interrupt; 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 della vostra unità centrale di elaborazione. Il kernel controlla tutte le attività di elaborazione del sistema.

programmazione

Il concetto di una chiamata di procedura differita esiste solo in modalità kernel. Il sistema operativo mantiene i DPC programmati dai driver di dispositivo in una coda. 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 filo prioritario più alto 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 con 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), disabilita il prossimo IRP, imposta lo stato di input / output nell'IRP ricevuto e il processo per completare la richiesta.

routine

Normalmente, un driver di periferica che ha una routine di servizio di interrupt ha almeno una routine DPCForIsr o CustomDPC per completare l'elaborazione delle operazioni di I / O interrotte. 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 le operazioni di I / O basate su interrupt che utilizzano le routine DPCForlsr. Viceversa, per operazioni sovrapposte, operazioni di I / O interrotte tramite routine CustomDPC, ISR deve chiamare KeInsertQueueDPC.