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


Архитектура драйвера хранилища Windows

В Windows периферийные устройства хранилища имеют драйверы классов и фильтров. Эти драйверы действуют как интерфейс между любыми промежуточными или самыми высокими уровнями драйверов, наложенных над ними, и драйвером порта, предоставленным системой.

Запросы ввода-вывода из пользовательского приложения или компонента ядра достигают драйверов класса хранилища с помощью системных служб ввода-вывода и одного или нескольких промежуточных или высших драйверов уровня, таких как драйвер файловой системы. Драйверы классов хранилища преобразовывают стандартные IRPs, которые они получают в irPs с системным блоками запросов на хранение, (SRB) перед отправкой каждого IRP в следующий нижний драйвер. Драйвер порта хранения преобразует SRB из драйверов класса в команды для конкретной шины, которые отправляются в адаптер шины хранилища (HBA) через драйвер шины ввода-вывода и, возможно, один или несколько драйверов фильтров.

На следующем рисунке показана многоуровневая архитектура драйверов хранилища Windows.

диаграмма, иллюстрирующая многоуровневую архитектуру драйверов хранилища операционных систем на базе NT.

Начиная с нижней части рисунка:

  1. Драйвер порта хранения определяет интерфейс для всех драйверов классов хранилища Windows, включая системные драйверы, такие как диск, лента и DVD-диск. Этот интерфейс порта/класса изолирует драйверы классов от специфических для HBA требований к адаптерам, к которым подключены их устройства. Драйвер порта хранилища также синхронизирует доступ к шине для всех драйверов устройств на соответствующем HBA. Система предоставляет драйверы портов хранения для адаптеров SCSI, IDE, USB и IEEE 1394.

    Драйвер порта хранилища получает СРВ от следующего более высокого драйвера (драйвера класса хранилища или драйвера фильтра взаимодействия) и обрабатывает их следующим образом:

    • Драйвер порта хранилища передает SBS с CDBS в операционную систему независимо от операционной системы, драйвер минипорта Storport. Этот минипорт-драйвер динамически связан с соответствующим драйвером порта и обеспечивает аппаратную поддержку конкретного адаптера шины хоста (HBA). Сведения о реализации минипорт-драйвера см. в драйверах Минипорта Storport.
    • Драйвер порта хранения для устаревшей шины IDE/ATAPI или IEEE 1394 преобразует СРБ, полученные от драйвера класса хранения, в формат, необходимый для работы с базовым адаптером. Например, он может переупаковать CDB в соответствии с протоколом транспорта для конкретной шины. Или он может перевести их в другой формат, таким образом изолируя драйверы верхнего уровня от особенностей базовой шины.
  2. Драйвер фильтра хранилища верхнего или нижнего поддерживает функциональность, специфичную для определенных устройств, которую не предоставляет системный драйвер класса хранилища. Драйвер нижнего уровня фильтра отслеживает SRB и/или IRP, выданные драйвером класса хранилища. Он изменяет их по мере необходимости, прежде чем передавать их в следующий нижний драйвер, который может быть драйвером порта хранения или другим драйвером фильтра хранилища.

    Для получения информации о реализации фильтра-драйвера хранилища см. Драйверы фильтров хранилища.

  3. Драйвер класса хранилища , использует интерфейс порта/класса SCSI для управления устройством своего типа на любой шине, для которой система предоставляет драйвер порта хранения. Драйвер класса относится к определенному классу устройства, например, один драйвер класса может запускать все CD-ROM устройства на любой поддерживаемой шине; другой может управлять всеми дисками. Драйвер класса хранилища обрабатывает запросы ввода-вывода из пользовательских приложений или драйверов выше в стеке хранилища. Это делается путем создания SRB-объектов, содержащих CDB, и передачи этих SRB-объектов следующему драйверу (драйверу порта хранилища или промежуточному фильтрующему драйверу), будто устройство было SCSI-устройством.

    Реализация драйвера класса хранилища является прозрачной для драйверов верхнего уровня. Драйвер класса для устройства ленточного накопителя или устройства смены носителя реализуется как драйвер миникласса для конкретного устройства, который взаимодействует с системным драйвером класса. Системные драйверы классов для других устройств хранения, таких как диск и CD-ROM/DVD, реализуются в виде монолитных драйверов.

    Сведения о реализации драйвера класса хранилища можно найти в разделе Драйверы классов хранилища. Сведения о реализации драйвера миникласса для устройства смены носителей или ленточного накопителя см. в разделах Драйверы ленточных устройств и Драйверы устройств смены носителейсоответственно.

  4. Драйвер верхнего фильтра хранилища перехватывает IRP из пользовательских приложений и драйверов, расположенных выше в стеке хранилища. Затем он может изменить их перед передачей в следующий нижний драйвер (драйвер класса хранилища или другой драйвер фильтра хранилища). Драйверы фильтров обычно отслеживают производительность базового устройства.

Тип шины, к которой подключено устройство, и реализация драйвера порта хранения прозрачны для драйверов верхнего уровня.

Драйвер порта хранилища может быть реализован:

  • Согласно архитектуре драйверов портов/минипортов, таких как драйвер порта Storport или SCSI.
  • В качестве монолитного драйвера, который управляет одним стандартным оборудованием, например драйвером порта IDE/ATAPI.
  • Как драйвер фильтра, который преобразует SRB в формат, необходимый для другого стека драйверов, например драйвер порта IEEE 1394.

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