Управляемый прерываниями ввод-вывод
Если в предыдущем примере буфер не используется, а принтер печатает 100 символов в секунду, то на каждый символ будет уходить 10мс, в это время процессор будет простаивать, ожидая готовности принтера. Рассмотрим тот же пример, но с небольшим усовершенствованием. Алгоритм печати: 1. До пункта 8 тоже самое. 2. Процессор не ждет готовности принтера, а вызывает планировщик и переключается на другую задачу. Печатающий процесс блокируется. 3. Когда принтер будет готов, он посылает прерывание процессору. 4. Процессор переключается на печатающий процесс.
Ввод-вывод с использованием DMA Недостаток предыдущего метода в том, что прерывание происходит при печати каждого символа. Алгоритм не отличается, но всю работу на себя берет контроллер DMA. Программные уровни и функции ввода-вывода Четыре уровня ввода-вывода: Уровни ввода-вывода
Обработчики прерываний Прерывания должны быть скрыты как можно глубже в недрах операционной системы, чтобы как можно меньшая часть ОС имела с ними дело. Лучше всего блокировать драйвер, начавший ввод-вывод. Алгоритм: 1. Драйвер начинает операцию ввод-вывод. 2. Драйвер блокирует сам себя, 3. Происходит прерывание 4. Обработчик прерываний начинает работу 5. Обработчик прерываний может разблокировать драйвер (например, выполнив на семафоре процедуру up)
Драйвера устройств Драйвер устройства - необходим для каждого устройства. Для разных ОС нужны разные драйверы. Драйверы должны быть частью ядра (в монолитной системе), что бы получить доступ к регистрам контроллера.
Это одна из основных причин приводящих к краху операционных систем. Потому что драйверы, как правило, пишутся производителями устройств, и вставляются в ОС. Логическое расположение драйверов устройств. На самом деле обмен данными между контроллерами и драйверами идет по шине.
Драйвера должны взаимодействовать с ОС через стандартные интерфейсы. Стандартные интерфейсы, которые должны поддерживать драйвера: · Для блочных устройств · Для символьных устройств Раньше для установки ядра приходилось перекомпилировать ядра системы. Сейчас в основном ОС загружают драйверы. Некоторые драйверы могут быть загружены в горячем режиме. Функции, которые выполняют драйвера: · обработка запросов чтения или записи · инициализация устройства · управление энергопотреблением устройства · прогрев устройства (сканера) · включение устройства или запуска двигателя
Независимое от устройств программное обеспечение ввода-вывода Функции независимого от устройств программного обеспечения ввода-вывода: · Единообразный интерфейс для драйверов устройств, · Буферизация · Сообщения об ошибках · Захват и освобождение выделенных устройств (блокирование) · Размер блока, не зависящий от устройств Единообразный интерфейс для драйверов устройств Кроме интерфейса, в него также входят проблемы, · именование устройств · защита устройств Буферизация Рассмотрим несколько примеров буферизации. a) Не буферизованный ввод - после ввода каждого символа происходит прерывание b) Буферизация в пространстве пользователя - приходится держать загруженными необходимые страницы памяти в физической памяти. c) Буферизация в ядре с копированием в пространство пользователя - страница загружается только когда буфер ядра полный, данные из буфера ядра в буфер пользователя копируется за одну операцию. Проблема может возникнуть, когда буфер ядра полный, а страница буфера пользователя еще не загружена.
d) Двойная буферизация в ядре - если один буфер заполнен, и пока он выгружается, символы пишутся во второй буфер. Сообщения об ошибках Наибольшее число ошибок возникает именно от операции ввода-вывода, поэтому их нужно определять как можно раньше. Ошибки могут быть очень разные в зависимости от устройств.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|