Принципы программного обеспечения ввода-вывода
Задачи программного обеспечения ввода-вывода
Основные задачи, которые должно решать программное обеспечение ввода-вывода:
o Независимость от устройств - например, программа, читающая данные из файла не должна задумываться с чего она читает (CD, HDD и др.). Все проблемы должна решать ОС.
o Единообразное именование - имя файла или устройства не должны отличаться. (В системах UNIX выполняется дословно).
o Обработка ошибок - ошибки могут быть отловлены на уровне контроллера, драйвера и т.д.
o Перенос данных - синхронный и асинхронный (в последнем случае процессор запускает перенос данных, и переключается на другие задачи до прерывания).
o Буферизация
o Проблема выделенных (принтер) и невыделенных (диск) устройств - принтер должен предоставляться только одному пользователю, а диск многим. ОС должна решать все возникающие проблемы.
Три основных способа осуществления операций ввода-вывода:
o Программный ввод-вывод
o Управляемый прерываниями ввод-вывод
o Ввод-вывод с использованием DMA
Рассмотрим их подробнее.
Программный ввод-вывод
В этом случае всю работу выполняет центральный процессор.
Рассмотрим процесс печати строки ABCDEFGH этим способом.
Этапы печати строки ABCDEFGH
Алгоритм печати:
1. Строка для печати собирается в пространстве пользователя.
2. Обращаясь к системному вызову, процесс получает принтер.
3. Обращаясь к системному вызову, процесс просит распечатать строку на принтере.
|
|
4. Операционная система копирует строку в массив, расположенный в режиме ядра.
5. ОС копирует первый символ в регистр данных принтера, который отображен на памяти.
6. Символ печатается на бумаге.
7. Указатель устанавливается на следующий символ.
8. Процессор ждет, когда бит готовности принтера выставится в готовность.
9. Все повторяется.
При использовании буфера принтера, сначала вся строка копируется в буфер, после этого начинается печать.
Управляемый прерываниями ввод-вывод
Если в предыдущем примере буфер не используется, а принтер печатает 100 символов в секунду, то на каждый символ будет уходить 10мс, в это время процессор будет простаивать, ожидая готовности принтера.
Рассмотрим тот же пример, но с небольшим усовершенствованием.
Алгоритм печати:
1. До пункта 8 тоже самое.
2. Процессор не ждет готовности принтера, а вызывает планировщик и переключается на другую задачу. Печатающий процесс блокируется.
3. Когда принтер будет готов, он посылает прерывание процессору.
4. Процессор переключается на печатающий процесс.
Ввод-вывод с использованием DMA
Недостаток предыдущего метода в том, что прерывание происходит при печати каждого символа.
|
|
Алгоритм не отличается, но всю работу на себя берет контроллер DMA.
Программные уровни и функции ввода-вывода
Четыре уровня ввода-вывода:
Уровни ввода-вывода
Обработчики прерываний
Прерывания должны быть скрыты как можно глубже в недрах операционной системы, чтобы как можно меньшая часть ОС имела с ними дело. Лучше всего блокировать драйвер, начавший ввод-вывод.
Алгоритм:
1. Драйвер начинает операцию ввод-вывод.
2. Драйвер блокирует сам себя,
- выполнив на семафоре процедуру down
- выполнив на переменной состояния процедуру wait
- выполнив на сообщении процедуру receive
3. Происходит прерывание
4. Обработчик прерываний начинает работу
5. Обработчик прерываний может разблокировать драйвер (например, выполнив на семафоре процедуру up)
Драйвера устройств
Драйвер устройства - необходим для каждого устройства. Для разных ОС нужны разные драйверы.
Драйверы должны быть частью ядра (в монолитной системе), что бы получить доступ к регистрам контроллера.
Это одна из основных причин приводящих к краху операционных систем. Потому что драйверы, как правило, пишутся производителями устройств, и вставляются в ОС.
Логическое расположение драйверов устройств. На самом деле обмен данными между контроллерами и драйверами идет по шине.
|
|
Драйвера должны взаимодействовать с ОС через стандартные интерфейсы.
Стандартные интерфейсы, которые должны поддерживать драйвера:
o Для блочных устройств
o Для символьных устройств
Раньше для установки ядра приходилось перекомпилировать ядра системы.
Сейчас в основном ОС загружают драйверы. Некоторые драйверы могут быть загружены в горячем режиме.
Функции, которые выполняют драйвера:
o обработка запросов чтения или записи
o инициализация устройства
o управление энергопотреблением устройства
o прогрев устройства (сканера)
o включение устройства или запуска двигателя
Дата добавления: 2018-08-06; просмотров: 355; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!