ЗНАЕТЕ ЛИ ВЫ?

Задачи программного обеспечения ввода-вывода



Основные задачи, которые должно решать программное обеспечение ввода-вывода:

  • Независимость от устройств - например, программа, читающая данные из файла не должна задумываться с чего она читает (CD, HDD и др.). Все проблемы должна решать ОС.
  • Единообразное именование - имя файла или устройства не должны отличаться. (В системах UNIX выполняется дословно).
  • Обработка ошибок - ошибки могут быть отловлены на уровне контроллера, драйвера и т.д.
  • Перенос данных - синхронный и асинхронный (в последнем случае процессор запускает перенос данных, и переключается на другие задачи до прерывания).
  • Буферизация
  • Проблема выделенных (принтер) и невыделенных (диск) устройств - принтер должен предоставляться только одному пользователю, а диск многим. ОС должна решать все возникающие проблемы.

Три основных способа осуществления операций ввода-вывода:

  • Программный ввод-вывод
  • Управляемый прерываниями ввод-вывод
  • Ввод-вывод с использованием 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)

 

 

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

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

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

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

 

 

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

 

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

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

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

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

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

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

  • обработка запросов чтения или записи
  • инициализация устройства
  • управление энергопотреблением устройства
  • прогрев устройства (сканера)
  • включение устройства или запуска двигателя

 





Последнее изменение этой страницы: 2016-08-16; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.238.107.166 (0.005 с.)