Verwenden direkter E/A-Vorgänge
Treiber für Geräte, die große Datenmengen gleichzeitig übertragen können, sollten direkte E/A-Vorgänge für diese Übertragungen verwenden. Die Verwendung von direkten E/A-Vorgängen für große Übertragungen verbessert die Leistung eines Treibers, indem sowohl der Unterbrechungsaufwand reduziert wird als auch die Speicherzuordnung und das Kopieren von Vorgängen beseitigt werden, die mit gepufferten E/A-Vorgängen verbunden sind.
Im Allgemeinen fordern Massenspeichergerätetreiber direkte E/A für Übertragungsanforderungen an, einschließlich Treibern der niedrigsten Ebene, die den direkten Speicherzugriff (Direct Memory Access, DMA) oder programmierte E/A (PIO) verwenden, sowie alle darüber verketteten Zwischentreiber.
Der E/A-Manager ermittelt, dass ein E/A-Vorgang direkte E/A-Vorgänge verwendet:
Für IRP_MJ_READ - und IRP_MJ_WRITE-Anforderungen wird DO_DIRECT_IO im Flags-Element der DEVICE_OBJECT-Struktur festgelegt. Weitere Informationen finden Sie unter Initialisieren eines Geräteobjekts.
Für IRP_MJ_DEVICE_CONTROL - und IRP_MJ_INTERNAL_DEVICE_CONTROL-Anforderungen enthält der Wert des IOCTL-Codes METHOD_IN_DIRECT oder METHOD_OUT_DIRECT als TransferType-Wert im IOCTL-Wert. Weitere Informationen finden Sie unter Definieren von E/A-Steuerungscodes.
Treiber, die direkte E/A verwenden, verwenden manchmal auch gepufferte E/A-Vorgänge, um einige IRPs zu verarbeiten. Insbesondere verwenden Treiber in der Regel gepufferte E/A-Steuerungscodes für IRP_MJ_DEVICE_CONTROL Anforderungen, die Datenübertragungen erfordern, unabhängig davon, ob der Treiber direkte E/A für Lese- und Schreibvorgänge verwendet.
Das Einrichten einer direkten E/A-Übertragung variiert geringfügig, je nachdem, ob DMA oder PIO verwendet wird. Weitere Informationen finden Sie unter
Verwenden der direkten E/A mit DMA
Verwenden von Direct E/O mit PIO
Treiber müssen Schritte unternehmen, um die Cachekohärenz während DMA- und PIO-Übertragungen aufrechtzuerhalten. Weitere Informationen finden Sie unter Verwalten der Cachekohärenz.