Программный ввод-вывод

Есть три фундаментально различных способа осуществления операций ввода-вывода. В этом разделе мы рассмотрим первый из этих способов — программный ввод-вывод. В следующих двух разделах будут рассмотрены другие способы (ввод-вывод, управляемый с помощью прерываний, и ввод-вывод, использующий DMA).
Проще всего организовать ввод-вывод, возложив всю работу на центральный процессор. Этот способ называется программным вводом-выводом.


Чтобы проиллюстрировать работу программного ввода-вывода, лучше всего обратиться к примеру. Рассмотрим пользовательский процесс, которому нужно распечатать на принтере с последовательным интерфейсом строку, состоящую из восьми символов: «ABCDEFGH». Иногда так же работают дисплеи на небольших встроенных системах. Как показано на рис. 5.6, а, сначала процесс собирает строку в буфере, который находится в пространстве пользователя.


Затем пользовательский процесс запрашивает принтер для записи, совершая системный вызов для того, чтобы его открыть. Если принтер в данный момент задействован другим процессом, этот вызов потерпит неудачу и вернет код ошибки или заблокирует пользовательский процесс до тех пор, пока принтер не станет доступен, в зависимости от используемой операционной системы и параметров вызова. Как только пользовательский процесс получит принтер, он совершит системный вызов, предписывающий операционной системе осуществить распечатку строки на принтере.

Обычно операционная система копирует буфер со строкой в массив, скажем, р, в пространстве ядра, где ей будет проще получить доступ к нему (поскольку ядру, чтобы получить доступ к пространству пользователя, может потребоваться изменить карту памяти). Затем она проверяет принтер на доступность. Если принтер недоступен, она
ждет, пока он освободится. Как только принтер станет доступен, операционная система копирует первый символ в регистр данных принтера, используя в данном примере ввод-вывод, отображаемые на пространство памяти. Это действие активирует принтер. Но символ может сразу же не появиться, поскольку некоторые принтеры перед тем, как что-нибудь печатать, собирают в буфере строку или страницу. Но на рис. 5.6, б мы видим, что первый символ был напечатан и система пометила «В» как следующий символ, выводимый на печать.

Как только первый символ будет скопирован на принтер, операционная система проводит проверку принтера на готовность к получению следующего символа. Как правило, у принтера имеется второй регистр, через который передается его состояние. Запись в регистр данных приводит принтер в состояние занятости. Когда контроллер принтера обработает текущий символ, он обозначает свою доступность, устанавливая определенный бит в своем регистре состояния или помещая в него некоторое значение.

Теперь операционная система ждет, когда принтер снова придет в состояние готовности. Как только это произойдет, она посылает на печать следующий символ, что и показано на рис. 5.6, в. Этот цикл продолжается до тех пор, пока не будет распечатана вся строка. Затем управление возвращается пользовательскому процессу.

Действия, выполняемые операционной системой, сведены в листинг 5.1. Сначала данные копируются в ядро. Затем операционная система входит в цикл, выводя на печать по одному символу. Основное проявление программного ввода-вывода, ярко проиллюстрированное в этом листинге, состоит в том, что после вывода символа центральный процессор постоянно опрашивает устройство на готовность приема следующего символа. Такое поведение часто называют опросом или активным ожиданием.

Листинг 5.1. Запись строки в принтер с использованием программного ввода- вывода

сору_-Ргот_иБег(Ьи-р-Рег, р, сошгЬ);

-Рог (1 = 0; 1 < соттЬ; 1++) {

мИНе (*pгinteг_status_гeg != 1*ЕА0У); *pгinteг_data_гegisteг = р[1];

}

ге1игп_1о_иБег();

Программный ввод-вывод прост в реализации, но имеет недостаток связывания центрального процессора ожиданием на все время, пока не будет завершена операция ввода-вывода. Если на «печать» символа уходит очень мало времени (поскольку принтер только копирует новый символ во внутренний буфер), то активное ожидание будет вполне подходящим решением. Активное ожидание имеет смысл также во встроенных системах, где центральному процессору больше нечем заняться. Но для более сложных систем, где у центрального процессора есть еще и другая работа, активное ожидание не подойдет. Им нужен более эффективный способ ввода-вывода.

5.2.3.

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Программный ввод-вывод:

  1. Программное обеспечение
  2. 2.4.1. Программный анализатор
  3. КОНЦЕПЦИЯ ПРОГРАММНО - РОЛЕВАЯ
  4. § 75 Ввод во владение по завещанию и споры на завещание. – Различные способы спора. – Пошлины с перехода имений по завещанию.
  5. Богомазова Г.Н.. Установка и обслуживание программного обеспечения персональных компьютеров, серверов, периферийных устройств и оборудования, 2015
  6. Перевод программных вопросов в анкетные
  7. 2.4.1. Программный анализатор
  8. Эд САЛЛИВАН. ВРЕМЯ — ДЕНЬГИ Создание команды разработчиков, программного обеспечения, 2001
  9. Глава 39 О ПРОГРАММНЫХ СВОЙСТВАХ ХУДОЖЕСТВЕННОЙ ЛИТЕРАТУРЫ
  10. § 38 Изменение старых понятий о переходе вотчинного права. – Формы приобретения по нынешнему закону. – Ввод во владение по новому нотариальному уставу. – Невыгоды от неизвестности о правах. – Попытка к регистрации поземельной собственности в России. – Вотчинная записка в прибалтийских губерниях