Uso di I/O diretto
I driver per i dispositivi che possono trasferire grandi quantità di dati alla volta devono usare l'I/O diretto per tali trasferimenti. L'uso di I/O diretto per i trasferimenti di grandi dimensioni migliora le prestazioni di un driver, riducendo il sovraccarico dell'interruzione e eliminando l'allocazione della memoria e le operazioni di copia intrinseche nell'I/O con buffer.
In genere, i driver di dispositivo di archiviazione di massa richiedono l'I/O diretto per le richieste di trasferimento, inclusi i driver di livello più basso che usano l'accesso diretto alla memoria (DMA) o programmati I/O (PIO), nonché tutti i driver intermedi concatenati sopra di essi.
La gestione I/O determina che un'operazione di I/O usa I/O diretta come indicato di seguito:
Per IRP_MJ_READ e richiestedi IRP_MJ_WRITE, DO_DIRECT_IO è impostato nel membro Flag della struttura DEVICE_OBJECT. Per altre informazioni, vedere Inizializzazione di un oggetto Device.
Per IRP_MJ_DEVICE_CONTROL e richieste di IRP_MJ_INTERNAL_DEVICE_CONTROL , il valore del codice IOCTL contiene METHOD_IN_DIRECT o METHOD_OUT_DIRECT come valore TransferType nel valore IOCTL. Per altre informazioni, vedere Definizione dei codici di controllo di I/O.
I driver che usano l'I/O diretta a volte usano anche I/O con buffer per gestire alcuni indirizzi DI ACCESSO. In particolare, i driver usano in genere l'I/O con buffer per alcuni codici di controllo I/O per le richieste di IRP_MJ_DEVICE_CONTROL che richiedono trasferimenti di dati, indipendentemente dal fatto che il driver usi l'I/O diretto per operazioni di lettura e scrittura.
La configurazione di un trasferimento di I/O diretto varia leggermente, a seconda che venga usato DMA o PIO. Per altre informazioni, vedere:
I driver devono adottare misure per mantenere la coesistenza della cache durante i trasferimenti DMA e PIO. Per altre informazioni, vedere Gestione della coesistenza della cache.