Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
Ad eccezione dei driver del file system, il gestore I/O associa un oggetto coda di dispositivo (per l'accodamento degli IRP) a ogni oggetto dispositivo creato da un driver.
La maggior parte dei driver di dispositivo chiama le routine di supporto del gestore di I/O per usare la coda di dispositivi associata, che contiene gli IRP ogni volta che le richieste di I/O del dispositivo per un oggetto dispositivo di destinazione arrivano più velocemente di quanto il driver possa elaborarle completamente. Con questa tecnica, i pacchetti di richiesta I/O vengono accodati a una routine StartIo fornita dal driver.
Per buone prestazioni, la maggior parte dei driver intermedi passa semplicemente i pacchetti di richiesta I/O ai driver inferiori non appena arrivano, quindi i driver intermedi quasi mai usano le code di dispositivi associate ai rispettivi oggetti dispositivo.
Tuttavia, è possibile progettare un driver per gestire le code interne degli IRP configurando esplicitamente una o più code di dispositivi, code interlocked o code sicure per l'annullamento. Questo approccio può essere particolarmente utile se il driver controlla un dispositivo che sovrappone le proprie operazioni a quelle di I/O. Per un dispositivo di questo tipo, può essere difficile gestire l'elaborazione simultanea di due o più IRP per lo stesso oggetto dispositivo di destinazione usando solo una singola coda.
Il modo più semplice per creare una coda interna consiste nell'usare il framework di coda IRP sicura per l'annullamento. È possibile implementare il meccanismo di accodamento preferito nel driver. È quindi possibile usare IoCsqInitialize per registrare un set di routine di callback che gestiscono l'inserimento e l'eliminazione di IRP, nonché il blocco e lo sblocco della coda. Il framework di accodamento IRP a prova di annullamento fornisce le routine IoCsqInsertIrp, IoCsqRemoveIrp e IoCsqRemoveNextIrp che usano automaticamente le routine di callback per inserire e rimuovere in modo sicuro gli IRP dalla coda del driver. Il sistema usa anche le routine di callback per rimuovere in modo sicuro qualsiasi pacchetto di richiesta di I/O che viene annullato.
È anche possibile scegliere di configurare code supplementari per gli IRP nel driver di un controller di dispositivo per un set di dispositivi fisici eterogenei. Ad esempio, il driver della porta SCSI usa oggetti di coda per dispositivi per le code interne. Questo driver dispone di una routine StartIo e configura gli oggetti coda del dispositivo come code aggiuntive, oltre alla coda del dispositivo associata all'oggetto dispositivo creato per rappresentare un HBA. Il port driver SCSI usa le sue code di dispositivi supplementari per contenere le IRP destinate a unità logiche specifiche sui bus SCSI controllati dall'HBA.
Il driver del controller floppy di sistema è un esempio di driver che non dispone di una routine StartIo e usa una coda sincronizzata. Questo driver configura una coda doppiamente collegata e interbloccata nella quale e dalla quale il driver e il thread dedicato al dispositivo inseriscono e rimuovono gli *IRP*.
Il kernel definisce il tipo di oggetto coda del dispositivo. Il componente di supporto esecutivo fornisce le routine per l'inserimento e la rimozione di IRP in code interbloccate. I driver per Windows XP e versioni successive di Windows possono usare code IRP sicure per l'annullamento per gestire l'accodamento IRP.
Le sezioni seguenti spiegano come usare code di dispositivi, code interlocked e code cancel-safe.
Configurazione e uso delle code dei dispositivi
Gestione delle code dei dispositivi
Configurazione e uso di code sincronizzate