Гордеев А.В. Операционные системы (2-е изд., 2004) (1186250), страница 36
Текст из файла (страница 36)
Это делается путем изменения адреса обработки прерывания после выполнения очередной секции, а еслиимеется только одна секция продолжения, она сама передает управление в ту илииную часть кода подпрограммы обработки прерывания.Секция завершения обычно выключает устройство ввода-вывода или просто завершает операцию.Управление операциями ввода-вывода в режиме прерываний требует значительных усилий со стороны системных программистов — такие программы создаватьсложнее.
Примером тому может служить существующая ситуация с драйверамипечати. Так, в операционных системах Windows (и Windows 9x, и Windows NT/2000) печать через параллельный порт осуществляется не в режиме с прерываниями, как это сделано в других ОС, а в режиме опроса готовности, что приводит к100-процентной загрузке центрального процессора на все время печати. При этом,естественно, выполняются и другие задачи, запущенные на исполнение, но исключительно за счет того, что упомянутые операционные системы поддерживают вытесняющую мультизадачность, время от времени прерывая процесс управленияпечатью и передавая центральный процессор остальным задачам.Закрепление устройств,общие устройства ввода-выводаКак известно, многие устройства и, прежде всего, устройства с последовательнымдоступом не допускают совместного использования.
Такие устройства могут статьзакрепленными за процессом, то есть их можно предоставить некоторому вычислительному процессу на все время жизни этого процесса. Однако это приводитк тому, что вычислительные процессы часто не могут выполняться параллельно —они ожидают освобождения устройств ввода-вывода. Чтобы организовать совместное использование многими параллельно выполняющимися задачами тех устройствввода-вывода, которые не могут быть разделяемыми, вводится понятие виртуальных устройств.
Принцип виртуализации позволяет повысить эффективность вычислительной системы.Вообще говоря, понятие виртуального устройства шире, нежели понятие спулинга(spooling — Simultaneous Peripheral Operation On-Line, то есть имитация работы сустройством в режиме непосредственного подключения к нему). Основное назначение спулинга — создать видимость разделения устройства ввода-вывода, которое фактически является устройством с последовательным доступом и должноиспользоваться только монопольно и быть закрепленным за процессом. Например, мы уже говорили, что в случае, когда несколько приложений должны выводить на печать результаты своей работы, если разрешить каждому такому приложению печатать строку по первому же требованию, то это приведет к потоку строк.не представляющих никакой ценности.
Однако если каждому вычислительномупроцессу предоставлять не реальный, а виртуальный принтер, и поток выводимыхсимволов (или управляющих кодов для их печати) сначала направлять в специальный файл на диске (так называемый спул-файл — spool-file) и только потом, поокончании виртуальной печати, в соответствии с принятой дисциплиной обслуживания и приоритетами приложений выводить содержимое спул-файла на принтер, то все результаты работы можно будет легко читать. Системные процессы,которые управляют спул-файлом, называются спулером чтения (spool-reader) илиспулером записи (spool-writer).Достаточно рационально организована работа с виртуальными устройствами в системах Windows 9x/NT/2000/XP компании Microsoft.
В качестве примера можнократко рассмотреть подсистему печати. Microsoft различает термины «принтер» и«устройство печати». Принтер — это некоторая виртуализация, объект операционной системы, а устройство печати — это физическое устройство, которое можетбыть подключено к компьютеру. Принтер может быть локальным или сетевым.При установке локального принтера в операционной системе создается новыйобъект, связанный с реальным устройством печати через тот или иной интерфейс.Интерфейс может быть и сетевым, то есть передача управляющих кодов в устройство печати может осуществляться через локальную вычислительную сеть, однако принтер все равно будет считаться локальным.Локальность принтера означает, что-его спул-файл будет находиться на том жекомпьютере, что и принтер.
Если же некоторый локальный принтер предоставитьв сети в общий доступ с теми или иными разрешениями, то для других компьютеров и их пользователей он может стать сетевым, Компьютер, на котором имеетсялокальный принтер, предоставленный в общий доступ, называется принт-сервером.Для получения управляющих кодов принтера устанавливается программное обеспечение (компания Microsoft называет его высокоуровневым драйвером, хотя правильнее было бы называть его иначе: например, препроцессором).
Эти управляющие коды посылаются на устройство печати по соответствующему интерфейсучерез назначенные принтеру порты и управляют работой устройства печати. Приполучении операционной системой от приложения запроса на печать она выделяет для этого процесса виртуальный принтер. Можно сказать, что операционнаясистема закрепляет за процессом виртуальный принтер, но никак не устройствопечати.
Обработанные драйвером принтера данные, посланные на него из приложения, как правило (по умолчанию), направляются в спул-файл, откуда они затемпередаются на печать по мере освобождения устройства печати и в соответствии сприоритетом локального принтера. При установке сетевого принтера операционная система устанавливает для этого объекта высокоуровневый драйвер и связыа е т п°лученный объект со спулером того компьютера, на котором установлен соответствующий локальный принтер.°кальных принтеров, связанных с конкретным устройством печати, на компью-Ре Может быть несколько.
Каждому локальному принтеру можно назначить тот11иной приоритет, который будет учитываться при формировании очереди пе-138Глава 5. Управление вводом-выводом в операционных системаучати в процессе работы спулера. В результате каждый процесс может послать напечать свои данные и не связывать реальное выполнение некоторого задания напечать с занятостью или освобождением самого устройства печати.
Приоритетность в печати определяется приоритетом того локального или сетевого принтера,к которому обратилось приложение.Основные системные таблицыввода-выводаДля управления всеми операциями ввода-вывода и отслеживания состояния всехресурсов, занятых в обмене данными, операционная система должна иметь соответствующие информационные структуры. Эти информационные структуры, прежде всего, призваны отображать следующую информацию:Q состав устройств ввода-вывода и способы их подключения;Q аппаратные ресурсы, закрепленные за имеющимися в системе устройствамиввода-вывода;•логические (символьные) имена устройств ввода-вывода, используя которыевычислительные процессы могут запрашивать те или иные операции вводавывода;•адреса размещения драйверов устройств ввода-вывода и области памяти дляхранения текущих значений переменных, определяющих работу с этими устройствами;•области памяти для хранения информации о текущем состоянии устройстваввода-вывода и параметрах, определяющих режимы работы устройства;Q данные о текущем процессе, который работает с данным устройством;Q адреса тех областей памяти, которые содержат данные, собственно и участвующие в операциях ввода-вывода (получаемые при операциях ввода данных ивыводимые на устройство при операциях вывода данных).Эти информационные структуры часто называют таблицами ввода-вывода, хотяони, в принципе, могут быть организованы и в виде списков.Каждая операционная система ведет свои таблицы ввода-вывода, их состав (и количество, и назначение каждой таблицы) может сильно отличаться.
В некоторыхоперационных системах вместо таблиц создаются списки, хотя использование статических структур данных для организации ввода-вывода, как правило, приводитк более высокому быстродействию. Здесь очень трудно вычленить общие составляющие, тем более что для современных операционных систем подробной документации на эту тему крайне мало, разве что воспользоваться материалами нынеустаревших ОС. Тем не менее попытаемся это сделать, опираясь на идеи семейства простых, но эффективных операционных систем реального времени, разработанных фирмой Hewlett Packard для своих мини-ЭВМ.Исходя из принципа управления вводом-выводом исключительно через супервизор операционной системы и учитывая, что драйверы устройств ввода-вывода ис-лпновные системные таблицы ввода-вывода139пользуют механизм прерываний для установления обратной связи центральнойчасти с внешними устройствами, можно сделать вывод о необходимости созданияп о крайней мере трех системных таблиц.Первая таблица (или.
список) содержит информацию обо всех устройствах вводавывода, подключенных к вычислительной системе. Назовем ее условно таблицейоборудования (equipment table), а каждый элемент этой таблицы пусть называется\]СВ (Unit Control Block — блок управления устройством ввода-вывода). Каждыйэлемент UCB таблицы оборудования, как правило, содержит следующую информацию об устройстве:• тип устройства, его конкретная модель, символическое имя и характеристикиустройства;• способ подключения устройства (через какой интерфейс, к какому разъему,какие порты и линия запроса прерывания используются и т. д.);• номер и адрес канала (и подканала), если такие используются для управленияустройством;Q информация о драйвере, который должен управлять этим устройством, адресасекции запуска и секции продолжения драйвера;а информация о том, используется или нет буферизация при обмене данными сустройством, «имя» (или просто адрес) буфера, если такой выделяется из системной области памяти;• установка тайм-аута и ячейки для счетчика тайм-аута;• состояние устройства;• поле указателя для связи задач, ожидающих устройство;• возможно, множество других сведений.Поясним перечисленное.