- •Системное программное обеспечение
- •Драйверы устройств в Windows NT
- •Структура Windows NT
- •Структура Windows NT
- •Структура Windows NT
- •Структура Windows NT
- •Структура Windows NT
- •Структура Windows NT
- •Структура Windows NT
- •Структура Windows NT
- •Драйверы устройств в Windows NT
- •Драйверы устройств в Windows NT
- •Драйверы устройств в Windows NT
- •Драйверы устройств в Windows NT
- •Драйверы устройств в Windows NT
- •Драйверы устройств в Windows NT
- •Драйверы устройств в Windows NT
- •Драйверы устройств в Windows NT
- •Драйверы устройств в Windows NT
- •Драйверы устройств в Windows NT
- •Драйверы устройств в Windows NT
- •Структура простейшего драйвера режима ядра в Windows NT
- •Структура простейшего драйвера режима ядра в Windows NT
- •Структура простейшего драйвера режима ядра в Windows NT
- •Структура простейшего драйвера режима ядра в Windows NT
- •Структура простейшего драйвера режима ядра в Windows NT
- •Структура простейшего драйвера режима ядра в Windows NT
- •Структура простейшего драйвера режима ядра в Windows NT
- •Структура простейшего драйвера режима ядра в Windows NT
- •Структура простейшего драйвера режима ядра в Windows NT
- •Структура простейшего драйвера режима ядра в Windows NT
- •Структура простейшего драйвера режима ядра в Windows NT
- •Лекция № 11 «Использование ассемблера с языками высокого уровня»
- •Использование ассемблера с языками высокого уровня
- •Использование ассемблера с языками высокого уровня
- •Использование ассемблера с языками высокого уровня
- •Использование ассемблера с языками высокого уровня
- •some_proc
- •Главный недостаток этого подхода — сложность создания функции с изменяемым числом параметров, аналогичных
- •Запись some_proc(a,b,c,d,e)
- •some_proc proc push bp
- •some_proc proc
- •эквивалентно
- •Таблица объясняет соглашения о передаче параметров. Например, передача параметров stdcall отличается и от
- •то реально компилятор пишет call _some_proc
- •Пример. C
- •Пример. Pascal
Драйверы устройств в Windows NT
Во многих случаях это приводит к необходимости:
•переустановки системы (DOS, Windows)
•пересборки ее ядра (в UNIX-системах).
Такое же различие есть и между ветками операционной системы Windows:
•Windows 9х
•Windows NT.
В первом случае процесс работы с драйверами происходит практически всегда как с отдельными "кирпичиками«.
Во втором дела обстоят намного хуже: множество (если не большинство) драйверов "вшито" в ядро.
Драйверы устройств в Windows NT
Список основных общих моментов в концепциях драйверов в Windows- и DOS-системах выглядит так:
•способ работы с драйверами как файлами (функции, используемые при взаимодействии с файлами, практически идентичны таковым при взаимодействии с драйверами (имеется в виду лексически): open, close, read и т. д.);
•драйвер, как легко заменяемая часть ОС;
•идентичность механизма IOCTL (Input/Output Control Code, код управления вводом/выводом) — запросов.
Драйверы устройств в Windows NT
Windows NT поддерживает множество типов драйверов устройств:
драйверы пользовательского режима (User-Mode Drivers):
драйверы виртуальных устройств (Virtual Device Drivers, VDD) — используются для поддержки программ MS-DOS;
драйверы принтеров (Printer Drivers);
драйверы режима ядра (Kernel-Mode Drivers):
драйверы файловой системы (File System Drivers) — осуществляют ввод/вывод на локальные и сетевые диски;
унаследованные драйверы (Legacy Drivers) — написаны для предыдущих версий Windows NT;
драйверы видеоадаптеров (Video Drivers) — для графических операций;
Драйверы устройств в Windows NT
драйверы потоковых устройств (Streaming Drivers) — осуществляют ввод/вывод потокового видео и звука;
WDM-драйверы (Windows Driver Model) — поддерживают технологию Plug and Play и управления электропитанием. Модель пришла на смену предыдущей среде разработки
драйверов VxD (virtual device driver) для Windows 9x.
Далее стоит отметить, что драйверы бывают одно- и многоуровневыми.
Если драйвер является многоуровневым, то обработка запросов ввода/вывода распределяется между несколькими драйверами, каждый из которых выполняет свою часть работы. Между этими драйверами можно "поставить" любое количество фильтр-драйверов (filter-drivers).
Драйверы устройств в Windows NT
При обработке запроса данные идут от вышестоящих драйверов (higher-level driver) к нижестоящим (lower-level driver), а при возврате результатов — наоборот.
Ну и, понятно, одноуровневый (monolithic) драйвер просто является противоположностью многоуровневому.
Для технологии Plug and Play существуют три уровня-типа драйверов:
•шинные драйверы;
•фильтр-драйверы;
•функциональные драйверы.
На низшей ступени находится шинный драйвер, выше него — функциональный драйвер. Между и над ними находится определенное количество фильтр-драйверов.
Драйверы устройств в Windows NT
Поскольку, в большинстве случаев, имеется всего один процессор, а приложений, которые нужно выполнять много, то естественно, что для создания иллюзии одновременного их выполнения надо последовательно подключать эти приложения к процессору, причем очень быстро. Эта процедура называется переключением контекста потока (thread context switching). Так как переключение контекста операция не самая быстрая, то драйверы, по соображениям лучшей производительности, как правило, не создают своих потоков. Но код драйвера все же нужно выполнять. Поэтому, для экономии времени на переключение контекстов, драйверы выполняются в режиме ядра в одном из трех контекстов:
•в контексте пользовательского потока, инициировавшего запрос ввода-вывода;
Драйверы устройств в Windows NT
•в контексте системного потока режима ядра (эти потоки принадлежат процессу System);
•как результат прерывания (а значит, в контексте потока,
который был текущим на момент прерывания).
Windows NT использует схему приоритетов прерываний, известную под названием уровни запросов прерываний (interrupt request levels, IRQL). Всего существует 32 уровня, с 0 (passive), имеющего самый низкий приоритет, по 31 (high), имеющего самый высокий. Причем, прерывания с IRQL=0 по IRQL=2 являются программными, а прерывания с IRQL=3 по IRQL=31 являются аппаратными. Прерывание с уровнем IRQL=0, строго говоря, прерыванием не является, т.к. оно не может прервать работу никакого кода На этом IRQL выполняются потоки пользовательского
Драйверы устройств в Windows NT
Одновременно с операционной системой Windows Vista компания Microsoft выпустила и новую драйверную модель WDF (Windows Driver Foundation).
В разработку этой модели положены следующие принципы, многие из которых уже реализованы:
•Новая драйверная модель должна быть простой и гибкой. Простой — для облегчения процесса написания драйверов, гибкой — для быстрой "адаптации" к новым возможностям системы.
•Драйверная модель не должна зависеть от основных компонентов ОС (их изменение, добавление и т. д. не должно "тянуть" за собой проблемы и/или вынужденные изменения при разработке драйверов).
Драйверы устройств в Windows NT
•Драйверная модель должна поддерживать версионность, т. е. один исполняемый файл драйвера должен работать на разных версиях ОС.
•Драйверная модель должна быть легко расширяемой.
•Драйверная модель должна позволять большинству драйверов успешно работать в пользовательском режиме.
•Драйверная модель должна поддерживать написание драйверов на языках высокого уровня.
•Ну и, наконец, драйверная модель должна уметь предоставлять для каждого драйвера отдельное так называемое "защищенное окружение" (protected environment), или, иными словами, уметь изолировать драйвер (driver isolation).
Драйверы устройств в Windows NT
Проект WDF от Microsoft состоит из 3 частей:
• среда для написания драйверов режима ядра (Kernel-Mode Driver Framework (KMDF));
•среда для написания драйверов пользовательского режима (User-Mode Driver Framework (UMDF));
•инструменты для проверки и отладки драйверов. Пожалуй, самое главное в WDF — то, что эта
модель в полной мере поддерживает объектно- ориентированное программирование (наборы событий,
свойства и т. д. (объектная модель WDF)).
