ПРАКТИЧЕСКОЕ ЗАНЯТИЕ 9. ДРАЙВЕРА УСТРОЙСТВ


Цель практического занятия: Изучить   материал: Драйвера устройств, Независимое от устройств программное обеспечение ввода-вывода, Единообразный интерфейс для драйверов устройств, Буферизация, Сообщения об ошибках, Захват и освобождение выделенных устройств, Независимый от устройств размер блока, Программное обеспечение ввода-вывода пространства пользователя, Обобщение уровней и функций ввода-вывода

 

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

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

Это одна из основных причин приводящих к краху операционных систем. Потому что драйверы, как правило, пишутся производителями устройств, и вставляются в ОС.

 Драйвера должны взаимодействовать с ОС через стандартные интерфейсы.

Стандартные интерфейсы, которые должны поддерживать драйвера:

· Для блочных устройств

· Для символьных устройств

Логическое расположение драйверов устройств. На самом деле обмен данными между контроллерами и драйверами идет по шине.

Раньше для установки ядра приходилось перекомпилировать ядра системы.

Сейчас в основном ОС загружают драйверы. Некоторые драйверы могут быть загружены в горячем режиме.

Функции, которые выполняют драйвера:

· обработка запросов чтения или записи

· инициализация устройства

· управление энергопотреблением устройства

· прогрев устройства (сканера)

· включение устройства или запуска двигателя

  Независимое от устройств программное обеспечение ввода-вывода

Функции независимого от устройств программного обеспечения ввода-вывода:

· Единообразный интерфейс для драйверов устройств,

· Буферизация

· Сообщения об ошибках

· Захват и освобождение выделенных устройств (блокирование)

· Размер блока, не зависящий от устройств

Единообразный интерфейс для драйверов устройств

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

· именование устройств

· защита устройств

Буферизация

Рассмотрим несколько примеров буферизации.

a) Не буферизованный ввод - после ввода каждого символа происходит прерывание

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

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

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

 

 Сообщения об ошибках

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

 Захват и освобождение выделенных устройств

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

 Независимый от устройств размер блока

Размер блока должен быть одинаковый для верхних уровней, и не зависеть от устройств (размеров секторов на диске).

  Программное обеспечение ввода-вывода пространства пользователя

Функции этого обеспечения:

· Обращение к системным вызовам ввода-вывода (через библиотечные процедуры).

· Форматный ввод-вывод (меняют формат, например, в ASCII)

· Спулинг (для выделенных устройств) - создается процесс (например, демон печати) и каталог спулера.

  Обобщение уровней и функций ввода-вывода

Уровни и основные функции системы ввода-вывода