Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС_лекция.docx
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
1.49 Mб
Скачать

06122012 Лекция 12 Основные процедуры драйверов устройств

  1. Обязательная процедура инициализации;

  2. Обязательный набор процедур диспетчеризации (вызывается диспетчером ввода/вывода и принимает в качестве параметра IRP пакет);

  3. Необязательная процедура запуска;

  4. Необязательная процедура обслуживания прерывания;

  5. Необязательный отложенный вызов;

  6. Необязательная процедура завершения;

  7. Обязательная процедура выгрузки драйвера;

  8. Необязательная процедура отмены длительной операции;

  9. Обязательная процедура уведомления об отключении системы (вызывается диспетчером ввода/вывода)

  10. Необязательная процедура протоколирования ошибок.

Процедуры обслуживания прерывания isr (interrupt Service Routine)

Выполняется в ответ на получение прерывания от аппаратного устройства с высоким приоритетом. Как правило, размещает в очереди вызов отложенной обработки DPC – defraud processing call.

Процедура облуживания прерываний так же может быть вызвана асинхронно, когда генерируется APC (Asynchronous processing call). Так же выполняется привилегированно, но в контексте вызвавшего процесса: в режиме ядра или пользователя. Используется:

  1. Буферизированный ввод/вывод - буфер выделяться в невыгружаемой памяти и действительном контексте любого процесса или потока

  2. Прямой ввод/вывод - буфер независим от процесса и описывается для драйвера при помощи дескрипторов памяти. Адрес буфера используется в качестве системного виртуального адресного пространства

  3. Небуферизированный ввод/вывод – драйверу непосредственно передается адрес буфера в контексте вызвавшего процесса.

Дерево устройств

При инициализации устройства диспетчер plug-and-play формирует дерево устройств, начинающееся с виртуального драйвера шины с имени root и отражающего взаимосвязи между устройствами.

При перечислении устройств в процессе загрузки диспетчер PnP запрашивает у драйверов шин описание устройств, найденных на этих шинах. Описание включает уникальный идентификатор устройства и его требования к аппаратным ресурсам. По этим данным формируются узлы устройств. В общем случае объект устройства может включать:

  1. Высокоуровневый драйвер фильтра;

  2. Функциональный драйвер;

  3. Низкоуровневый драйвер;

  4. Драйвер фильтра шины;

  5. Драйвер шины.

Идентификаторы устройств специфичны для конкретной шины. Могут состоять из идентификатора составителя, продукта и экземпляра устройств. Общий идентификатор устройства используется для поиска раздела устройства в реестре.

Устройства драйвера PnP устройства:

Драйвер шины информирует диспетчер PnP о новом устройстве, сообщая его идентификатор. Если в реестре нет походящего функционального драйвера, сообщение передается диспетчеру PnP пользовательского режима. Он собственно пытается установить нужный драйвер (генерация диалоговых окон и так далее). API функции (особенно Setup CfgMgr) используются для поиска info файлов, совместимых с обнаруженным устройством. Когда драйвер обнаружен, устанавливаются его параметры.

Диспетчер электропитания

Применяемая спецификация управления электропитания соответствует стандарту ACPI (Advanced Configuration and Power Interface). Все базовые устройства должны соответствовать этому стандарту. Определяются уровни электропотребления для системы его устройств.

Каждый уровень характеризуется параметрами:

  1. Энергопотребление;

  2. Возобновление работы;

  3. Аппаратная задержка.

Основные шесть состояний система (S0-S5):

Состояние

Энергопотребление

Возобновление работы ПО

Аппаратная задержка

S0 (fully on)

max

-

нет

S1 (sleeping)

S2<S1<S0

С той же точки, где была прервана (возврат в S0)

(Много) менее 2с

S2 (sleeping)

S3<S2<S2

С той же точки, где была прервана (возврат в S0)

От 2с

S3 (sleeping)

S3<S2 (выкл. процессор)

С той же точки, где была прервана (возврат в S0)

В значительной степени больше2с

S4 (hibernatiny)

Ток на кнопке питания и контуре пробуждения (wake up контур)

Перезапуск с помощи hibernate file и возобновляется с точки прерывания (S0)

Длительная неопределенная

S5 (fully off)

Ток на кнопку электропитания

Загрузка заново

Длительная неопределенная

Для устройств определено 4 состояния D0-D3 (D1, D2 зависит от конкретного устройства).