- •Структура wdm-драйвера
- •Ознакомиться с материалом, ответить на контрольные вопросы
- •2000 Поставляется с двумя подсистемами, а в Windows xp, кроме Win32,
- •1.2 Типы драйверов
- •1.4 Иерархия устройств и драйверов
- •IoInvalidateDeviceRelations, сообщая диспетчеру PnP список
- •1.5 Порядок загрузки драйверов
2000 Поставляется с двумя подсистемами, а в Windows xp, кроме Win32,
не поставляются никакие другие подсистемы окружения.
К компонентам операционной системы, работающим в режиме ядра,
относятся:
− исполнительная система, обеспечивающая базовыми сервисами в части
управления памятью, процессами и потоками, вводом-выводом и т.д.;
− ядро, которое содержит обобщенный набор функций операционной
системы, скрывающий различия между аппаратными платформами (на
разных этапах развития операционной системы Windows NT
поддерживались не только процессоры Intel, но и MIPS, Alpha AXP,
Motorola PowerPC). Ядро предоставляет процедуры/функции и базовые
объекты, используемые исполнительной системой и драйверами для
реализации структур и функций более высокого уровня. К таким
функциям относятся планирование потоков, диспетчеризация прерыва-
ний, синхронизация процессов и т.д.;
− драйверы устройств;
− уровень аппаратных абстракций (Hardware Abstraction Layer, HAL) —
набор низкоуровневых функций (около 92), обеспечивающий
стандартный интерфейс взаимодействия с аппаратно-зависимыми
элементами для функций, вызываемых компонентами ядра, драйверов и
исполнительной системы, позволяющий абстрагироваться от того, на ка-
кой конкретно элементной базе (чипе контроллера прерывания, контроллера ПДП) реализовано выполнение доступа к шине, таймеру и т.д.;
− подсистема поддержки окон и графики.
Драйверы устройств в Windows, в отличие от DOS, для поддержки
переносимости не обращаются к оборудованию напрямую, а используют функции, предоставляемые HAL.
Драйверы устройств режима ядра делятся на следующие основные категории:
− драйверы файловой системы (например сетевые редиректоры и серверы).
Не стоит понимать буквально, что речь идет только о файловой системе
операционной системы. На самом деле многие физические устройства
(например COM-порты) представляются в системе как файлы, и
обращение к ним осуществляется посредством вызова функций, как к
обычным файлам, но со специфическими параметрами. Далее уже
драйверы файловой системы, получившие запрос на ввод-вывод,
определяют, о каком устройстве идет речь, и вызывают соответствующие
физическому устройству драйверы следующего уровня;
− драйверысподдержкой Plug-and-Play (PnP) и ACPI (Advanced Configuration
Power Management interface — усовершенствованный интерфейс
управления конфигурацией и энергопотреблением);
− драйверы, не поддерживающие спецификации PnP и ACPI (например
драйверы протоколов TCP/IP, IPX/SPX и т.д.), которые расширяют
функциональность системы, предоставляя доступ из режима пользова-
теля к системным сервисам и драйверам режима ядра.
В свою очередь, в каждой из категорий есть группы драйверов, которые
различаются в зависимости от модели устройства и места драйверов в цепочке обработки запроса на обслуживание операций ввода-вывода.
Начиная с Windows 2000, была введена поддержка PnP и энергосберегаю-
щих технологий (ACPI), что привело к созданию модели драйверов, называемой Windows Driver Model (WDM). Здесь речь идет о линейке операционных систем NT, хотя модель драйверов WDM и была ранее реализована в Windows 98 и Windows Millennium Edition, операционная система Windows 2000 и более поздние версии линейки NT поддерживают и так называемые унаследованные драйверы (NT4), естественно, с некоторой потерей функциональности. Модель WDM предусматривает существование трех типов драйверов:
− драйвер шины. Интересным моментом является то, что, в отличие от
операционной система NT4, Windows 2000 и выше, позволяют
реализовать поддержку новых типов шин, не поддерживаемых самой
операционной системой, не путем создания своего HAL (DLL), а всего
лишь добавлением своего драйвера шины. Это крайне существенно для
поставщиков OEM-оборудования;
− функциональный драйвер;
− драйвер фильтра.
В рамках обобщения понятия устройства в Windows существует понятие
класса устройств. Введение этого уровня абстракций сопровождается
неизбежным появлением типа драйверов, отвечающих за обслуживание устройств одного класса (например CD-ROM), и драйверов, отвечающих за решение того или иного уровня взаимодействия с конкретным оборудованием. В рамках этого деления существуют драйверы:
− классов устройств;
− порт-драйверы;
− минипорт-драйверы.
Драйверы устройств в операционной системе Windows могут работать как в
режиме ядра, так и в пользовательском режиме. К последним относятся:
− драйверы виртуальных устройств (VDD);
− драйверы принтеров.
Важнейшим компонентом исполнительной системы, отвечающим за связь с
устройствами, является подсистема ввода-вывода. Построение подсистемы ввода-вывода, как и других компонентов операционной системы Windows призвано обеспечить максимальную устойчивость системы в целом. Поэтому в соответствии с общей доктриной разделения ответственности, связанной с
режимами работы в операционной системе Windows, приложения пользователя не могут обращаться к устройствам (драйверам) напрямую, а лишь через посредников в лице диспетчеров. Некоторые компоненты подсистемы и диспетчеры, как, например, диспетчер Plug-and-Play, работают как в пользовательском режиме, так и в режиме ядра, но в целом вся подсистема и, в частности, ееглавный компонент — диспетчер ввода-вывода работает в режиме ядра. В некотором промежуточном положении (с точки зрения доступности из разных режимов) оказываются inf- и cat-файлы (хранят цифровые подписи,удостоверяющие аттестацию лаборатории Microsoft WHQL — Microsoft Windows HardwareQualityLab) иреестр. Диспетчер ввода-вывода не только обеспечивает
взаимосвязь между приложениями пользователя и драйверами устройств, но
также предоставляет общий для драйверов код, используемый при обработке
запросов, что существенно влияет на минимизацию кода самих драйверов. Он также обеспечивает управление буферами запросов ввода-вывода и при
необходимости вызовы одним драйвером других для организации обработки
запроса по цепочке. Упрощенная схема организации подсистемы ввода-вывода [2] изображена на рисунке 1.3.
Рисунок 1.3 – Компоненты подсистемы ввода-вывода
Подсистема ввода-вывода Windows проектировалась с целью обеспечения
максимальной гибкости, как с точки зрения возможности ее расширения
драйверами специфических устройств, так и с учетом поддержки максимального абстрагирования устройств для прикладных приложений. Важными моментами обеспечения подобной функциональности являются возможности динамической загрузки (явной или на основе перечисления) и выгрузки драйверов, обобщенный вид формируемых структур запросов на ввод-вывод и диспетчеризация. Одним из инструментов регистрации, запуска, останова и выгрузки драйверов служит механизм управления сервисами.
