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


Модель ввода-вывода порта SCSI

Драйвер порта SCSI взаимодействует со своим драйвером мини-порта с помощью ряда указателей на процедуры обратного вызова драйвера miniport в таблице диспетчеризации и объекте драйвера. Драйвер мини-порта вызывает ScsiPortInitialize из своей подпрограммы DriverEntry , чтобы инициализировать таблицу диспетчеризации и объект драйвера порта SCSI с помощью этих указателей обратного вызова. Одним из таких указателей обратного вызова является точка входа для процедуры запуска ввода-вывода драйвера мини-порта, которая используется для обработки запросов ввода-вывода. Драйвер порта назначает этот указатель на элемент DriverStartIo объекта driver.

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

Когда целевое устройство будет готово к получению следующего запроса ввода-вывода, порт SCSI вызывает IoStartPacket, который, в свою очередь, вызывает подпрограмму обратного вызова для запуска ввода-вывода драйвера мини-порта, которая хранится в DriverObject-DriverStartIo>. Сведения об операциях и требуемых характеристиках процедуры запуска ввода-вывода драйвера мини-порта см. в разделе Подпрограмма HwScsiStartIo драйвера SCSI Miniport Driver.

Порт SCSI вызывает IRQL процессора перед вызовом процедуры запуска ввода-вывода драйвера мини-порта, чтобы замаскировать прерывания и гарантировать, что подпрограмма запуска ввода-вывода синхронизировала доступ к критически важным структурам операционной системы и драйверов.

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

Storport Driver предлагает более гибкую модель ввода-вывода, в частности, в отношении маскирования прерываний. Сведения о различиях между моделью ввода-вывода Storport и моделью ввода-вывода порта SCSI см. в разделе Модель ввода-вывода Storport.