Главная | Обратная связь
МегаЛекции

Управляемый прерываниями ввод-вывод




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

Рассмотрим тот же пример, но с небольшим усовершенствованием.

Алгоритм печати:

1. До пункта 8 тоже самое.

2. Процессор не ждет готовности принтера, а вызывает планировщик и переключается на другую задачу. Печатающий процесс блокируется.

3. Когда принтер будет готов, он посылает прерывание процессору.

4. Процессор переключается на печатающий процесс.

 

Ввод-вывод с использованием DMA

Недостаток предыдущего метода в том, что прерывание происходит при печати каждого символа.

Алгоритм не отличается, но всю работу на себя берет контроллер DMA.

Программные уровни и функции ввода-вывода

Четыре уровня ввода-вывода:

Уровни ввода-вывода

 

Обработчики прерываний

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

Алгоритм:

1. Драйвер начинает операцию ввод-вывод.

2. Драйвер блокирует сам себя,
- выполнив на семафоре процедуру down
- выполнив на переменной состояния процедуру wait
- выполнив на сообщении процедуру receive

3. Происходит прерывание

4. Обработчик прерываний начинает работу

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

 

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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



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

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

 

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

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

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

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

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

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

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

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

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

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

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

Буферизация

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

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

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

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

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

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

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





©2015- 2017 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов.