The design of the UNIX Operating System 104 страница



 

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

 

Spooling и захват устройств

 

О понятии spooling мы говорили в первой лекции нашего курса, как о механизме, впервые позволившем совместить реальные операции ввода-вывода одного задания с выполнением другого задания. Теперь мы можем определить это понятие более точно. Под словом spool мы подразумеваем буфер, содержащий входные или выходные данные для устройства , на котором следует избегать чередования его использо-вания (возникновения interleaving – см. раздел "Interleaving, race condition и взаимоисключения " лекции 5) различными процессами. Правда, в современных вычислительных системах spool для ввода данных практически не используется, а в основном предназначен для накопления выходной информации.

 

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

 

В некоторых операционных системах вместо использования spooling для устранения race condition при-меняется механизм монопольного захвата устройств процессами. Если устройство свободно, то один из


Основы операционных систем 140

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

 

Обеспечение spooling и механизма захвата устройств является прерогативой базовой подсистемы ввода-вывода.

 

Обработка прерываний и ошибок

 

Если при работе с внешним устройством вычислительная система не пользуется методом опроса его со - стояния, а задействует механизм прерываний, то при возникновении прерывания, как мы уже говорили раньше, процессор, частично сохранив свое состояние, передает управление специальной программе об-работки прерывания. Мы уже рассматривали действия операционной системы над процессами, происхо-дящими при возникновении прерывания, в разделе "Переключение контекста" лекции 2, где после воз-никновения прерывания осуществлялись следующие действия: сохранение контекста, обработка преры-вания, планирование использования процессора, восстановление контекста. Тогда мы обращали больше внимания на действия, связанные с сохранением и восстановлением контекста и планированием исполь-зования процессора. Теперь давайте подробнее остановимся на том, что скрывается за словами "обработ-ка прерывания".

 

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


Дата добавления: 2021-01-21; просмотров: 108; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!