Программный ввод-вывод
Задачи программного обеспечения ввода-вывода
Принципы программного обеспечения ввода-вывода
Основные задачи, которые должно решать программное обеспечение ввода-вывода:
· Независимость от устройств - например, программа, читающая данные из файла не должна задумываться с чего она читает (CD, HDD и др.). Все проблемы должна решать ОС.
· Единообразное именование - имя файла или устройства не должны отличаться. (В системах UNIX выполняется дословно).
· Обработка ошибок - ошибки могут быть отловлены на уровне контроллера, драйвера и т.д.
· Перенос данных - синхронный и асинхронный (в последнем случае процессор запускает перенос данных, и переключается на другие задачи до прерывания).
· Буферизация
· Проблема выделенных (принтер) и невыделенных (диск) устройств - принтер должен предоставляться только одному пользователю, а диск многим. ОС должна решать все возникающие проблемы.
Три основных способа осуществления операций ввода-вывода:
· Программный ввод-вывод
· Управляемый прерываниями ввод-вывод
· Ввод-вывод с использованием DMA
Рассмотрим их подробнее.
В этом случае всю работу выполняет центральный процессор.
Рассмотрим процесс печати строки ABCDEFGH этим способом.
Этапы печати строки ABCDEFGH
Алгоритм печати:
1. Строка для печати собирается в пространстве пользователя.
2. Обращаясь к системному вызову, процесс получает принтер.
3. Обращаясь к системному вызову, процесс просит распечатать строку на принтере.
4. Операционная система копирует строку в массив, расположенный в режиме ядра.
5. ОС копирует первый символ в регистр данных принтера, который отображен на памяти.
6. Символ печатается на бумаге.
7. Указатель устанавливается на следующий символ.
8. Процессор ждет, когда бит готовности принтера выставится в готовность.
9. Все повторяется.
При использовании буфера принтера, сначала вся строка копируется в буфер, после этого начинается печать.