使用直接 I/O

一次可以传输大量数据的设备的驱动程序应使用直接 I/O 进行这些传输。 对大型传输使用直接 I/O 可降低驱动程序的中断开销,并消除缓冲 I/O 中固有的内存分配和复制操作,从而提高驱动程序的性能。

通常,大容量存储设备驱动程序为传输请求请求直接 I/O,包括使用直接内存访问 (DMA) 或编程 I/O (PIO) 的最低级别驱动程序,以及链接在它们上方的任何中间驱动程序。

I/O 管理器确定 I/O 操作正在使用直接 I/O,如下所示:

使用直接 I/O 的驱动程序有时也会使用缓冲 I/O 来处理某些 IRP。 具体而言,驱动程序通常对需要数据传输 的IRP_MJ_DEVICE_CONTROL 请求的某些 I/O 控制代码使用缓冲 I/O,而不管驱动程序是否使用直接 I/O 执行读取和写入操作。

直接 I/O 传输的设置略有不同,具体取决于使用的是 DMA 还是 PIO。 有关详细信息,请参阅:

将直接 I/O 与 DMA 配合使用

将直接 I/O 与 PIO 配合使用

驱动程序必须采取措施在 DMA 和 PIO 传输期间保持缓存一致性。 有关详细信息,请参阅 维护缓存一致性