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


Поддержка асинхронного ввода-вывода

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

Благодаря поддержке асинхронного ввода-вывода драйверы в режиме ядра не обязательно обрабатывают запросы ввода-вывода в том же порядке, в котором они были отправлены диспетчеру ввода-вывода. Диспетчер ввода-вывода или драйвер более высокого уровня может изменять порядок запросов ввода-вывода по мере их получения. Драйвер может разделить большой запрос на передачу данных на более мелкие запросы на передачу. Кроме того, драйвер может перекрывать обработку запросов ввода-вывода, особенно на симметричной многопроцессорной платформе, как упоминалось в разделе Multiprocessor-Safe.

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

Когда драйвер получает IRP, он отвечает, выполняя столько обработки, сколько это возможно. Если драйвер поддерживает асинхронную обработку IRP, он может при необходимости отправить IRP следующему драйверу и начать обработку следующей IRP, не дожидаясь завершения первой. Драйвер может зарегистрировать "подпрограмму завершения", которую диспетчер ввода-вывода вызывает, когда другой драйвер завершил обработку IRP. Драйверы предоставляют значение состояния в блоке состояния ввода-вывода IRP, к которому могут получить доступ другие драйверы, чтобы определить состояние запроса ввода-вывода.

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

Дополнительные сведения см. в разделе Обработка IRP и методы ввода-вывода.