Windows включает драйвер класса дисков (WindowsSystem32Drivers Disk.sys), реализующий стандартную функциональность дисков. Windows также предоставляет разнообразные порт-драйверы дисков. Например, Scsi-port.sys — это порт-драйвер дисков, подключаемых к SCSI-шине, a Atapi.sys — порт-драйвер для систем на базе IDE. B Windows Server 2003 введен порт драйвер Storport.sys, заменяющий Scsiport.sys. Storport.sys был разработан для реализации функциональности высокопроизводительных аппаратных RAID-контроллеров и адаптеров Fibre ChanneI. Модель Storport аналогична Scsiport, что упрощает изготовителям задачу переноса существующих SCSI-минипортов под Storport. Минипорт-драйверы, создаваемые разработчиками для использования Storport, используют преимущества нескольких механизмов Storport, повышающих производительность, в частности поддержки параллельной инициации и завершения запросов на ввод-вывод в многопроцессорных системах, более управляемой архитектуры очереди запросов на ввод-вывод и выполнения большей части кода при более низком уровне IRQL, чтобы свести к минимуму длительность маскирования аппаратных прерываний.
Драйверы Scsiport.sys и Atapi.sys реализуют версию алгоритма планирования дисковых операций, известную под названием C–LOOK. Эти драйверы помещают запросы на дисковый ввод-вывод в списки с сортировкой по первому сектору, которому адресован запрос; этот сектор также называется номером логического блока (logical block number, LBN). C помощью функций KeInsertByKeyDeviceQueue и KeRemoveByKeyDeviceQueue (документированных в Windows DDK) они представляют запросы ввода-вывода как элементы (items) и используют начальный сектор запроса в качестве ключа, требуемого этими функциями. Обслуживая запросы, драйвер проходит по списку с самого младшего сектора до самого старшего. Достигнув конца списка, он возвращается в его начало, так как за это время в список могли быть вставлены новые запросы. Если адреса запросов распределены по всему диску, этот подход приводит к постоянному перемещению головок из начальной области диска к его концу. Storport.sys не реализует планирование дисковых операций, поскольку он в основном применяется для управления вводом-выводом, адресованным массивам накопителей, где нет четкого определения начала и конца диска.
C Windows поставляются некоторые минипорт-драйверы, включая Aha 154x.sys для SCSI-контроллеров семейства Adaptec 1540. B системах, где установлено минимум одно IDE-устройство на основе ATAPI, функциональность минипортов предоставляют драйверы Pciidex.sys и Pciide.sys. Один или несколько упомянутых драйверов присутствует в большинстве систем Windows.
Драйверы iSCSI
iSCSI — это транспортный протокол для дисковых устройств, который интегрирует протокол SCSI с TCP/IP, благодаря чему компьютеры могут взаимодействовать с блочными накопителями, включая диски, по IP-сетям. Архитектура сети устройств хранения данных (storage area networking, SAN) обычно базируется на сети Fibre ChanneI, но администраторы могут использовать iSCSI для создания сравнительно недорогих SAN на основе таких сетевых технологий, как гигабитная Ethernet, что позволяет обеспечить масштабируемость, защиту от катастроф, эффективное резервное копирование и защиту данных. B Windows поддержка iSCSI реализуется в виде Microsoft iSCSI Software Initiator, который можно скачать с сайта Microsoft и который работает в Windows 2000, Windows XP и Windows Server 2003.
Microsoft iSCSI Software Initiator включает несколько компонентов.
• Initiator (инициатор) Этот необязательный компонент, состоящий из порт-драйвера iSCSI (WindowsSystem32DriversIscsiprt.sys) и мини-порт-драйвера (WindowsSystem32DriversMsiscis.sys), использует драйвер TCP/IP для реализации программного iSCSI поверх стандартных Ethernet и TCP/IP при наличии сетевых адаптеров с аппаратным ускорением сетевых операций.
• Initiator Service (служба инициатора) Эта служба, реализованная в WindowsSystem32Iscsiexe.exe, управляет обнаружением и защитой всех инициаторов iSCSI, а также инициацией и завершением сеансов. Функциональность обнаружения устройств iSCSI реализована в WindowsSystem32Iscsium.dll и соответствует спецификации протокола Internet Storage Name Service (iSNS).
• Управляющие приложения K ним относятся IscsicIi.exe (утилита командной строки для управления соединениями iSCSI-устройств и их защитой) и соответствующий апплет для Control PaneI (Панель управления). Некоторые изготовители выпускают iSCSI-адаптеры с аппаратным ускорением операций по протоколу iSCSI. Служба инициатора работает с этими адаптерами, и они должны поддерживать iSNS, чтобы все iSCSI-устройства, в том числе обнаруженные как службой инициатора, так и iSCSI-оборудова-нием, можно было распознавать и контролировать через стандартные интерфейсы Windows.
МРIO-драйверы
У большинства дисковых устройств только один путь (path) между ними и компьютером — набор адаптеров, кабелей и коммутаторов. B серверах, требующих высокого уровня готовности к работе, применяются решения с несколькими путями — между компьютером и диском существует более одного набора соединительного оборудования, чтобы при аварии одного пути система все равно могла бы обращаться к диску по альтернативному пути. Однако без поддержки со стороны операционной системы или драйверов диск с двумя путями будет виден как два разных диска. Windows включает поддержку ввода-вывода по нескольким путям (muItipath I/O, MPIO) для управления дисками с несколькими путями как одним диском; эта поддержка опирается на сторонние драйверы — модули, специфичные для конкретного устройства (device-specific modules, DSM). Эти модули берут на себя всю специфику управления путями, в том числе политику балансировки нагрузки, на основе которой выбирается путь передачи запросов ввода-вывода, и механизмы обнаружения ошибок, уведомляющие Windows об аварии того или иного пути. Поддержка MPIO доступна для Windows 2000 Server, Advanced Server, Datacenter Server и Windows Server 2003 в виде Microsoft MPIO
Driver Development Kit, который лицензируется поставщиками аппаратного и программного обеспечения.
B стеке драйверов внешней памяти Windows MPIO (рис. 10-2) Multipath Disk Driver Replacement (WindowsSystem32DriversMpdev.sys) заменяет функциональность стандартного драйвера класса Disk.sys. Mpdev.sys захватывает во владение объект «устройство», представляющий диски с несколькими путями, чтобы для таких дисков существовал лишь один объект «устройство». Кроме того, этот драйвер отвечает за поиск подходящего DSM для управления путями к устройству. Multipath Bus Driver (WindowsSystem32DriversMpio.sys) управляет соединениями между компьютером и устройством, в том числе обеспечивая управление электропитанием данного устройства. Mpdev.sys уведомляет Mpio.sys о наличии устройств, которые тот должен контролировать. Наконец, Multipath Port Filter (WindowsSystem32 DriversMpsfltr.sys) размещается поверх порт-драйвера для диска с несколькими путями и управляет информацией, передаваемой вверх по стеку устройств.
ЭКСПЕРИМЕНТ: наблюдение за вводом-выводом на физическом диске
C помощью механизма Event Tracing for Windows (см. главу 3) драйвера класса дисков утилита Diskmon от Sysinternals ведет мониторинг активности ввода-вывода на физических дисках и отображает ее в своем окне. Содержимое этого окна обновляется раз в секунду. Для каждой операции Diskmon показывает время, длительность, номер целевого диска, тип и смещение, а также длину.
Объекты «устройство» для дисков
Драйвер класса дисков создает объекты «устройство», представляющие диски и дисковые разделы. Имена таких объектов имеют вид DeviceHarddiskADRX, где X — номер диска. Для идентификации разделов и создания объектов «устройство», представляющих эти разделы, драйвер класса дисков в Windows 2000 использует функцию IoReadPartitionTable диспетчера ввода-вывода, а в Windows XP и Windows Server 2003 — функцию IoReadParitition-TableEx. Драйвер класса дисков вызывает одну из этих функций для каждого диска, представленного минипорт-драйвером драйверу класса на ранних стадиях загрузки системы. A функция инициирует дисковый ввод-вывод на уровне секторов, поддерживаемый драйвером класса, порт- и минипорт-драйверами, для считывания MBR- или GPT-таблицы разделов (об этом мы расскажем позже) и для формирования внутреннего представления жестких разделов диска. Драйвер класса дисков создает объекты «устройство», представляющие все главные разделы (в том числе логические диски внутри дополнительных разделов), которые этот драйвер получает IoReadPartitionTable или IoReadParititionTableEx. Вот пример имени объекта раздела:
DeviceHarddisk0DP(1)0x7e000-0x7ff50c00+2
Это имя идентифицирует первый раздел первого диска системы. Два первых шестнадцатеричных числа (0x7e000 и 0x7ff50c00) определяют начало и длину раздела, а последнее число — внутренний идентификатор, назначенный драйвером класса.
Для совместимости с приложениями, использующими правила именования, принятые в Windows NT 4, драйвер класса дисков формирует для имен в формате Windows NT 4 символьные ссылки на объекты «устройство», созданные драйвером. Например, драйвер класса создает ссылки DeviceHarddisk0PartitionO на DeviceHarddisk0DRO и DeviceHarddisk0Partitionl на объект «устройство» первого раздела первого диска. B Windows драйвер класса создает такие же символьные ссылки, представляющие физические диски, созданные в системах под управлением Windows NT 4. Так, ссылка ??PhysicalDrive0 указывает на DeviceHarddisk0DRO. Ha рис. 10-3 показана утилита Winobj (от Sysinternals), которая отображает содержимое каталога Harddisk базового диска.