Архитектура драйвера службы хранилища Windows
Класс операционной системы Windows и драйверы фильтров для периферийных запоминающих устройств действуют как интерфейс между любыми драйверами промежуточного или верхнего уровня, размещенными над классом или драйвером фильтра, и драйвером порта, предоставляемым системой.
Запросы ввода-вывода от пользовательского приложения или компонента ядра достигают драйверов класса хранилища с помощью системных служб ввода-вывода и одного или нескольких драйверов среднего или высшего уровня, таких как драйвер файловой системы. Драйверы класса хранилища преобразуют стандартные irP, которые они получают в irP, с помощью системных блоков запросов SCSI ( SRB), содержащих блоки дескрипторов команд SCSI (CDB), перед отправкой каждого IRP в следующий драйвер ниже. Драйвер порта хранилища преобразует SDB-файлы из драйверов класса в команды, относящиеся к шине, которые он отправляет в HBA хранилища через драйвер шины ввода-вывода и, возможно, один или несколько драйверов фильтров.
На следующем рисунке показана многоуровневая архитектура драйверов хранилища Windows.
Начиная с нижней части рисунка, ниже описаны все типы драйверов хранилища.
Драйвер порта хранилища определяет интерфейс для всех драйверов класса хранения Windows, включая предоставляемые системой драйверы дисков, лент, CDROM, DVD-дисков и драйверов класса changer. Этот интерфейс порта или класса изолирует драйверы класса от конкретных требований адаптера шины узла, к которому подключены соответствующие устройства. Драйвер порта хранилища также синхронизирует доступ к шине для всех драйверов устройств на соответствующем адаптере безопасности. Система предоставляет драйверы портов хранения для адаптеров SCSI, IDE, USB и IEEE 1394.
Драйвер порта хранилища получает SDB от следующего более высокого драйвера (драйвер класса хранения или промежуточный драйвер фильтра) и обрабатывает их следующим образом:
- Драйвер порта хранилища для SCSI или другой шины передает SDB с CDB в независимый от операционной системы драйвер мини-порта Storport , который динамически связывается с соответствующим драйвером портов и обеспечивает поддержку конкретного адаптера HBA. Сведения о реализации драйвера мини-порта SCSI см. в статье Драйверы для мини-портов Storport.
- Драйвер порта хранилища для устаревшей шины IDE/ATAPI или IEEE 1394 преобразует SРБ, полученные от драйвера класса хранения, в формат, необходимый базовому адаптеру, например, переупаковка CDB в соответствии с транспортным протоколом шины или преобразование их в другой формат, тем самым изолируя драйверы верхнего уровня от особенностей базовой шины.
Верхний или нижний драйвер фильтра хранилища поддерживает функции для конкретного устройства, не предоставляемые системным драйвером класса хранения. Драйвер хранилища с более низким фильтром отслеживает SSP и (или) IRP, выданные драйвером класса хранения, и изменяет их по мере необходимости перед передачей в драйвер следующего ниже (драйвер порта хранения или другой драйвер фильтра хранилища).
Сведения о реализации драйвера фильтра хранилища см. в разделе Драйверы фильтров хранилища.
Драйвер класса хранения использует интерфейс порта или класса SCSI для управления устройством своего типа на любой шине, для которой система предоставляет драйвер порта хранилища. Драйвер класса относится к определенному классу устройств. Например, один драйвер класса может запускать все устройства CD-ROM в любой поддерживаемой шине; другой может управлять всеми дисковыми устройствами. Драйвер класса хранения обрабатывает запросы ввода-вывода от пользовательских приложений или драйверов выше в стеке хранилища, создавая SDB-файлы, содержащие CDB, и выдавая эти СРБ следующему ниже драйверу (драйверу порта хранения или промежуточному драйверу фильтра), точно так же, как если бы устройство было устройством SCSI.
Реализация драйвера класса хранения прозрачна для драйверов верхнего уровня. Драйвер класса для ленточного устройства или устройства среднего класса реализован как драйвер мини-класса для конкретного устройства, который связывается с драйвером класса, предоставляемым системой. Предоставляемые системой драйверы класса для других запоминающих устройств, таких как диск и CD-ROM/DVD, реализованы в виде монолитных драйверов.
Сведения о реализации драйвера класса хранения см. в разделе Драйверы класса хранилища. Сведения о реализации драйвера мини-класса ленты или устройства смены см. в разделах Драйверы ленты и Драйверы смены соответственно.
Драйвер хранилища верхнего фильтра перехватывает irP из пользовательских приложений и драйверов выше в стеке хранилища, а затем, возможно, изменяет их перед передачей в драйвер следующего ниже (драйвер класса хранения или другой драйвер фильтра хранилища). Драйверы фильтров обычно отслеживают производительность базового устройства.
Тип шины, к которой подключено устройство, и реализация драйвера порта хранения прозрачны для драйверов верхнего уровня. Драйвер порта хранилища может быть реализован в соответствии с архитектурой драйвера порта или мини-порта, например драйвер порта SCSI; как монолитный драйвер, который управляет одним стандартным оборудованием, таким как драйвер порта IDE/ATAPI; или в качестве драйвера фильтра, который преобразует srb в формат, необходимый для другого стека драйверов, например драйвер порта IEEE 1394.
Предоставляемый системой драйвер порта SCSI также может выступать в качестве интерфейса между драйвером класса хранения и драйвером мини-порта SCSI, который управляет устройством хранения, не поддерживающим SCSI, одного типа. Например, вместо написания драйвера для нового контроллера массива дисков модуль записи драйверов может значительно сэкономить разработку, разработку и отладку, написав псевдо-драйвер минипорта SCSI, который связывается с системным драйвером порта SCSI и использует предоставляемый им интерфейс. Такой драйвер мини-порта необходим для преобразования входящих команд SCSI в команды, относящиеся к конкретному устройству. С другой стороны, предоставляемые системой драйверы портов и классов выполняют много необходимых работ от имени псевдо-SCSI miniport, включая доступ к реестру во время инициализации, все ресурсы и объекты выделения, синхронизацию, предварительное выполнение запрошенных передач в соответствии с возможностями устройства мини-порта и повторные запросы.
Дополнительные сведения о SSP см. в справочнике по архитектуре драйвера Kernel-Mode. Сведения о типах устройств см. в соответствующих наборах команд в стандартах INCITS SCSI-3.