Типы драйверов и характеристики
В NT существует два типа драйверов: драйверы пользовательского режима и драйверы режима ядра. В дальнейшем, говоря "драйвер", мы будем подразумевать драйвер режима ядра. Такие драйверы являются частью исполнительной системы, а более точно – элементами диспетчера ввода/вывода (архитектура NT и ее компоненты будут обсуждаться ниже). Как следует из названия, при работе драйвера режима ядра процессор находится в режиме ядра (RING 0 – см. любой справочник по защищенному режиму работы процессора).
Драйвер NT располагается в файле с расширением .sys и имеет стандартный РЕ-формат (РЕ – Portable Executable).
Драйверы реализованы как самостоятельные модули с четко определенным интерфейсом взаимодействия с ОС. Все драйверы имеют определенный системой набор стандартных функций драйвера (standard driver routines) и некоторое число внутренних функций, определенных разработчиком.
Драйверы режима ядра можно разбить на три типа:
- драйверы высшего уровня (highest level drivers);
- драйверы промежуточного уровня (intermediate drivers);
- драйверы низшего уровня (lowest level drivers).
Как будет показано ниже, такое разбиение обусловлено многоуровневой моделью драйверов (layered driver model). Для сохранения общности изложения, монолитный драйвер можно включить в эту схему, хотя он не использует многоуровневую архитектуру. В этом случае он будет "гибридом" – драйвером, принадлежащим одновременно к нескольким типам. Например, монолитный драйвер, имеющий интерфейс с приложением и осуществляющий доступ к оборудованию, будет одновременно драйвером высшего и низшего уровня.
Кроме того, в зависимости от назначения драйвера, он может являться каким-либо специализированным драйвером, то есть удовлетворять дополнительному набору требований к своей структуре.
Можно привести следующие типы специализированных драйверов:
- драйверы файловой системы;
- сетевые драйверы.
Отдельно необходимо упомянуть архитектуру WDM – Windows Driver Model. Эта архитектура позволяет создавать драйверы для Windows 98 и Windows 2000, совместимые на уровне двоичного кода.
Характеристики драйверов – это совокупность следующих вопросов:
- Поддержка динамической загрузки и выгрузки (однако могут быть исключения).
- Необходимость следовать определенным протоколам взаимодействия с системой, нарушение которых чаще всего ведет к "синему экрану" (Blue Screen Of Death, BSOD).
- Возможность "наслоения" драйверов поверх друг друга. В Win2000 эта возможность возведена в абсолют, хотя монолитные драйвера все еще поддерживаются.
- Поскольку драйвера являются частью ядра ОС, они могут сделать с системой все, что угодно, поэтому основная проблема – это закрытость архитектуры ОС.