Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций СПО 31-8-13.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
970 Кб
Скачать
☆

Тема 1.6 Структура ms Windows и драйверы режима ядра

Упрощенная версия архитектуры MS Windows показана на рис. 1-30. Данная схема не отражает всех деталей архитектуры (например, здесь не показаны уровни сетевых компонентов и различных типов драйверов устройств).

Рисунок 1-30 –упрощенная архитектура MS Windows

На рис. 1-30 линия разделяет те части Windows, которые выполняются в режиме ядра и в пользовательском режиме. Прямоугольники над этой линией соответствуют процессам пользовательского режима, а компоненты под ней — сервисам режима ядра. Потоки пользовательского режима выполняются в защищенных адресных пространствах процессов (хотя при выполнении в режиме ядра они получают доступ к системному пространству). Таким образом, процессы поддержки системы, сервисов, приложений и подсистем окружения имеют свое адресное пространство. Существует четыре типа пользовательских процессов:

  • фиксированные процессы поддержки системы (system support processes) — например, процесс обработки входа в систему и диспетчер сеанcов, не являющиеся сервисами Windows (т. е. не запускаемые диспетчером управления сервисами);

  • процессы сервисов (service processes) — носители Windows-сервисов де Task Scheduler и Spooler. Многие серверные приложения Windows, пример Microsoft SQL Server и Microsoft Exchange Server, тоже включают компоненты, выполняемые как сервисы;

  • пользовательские приложения (user applications) — бывают шести типов- для 32-разрядной Windows, 64-разрядной Windows, 16-разрядной Windows 3.1, 16-разрядной MS-DOS, 32-разрядной POSIX и 32-разрядной OS/2;

  • подсистемы окружения (environment subsystems) — реализованы как часть поддержки среды операционной системы, предоставляемой пользователям и программистам. Изначально Windows NT поставлялась с тремя подсистемами окружения: Windows, POSIX и OS/2. Последняя была изъята в Windows 2000. Что касается Windows XP, то в ней поставляется только подсистема Windows — улучшенная подсистема POSIX доступна как часть бесплатного продукта Services for UNIX.

В Windows пользовательские приложения не могут вызывать сервисы операционной системы напрямую, вместо этого они работают с одной или несколькими DLL подсистем. Их назначение заключается в трансляции документированных функций в соответствующие внутренние (и обычно недокументированные) вызовы системных сервисов Windows. Трансляция может осуществляться как с помощью сообщения, посылаемого процессу подсистемы окружения, обслуживающему пользовательское приложение, так и без него.

Windows включает следующие компоненты режима ядра.

  • Исполнительная система (executive) Windows, содержащая базовые сервисы операционной системы, которые обеспечивают управление памятью, процессами и потоками, защиту, ввод-вывод и взаимодействие между процессами.

  • Ядро (kernel) Windows, содержащее низкоуровневые функции операционной системы, которые поддерживают, например, планирование потоков, диспетчеризацию прерываний и исключений, а также синхронизацию при использовании нескольких процессоров. Оно также предоставляет набор процедур и базовых объектов, применяемых исполнительной системой для реализации структур более высокого уровня.

  • Драйверы устройств (device drivers), в состав которых входят драйверы аппаратных устройств, транслирующие пользовательские вызовы функций ввода-вывода в запросы, специфичные для конкретного устройства, а также сетевые драйверы и драйверы файловых систем.

  • Уровень абстрагирования от оборудования (hardware abstraction layer HAL), изолирующий ядро, драйверы и исполнительную систему Windows от специфики оборудования на данной аппаратной платформе (например, от различий между материнскими платами)

  • Подсистема поддержки окон и графики реализует функции графического пользовательского интерфейса (GUI) – поддержку окон, элементов управления пользовательского интерфейса и отрисовку окон.

Драйверы режима ядра, их возможности

Типы драйверов устройств

Windows поддерживает множество типов драйверов устройств и сред их программирования. Среды программирования могут различаться даже для драйверов одного типа — в зависимости от типа устройства, для которого предназначен драйвер. Драйверы могут работать в двух режимах: в пользовательском или в режиме ядра. Windows поддерживает несколько типов драйверов пользовательского режима:

  • Драйверы виртуальных устройств (virtual device drivers, VDD) Используются для эмуляции 16-разрядных программ MS-DOS. Они перехватывают обращения таких программ к портам ввода-вывода и транслируют их в вызовы Windows-функций ввода-вывода, передаваемые реальным драйверам устройств. Поскольку Windows является полностью защищенной операционной системой, программы MS-DOS пользовательского режима не могут напрямую обращаться к аппаратным средствам - они должны делать это через драйверы устройств режима ядра.

  • Драйверы принтеров Драйверы подсистемы Windows, которые транслируют аппаратно-независимые запросы на графические операции в команды, специфичные для принтера. Далее эти команды обычно направляются драйверу режима ядра, например драйверу параллельного порта (Parportsys) или драйверу порта принтера на USB-шине (Usb-print.sys).

Драйверы, работающие в режиме ядра, можно разбить на несколько основных категорий.

  • драйверы файловой системы Принимают запросы на ввод-вывод исполняют их, выдавая более специфические запросы драйверам устройств массовой памяти или сетевым драйверам.

  • PNP-драйверы. Драйверы, работающие с оборудованием и интегрируемые с Диспетчерами электропитания и РпР. В их число входят драйверы для устройств массовой памяти, видеоадаптеров, устройств ввода и сетевых адаптеров.

  • драйверы, не отвечающие спецификации Plug and Play - расширени ядра. Расширяют функциональность системы, предоставляя доступ из пользовательского режима к сервисам и драйверам режима ядра. Они не интегрируются с диспетчерами РпР и электропитания. К ним, в частности, относятся драйверы протоколов.

