Использование прямого ввода-вывода

Драйверы для устройств, которые могут передавать большие объемы данных за раз, должны использовать прямой ввод-вывод для этих передач. Использование прямых операций ввода-вывода для больших передач повышает производительность драйвера, как за счет снижения затрат на прерывания, так и за счет устранения операций выделения памяти и копирования, присущих буферизованному вводу-выводу.

Как правило, драйверы запоминающих устройств запрашивают прямые операции ввода-вывода для запросов на передачу, включая драйверы самого низкого уровня, использующие прямой доступ к памяти (DMA) или запрограммированные операции ввода-вывода (PIO), а также любые промежуточные драйверы, связанные с ними.

Диспетчер ввода-вывода определяет, что операция ввода-вывода использует прямой ввод-вывод следующим образом:

Драйверы, использующие прямой ввод-вывод, иногда также используют буферизированные операции ввода-вывода для обработки некоторых irP. В частности, драйверы обычно используют буферизацию ввода-вывода для некоторых кодов управления вводом-выводом для IRP_MJ_DEVICE_CONTROL запросов, требующих передачи данных, независимо от того, использует ли драйвер прямой ввод-вывод для операций чтения и записи.

Настройка прямой передачи ввода-вывода немного отличается в зависимости от того, используется ли DMA или PIO. Дополнительные сведения см. в разделе:

Использование прямого ввода-вывода с DMA

Использование прямого ввода-вывода с piO

Драйверы должны принять меры для поддержания когерентности кэша во время передачи DMA и личных сведений. Дополнительные сведения см. в разделе Поддержка когерентности кэша.