Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разработка и реализация ОС.doc
Скачиваний:
82
Добавлен:
24.11.2018
Размер:
3.09 Mб
Скачать

5.1.2.5. Пользовательские программы (верхний уровень)

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

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

Не все программное обеспечение ввода-вывода пользовательского пространства состоит из библиотечных процедур. Другая важная категория — это система спулинга. Спулинг (spooling) представляет собой способ работы с выделенными устройствами в многозадачной системе. Типичным устройством, на котором используется спулинг, является принтер. В принципе, можно разрешить каждому пользователю открывать специальный символьный файл принтера, однако представьте себе, что процесс, открыв его, не обращается к принтеру в течение нескольких часов. Ни один другой процесс в это время не сможет ничего напечатать. Вместо этого создается специальный процесс, называемый демоном, и специальный каталог, называемый каталогом спулинга. Чтобы распечатать файл, процесс сначала создает специальный файл, предназначенный для печати, который помещает в каталог спулинга. Этот файл печатает демон, единственный процесс, которому разрешается пользоваться специальным файлом принтера. Таким образом, потенциальная проблема, связанная с тем, что какой-либо процесс на слишком долгий срок захватит принтер, решается защитой специального файла принтера от прямого доступа пользователей. Спулинг используется не только для принтеров. Например, программное обеспечение электронной почты, как правило, включает демона. Письмо, которое необходимо послать, помещается в каталог спулинга. Затем демон электронной почты извлекает его оттуда и пытается отправить. В любой момент времени существует вероятность, что получатель недоступен; в этом случае демон оставляет письмо в каталоге спулинга и фиксирует информацию о том, что попытку передачи следует повторить позднее. Демон также может уведомить отправителя о задержке, а если письмо не удается отправить в течение нескольких часов или дней, — послать сообщение о том, что доставка письма невозможна.

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

Рис. 5.3.