Лекция: Независимое от устройств программное обеспечение ввода-вывода
Функции независимого от устройств программного обеспечения ввода-вывода:
- Единообразный интерфейс для драйверов устройств,
- Буферизация
- Сообщения об ошибках
- Захват и освобождение выделенных устройств(блокирование)
- Размер блока, не зависящий от устройств
Единообразный интерфейс для драйверов устройств
Кроме интерфейса, в него также входят проблемы,
- именование устройств
- защита устройств
Буферизация
Рассмотрим несколько примеров буферизации.
a) Не буферизованный ввод — после ввода каждого символа происходит прерывание
b) Буферизация в пространстве пользователя — приходится держать загруженными необходимые страницы памяти в физической памяти.
c) Буферизация в ядре с копированием в пространство пользователя — страница загружается только когда буфер ядра полный, данные из буфера ядра в буфер пользователя копируется за одну операцию. Проблема может возникнуть, когда буфер ядра полный, а страница буфера пользователя еще не загружена.
d) Двойная буферизация в ядре — если один буфер заполнен, и пока он выгружается, символы пишутся во второй буфер.
Сообщения об ошибках
Наибольшее число ошибок возникает именно от операции ввода-вывода, поэтому их нужно определять как можно раньше. Ошибки могут быть очень разные в зависимости от устройств.
Захват и освобождение выделенных устройств
Для устройств (принтер) с которыми должен работать в одно время только один процесс, необходима возможность захвата и освобождения устройств. Когда один процесс занял устройство, остальные встают в очередь.
Независимый от устройств размер блока
Размер блока должен быть одинаковый для верхних уровней, и не зависеть от устройств (размеров секторов на диске).