Возможности, предоставляемые портом SCSI
Драйвер порта SCSI предоставляет следующие возможности:
Microsoft Windows поддерживает системы, содержащие различные типы автобусов ввода-вывода и (или) несколько автобусов ввода-вывода одного типа. Для обработки этого разнообразия требуется общая схема адресации.
Устройства PCI могут иметь как порт ввода-вывода, так и ресурсы регистра памяти. Логические адреса помогают сделать это различие прозрачным для драйвера порта.
Некоторые системы содержат HBA, подключенные к нескольким шинам; для такого адаптера шины может потребоваться несколько наборов преобразований адресов.
Логические адреса необходимы для переносимости на компьютерах на основе CISC и RISC.
Повторная попытка irP, если устройство слишком занято для их обработки.
Драйверы класса хранилища не должны реализовывать алгоритмы для повторных попыток irP, когда устройства слишком заняты для их обработки. Драйвер порта SCSI реализует эту функцию.
Применение значений времени ожидания для запросов.
Драйвер класса задает значение времени ожидания для запросов, и порт SCSI отвечает за его применение. Однако драйвер порта SCSI может гибко применять значения времени ожидания драйвера класса, принимая во внимание состояние шины. Например, если канал fibre channel, управляемый портом SCSI, падает на 20 секунд, порт SCSI может приостановить счетчик времени ожидания во время простоя, чтобы, например, запросы с временем ожидания 10 секунд не завершались сбоем до 10 секунд после восстановления связи. Порт SCSI увеличивает значения времени ожидания, назначенные запросам в ответ на увеличение трафика ввода-вывода, так как при увеличении трафика ввода-вывода устройствам потребуется больше времени на выполнение запросов.
Обработка ошибок о занятости целевого объекта и контроллера, а также условий ошибок транспорта (другими словами, ошибок, связанных с фактической передачей данных в шине). Пример:
- Ошибки четности шины
- время ожидания выбора
Предоставление драйверам классов сведений об ограничениях адаптера узла.
За регулирование размера передаваемых данных в соответствии с ограничениями адаптеров шины узла (HBA) отвечает драйвер класса. Однако порт SCSI предоставляет драйверу класса сведения, необходимые для выполнения этой задачи. Порт SCSI предоставляет эти сведения в дескриптор адаптера (STORAGE_ADAPTER_DESCRIPTOR) в ответ на запрос IOCTL IOCTL_STORAGE_QUERY_PROPERTY . Драйвер класса отвечает за разбиение запросов на блоки соответствующего размера на основе сведений, сообщаемых в этом дескрипторе.
Преобразование относительных адресов шины в логические адреса.
При запросе адаптеры предоставляют адреса относительно шины для портов ввода-вывода, регистров команд и регистров состояния управления. Однако водитель мини-порта не может использовать относительные адреса шины для связи со своим адаптером шины узла (HBA). Порт SCSI преобразует относительные адреса шины в логические, чтобы водители мини-портов могли получать доступ к адресам автобуса прозрачным образом. Для этого существует несколько причин.
Убедитесь, что устройство и все его базовые устройства включены (в состоянии питания устройства D0) перед запуском устройства.
Если устройство не готово к включению, порт SCSI помещает в очередь запрос D0 для этого устройства, пока устройство не будет готово.
Постановка в очередь асинхронных запросов от драйверов классов и их синхронная пересылка на целевое устройство.
Драйверам классов не нужно ждать завершения запроса перед отправкой следующего запроса. Порт SCSI берет на себя ответственность за постановку этих запросов в очередь, чтобы избежать перегрузки вычислительной мощности базового оборудования.
Поддержка внутреннего и внешнего управления внутренними очередями запросов ввода-вывода.
Большинство операций управления очередями инициируются самим портом SCSI. Например, порт SCSI замораживает очередь при возникновении ошибки и сообщает об ошибке драйверу класса, чтобы драйвер класса смог ответить перед обработкой дальнейших запросов. Однако порт SCSI также отвечает на запросы от драйвера класса или других драйверов более высокого уровня для блокировки, разблокировки, заморозки или разблокировки внутренней очереди запросов. Драйверы более высокого уровня могут заставить порт SCSI разблокировать внутреннюю очередь с помощью запроса SRB_FUNCTION_RELEASE_QUEUE. Описание того, что означает "заморозка", "блокировка" или "разблокировка" очереди, см. в разделе Управление очередью драйвера портов SCSI.
Преобразование ошибок, о которых сообщает устройство, в формат данных SCSI-2 sense для обработки драйвером класса.
Порт SCSI предоставляет службы драйверу мини-порта с помощью подпрограмм библиотеки портов SCSI. Модули записи драйверов мини-портов могут вызывать эти подпрограммы, а не кодировать функции, предоставляемые ими, в один монолитный драйвер порта. Ниже приведены некоторые из наиболее важных служб, предоставляемых с помощью этих процедур:
Драйвер мини-порта SCSI может делегировать множество операций инициализации, зависящих от ОС, подпрограмме библиотеки ScsiPortInitialize порта SCSI . Это делает драйвер порта SCSI более переносимым в разных версиях операционной системы. Описание обязанностей инициализации драйвера мини-порта SCSI см. в разделе Драйвер драйвера SCSI Miniport. Подпрограмма.
Драйверы мини-портов SCSI для устройств, отличных от PnP, избавлены от задачи поиска адаптеров и передачи их ресурсов диспетчеру PnP. Это делается в ScsiPortInitialize.
Драйверы мини-порта SCSI не инициализируют точки входа диспетчеризации в объекте драйвера. Драйвер порта SCSI делает это от имени драйвера мини-порта, когда драйвер мини-порта вызывает ScsiPortInitialize.
Драйверы мини-порта SCSI не преобразуют относительные адреса шины в логические с помощью HalTranslateBusAddress. Драйверы мини-портов SCSI делают это путем вызова ScsiPortGetDeviceBase.
Сводные сведения о подпрограммах библиотеки, которые порт SCSI делает доступными для драйверов мини-портов SCSI, см. в разделе Подпрограммы поддержки драйверов портов SCSI.