Программное обеспечение ввода-вывода, работающее в пространстве пользователя

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

count = write(fd, buffer, nbytes);

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

Хотя кроме помещения своих параметров в соответствующее место системного вызова эти процедуры практически ничего больше не делают, есть и другие процедуры ввода- вывода, занимающиеся настоящей работой. В частности, библиотечные процедуры осуществляют форматирование ввода и вывода. В языке C примером может послужить процедура printf, которая воспринимает в качестве входных данных строку, описывающую формат вывода и, возможно, несколько переменных, выстраивает ASCII-строку, а затем, чтобы вывести эту строку, осуществляет системный вызов write. В качестве примера использования printf рассмотрим оператор printf("Квадрат числа %3d равен %6d\n", i, i*i);

Он форматирует 14-символьную строку «Квадрат числа», за которой следует значение i в виде 3-символьной строки, затем 7-символьная строка «равен», за ней — i2 в виде шести символов и, наконец, символ перевода строки.

Примером простой процедуры для ввода данных является scanf, которая читает входные данные и сохраняет их в переменной, описание которой дается в форматирующей строке, использующей тот же синтаксис, что и printf. В стандартной библиотеке ввода-вывода содержится ряд процедур, касающихся операций ввода-вывода, и все они запускаются как часть программ пользователя.

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

Вместо этого создаются специальный процесс, который называется демоном (daemon), и специальный каталог, который называется каталогом спулинга. Для вывода файла на печать процесс сначала создает весь выходной файл и помещает его в каталог спулинга.

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

Спулинг используется не только при работе с принтерами, но и в других ситуациях применения операций ввода-вывода. Например, при передаче файла по сети часто задействуется сетевой демон. Чтобы куда-нибудь отправить файл, пользователь помещает его в сетевой каталог спулинга. Чуть позже сетевой демон извлекает этот файл и передает его по сети. Конкретным примером системы, в которой файлы передаются с помощью спулинга, может послужить USENET News (стала частью Google Groups). Эта сеть состоит из нескольких миллионов машин по всему миру, обменивающихся данными через Интернет. Существуют тысячи новостных групп, затрагивающих обширную тематику. Для публикации нового сообщения пользователь вызывает программу новостей, которая принимает публикуемое сообщение, а затем помещает его в каталог спулинга для последующей отправки в адрес других машин. И вся новостная система работает вне операционной системы[24].

На рис. 5.14 представлен общий вид системы ввода-вывода со всеми уровнями и основными функциями каждого уровня. Снизу вверх уровни представлены аппаратурой, обработчиками прерываний, драйверами устройств, программным обеспечением, не зависящим от конкретных устройств, и, наконец, пользовательскими процессами.

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

Рис. 5.14. Уровни системы ввода-вывода и основные функции каждого уровня


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

5.4.

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

Еще по теме Программное обеспечение ввода-вывода, работающее в пространстве пользователя:

  1. Программное обеспечение
  2. Богомазова Г.Н.. Установка и обслуживание программного обеспечения персональных компьютеров, серверов, периферийных устройств и оборудования, 2015
  3. Эд САЛЛИВАН. ВРЕМЯ — ДЕНЬГИ Создание команды разработчиков, программного обеспечения, 2001
  4. Том ДеМарко. Вальсируя с Медведями Управление рисками в проектах по разработке программного обеспечения, 2005
  5. Алистэр Коуберн. Люди как нелинейные и наиболее важные компоненты в создании программного обеспечения, 1999
  6. § 61 Узуфрукт и пожизненное владение. – Общие черты сего права. – Содержание оного. – Хозяйственная целость имения. – Обеспечение верности в пользовании. – Способы установления сего права. – Законные отношения между собственником и пользователем. – Передача и прекращение узуфрукта
  7. Статья 833. Обязанности пользователя
  8. Статья 1121. Обязанности пользователя
  9. Статья 1123. Ответственность правообладателя по требованиям, которые предъявляются к пользователю
  10. Статья 500. Право предшествующего пользователя на торговую марку
  11. Статья 480. Право предшествующего пользователя на компонование интегральной микросхемы
  12. 2.4.1. Программный анализатор
  13. КОНЦЕПЦИЯ ПРОГРАММНО - РОЛЕВАЯ
  14. Перевод программных вопросов в анкетные
  15. 2.4.1. Программный анализатор