Категория драйверов режима ядра подразделяется на группы в зависимости от модели, на которой они основаны, и их роли в обслуживании запросов к устройствам.

WDM-драйверы

Это драйверы устройств, отвечающие спецификации Windows Driver Model (WDM). WDM требует от драйверов поддержки управления электропитанием, Plug and Play и WMI. Большинство драйверов Plug and Play построено на модели WDM. Эта модель реализована в Windows, Windows 98 и Windows Millennium Edition, поэтому WDM-драйверы этих операционных систем совместимы на уровне исходного кода. Существует три типа WDM-драйверов.

  • Драйверы шин. Управляют логическими или физическими шинами Примеры шин - PCMCIA, PCI, USB, IEEE 1394, ISA. Драйвер шины отвечает за распознавание устройств, подключенных к управляемой им шине, оповещение о них диспетчера РпР и управление параметрами электропитания шины.

  • Функциональные драйверы. Управляют конкретным типом устройств. Драйверы шин представляют устройства функциональным драйверам через диспетчер РпР. Функциональным считается драйвер, экспортирующий рабочий интерфейс устройства операционной системе. Как правило, это драйвер, больше других знающий о функционировании определенного устройства.

  • Драйверы фильтров Занимающие более высокий логический уровень, чем функциональные драйверы, они дополняют функциональность или изменяют поведение устройства либо другого драйвера. Так, утилиту для перехвата ввода с клавиатуры можно реализовать в виде драйвера фильтра клавиатуры, расположенного на более высоком уровне, чем функциональный драйвер клавиатуры.

В WDM ни один драйвер не отвечает за все аспекты управления конкретным устройством. Драйвер шины определяет изменения в составе на шине (при подключении и отключении устройств), помогает диспетчеру РпР в перечислении устройств на шине, обращается к cпeцифичным для шины регистрам и в некоторых случаях управляет электропитанием подключенных к шине устройств. К аппаратной части устройства обращается только функциональный драйвер.

Многоуровневые драйверы

Поддержка индивидуального устройства часто распределяется между несколькими драйверами, каждый из которых обеспечивает часть функциольности, необходимой для нормальной работы устройства. Кроме WDM-драйверов шин, функциональных драйверов и драйверов фильтров, оборудование могут поддерживать и следующие компоненты.

  • драйверы классов устройств (class drivers) Реализуют обработку ввода-вывода для конкретного класса устройств, например дисковых устройств, ленточных накопителей или приводов CD-ROM, где аппаратные интерфейсы стандартизированы и один драйвер может обслуживать аналогичные устройства от множества производителей.

  • порт-драйверы (port drivers) Обрабатывают запросы на ввод-вывод, специфичные для определенного типа порта ввода-вывода, например SCSI. Порт-драйверы реализуются как библиотеки функций режима ядра, а не как драйверы устройств.

  • минипорт-драйверы (miniport drivers) Преобразуют универсальные запросы ввода-вывода к порту конкретного типа в запросы, специфичные для адаптера конкретного типа, например для SCSI-адаптера. Минипорт-драйверы являются истинными драйверами устройств, которые импортируют функции, предоставляемые порт-драйвером,

Рассмотрим пример, который демонстрирует, как работают драйверы устройств. Драйвер файловой системы принимает запрос на запись данных в определенное место конкретного файла. Он преобразует его в запрос на запись определенного числа байтов по определенному «логическому» адресу на диске, а затем передает этот запрос (через диспетчер ввода-вывода) драйверу диска. Последний в свою очередь преобразует запрос в физический адрес на диске (цилиндр/дорожка/сектор) и позиционирует головки дискового устройства для записи данных.

Структура драйвера

Управление работой драйверов осуществляет подсистема ввода-вывода.

Драйвер устройства состоит из набора процедур, вызываемых на различных этапах обработки запроса ввода-вывода.

Основные процедуры драйвера показаны на рис. 1-31.

Рисунок 1-31 – основные процедуры драйвера

Инициализирующая процедура – выполняется диспетчером ввода-вывода при загрузке данного драйвера в операционную систему.

Процедура добавления устройства – реализуется в драйверах, поддерживающих технологию PnP.

Процедуры диспетчеризации – основные функции, предоставляемые драйвером, например открытие, закрытие, чтение записи.

Процедура инициализации ввода-вывода- с помощью этой процедуры драйвер может инициировать передачу данных как на устройство, так и с него.

Процедура обслуживания прерываний ISR – начинает обработку прерываниия и записывает запрос в очередь DPC

DPC процедура – завершает обработку начатого прерывания.

Взаимодействие прикладной программы с драйвером режима ядра

Для организации передачи драйверу данных и получения данных от драйвера используется функция

DeviceIOControl ()

Cредства построения драйверов

Драйверы режима ядра программируются на языке С в среде MS Visual Studio. Основной инструмент построения драйверов режима ядра – Windows DDK, содержащий необходимые справочные материалы, заголовочные файлы и утилиты. Для справочных целей может использоваться MSDN.