Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000377.doc
Скачиваний:
29
Добавлен:
30.04.2022
Размер:
2.52 Mб
Скачать

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

Услуги по доступу к устройству предоставляются операционной системе и пользовательским программам через функции драйвера, но пользовательские программы не могут непосредственно вызывать функции драйвера и получают доступ к ним через системные вызовы. При этом можно выделить три этапа обработки запроса ввода-вывода пользовательской программы: передача запроса драйверу, выполнение запроса драйвером устройства (устройством) и передача результатов выполнения прикладной программе.

На этапе передачи запроса драйверу устройства операционная система выполняет следующие действия:

  • проверяет корректность параметров, переданных системному вызову;

  • проверяет полномочия пользовательского процесса на выполнение запрошенной операции;

  • обеспечивает доступа к пользовательским данным запроса ввода-вывода из системного адресного пространства (например, посредством копирования данных из пользовательского буфера в системный буфер);

  • в случае необходимости преобразует данные запроса ввода-вывода (например, заменяет символы табуляции на соответствующее число пробелов при выводе текста на печать);

  • вызывает требуемую функцию драйвера;

  • блокирует процесс до выполнения запроса и вызывает планировщик для загрузки процессора (в случае синхронного выполнения операции ввода-вывода).

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

  • фиксирует прерывание по завершению ввода-вывода от устройства ввода-вывода и вызывает обработчик прерывания драйвера (при асинхронном вводе-выводе);

  • в случае необходимости преобразует данные, полученные от устройства;

  • выводит из блокировки процесс, ожидающий завершение ввода-вывода (если ранее он был блокирован);

  • обеспечивает доступность результатов ввода-вывода в пользовательском адресном пространстве (например, посредством копирования в пользовательский буфер).

Второй этап обработки пользовательского запроса ввода-вывода – выполнение запроса драйвером устройства, требует более детального рассмотрения.

В современных операционных системах драйвер представляет собой стандартный для данной операционной системы набор функций, причем точки входа в эти функции (адреса вызовов функций) заранее известны системе. Операционная система вызывает функции драйвера для выполнения запросов ввода-вывода от пользовательских программ и компонентов самой операционной системы.

Обычно драйвер устройства включает в себя, как минимум, следующие функции:

  • функцию инициализации драйвера, которая вызывается при загрузке драйвера и передает операционной системе адреса остальных функций драйвера;

  • функцию обработки прерывания, которая автоматически вызывается всякий раз при возникновении прерывания, связанного с управляемым устройством;

  • одной или более функций драйвера, осуществляющих пересылку данных и управление устройством;

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

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

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

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

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

Рис.1. Взаимодействие синхронный и асинхронных компонентов драйвера

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

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

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

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