Общие устройства ввода-вывода

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

Вообще говоря, понятие виртуального устройства шире, нежели понятие спулинга (spooling — Simultaneous Peripheral Operation On-Line, то есть имитация работы с устройством в режиме непосредственного подключения к нему). Основное назна­чение спулинга — создать видимость разделения устройства ввода-вывода, кото­рое фактически является устройством с последовательным доступом и должно использоваться только монопольно и быть закрепленным за процессом. Напри­мер, мы уже говорили, что в случае, когда несколько приложений должны выво­дить на печать результаты своей работы, если разрешить каждому такому прило­жению печатать строку по первому же требованию, то это приведет к потоку строк,

Закрепление устройств, общие устройства ввода-вывода_____________________ 137

не представляющих никакой ценности. Однако если каждому вычислительному процессу предоставлять не реальный, а виртуальный принтер, и поток выводимых символов (или управляющих кодов для их печати) сначала направлять в специ­альный файл на диске (так называемый спул-файл — spool-file) и только потом, по окончании виртуальной печати, в соответствии с принятой дисциплиной обслу­живания и приоритетами приложений выводить содержимое спул-файла на прин­тер, то все результаты работы можно будет легко читать. Системные процессы, которые управляют спул-файлом, называются спулером чтения (spool-reader) или спулером записи (spool-writer).

Достаточно рационально организована работа с виртуальными устройствами в си­стемах Windows 9x/NT/2000/XP компании Microsoft. В качестве примера можно кратко рассмотреть подсистему печати. Microsoft различает термины «принтер» и «устройство печати». Принтер — это некоторая виртуализация, объект операци­онной системы, а устройство печати — это физическое устройство, которое может быть подключено к компьютеру. Принтер может быть локальным или сетевым.

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

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

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

Локальных принтеров, связанных с конкретным устройством печати, на компью­тере может быть несколько. Каждому локальному принтеру можно назначить тот или иной приоритет, который будет учитываться при формировании очереди пе-

138_____________ Глава 5. Управление вводом-выводом в операционных системах

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

Наши рекомендации