Поделиться через


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

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

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

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

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

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

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

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

Драйверы должны выполнить шаги по поддержанию когерентности кэша во время передачи DMA и PIO. Дополнительные сведения см. в разделе "Обслуживание когерентности кэша".