[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Руководство по принтерам и печати


Краткие сведения о работе базовой программы

Базовая программа для очереди запускается программой qdaemon, которая определяет, что подошла очередь для обработки задания, устанавливает среду выполнения, создает строку аргументов и с помощью команд fork and exec передает управление базовой программе.

Количество активных экземпляров базовой программы определяется наличием или отсутствием параметра file в разделе очереди в файле конфигурации /etc/qconfig. Если есть параметр file, то для данной очереди может существовать только один экземпляр базовой программы; это связано с тем, что программа qdaemon задает среду выполнения для базовой программы только в тот момент, когда она определила, что задание может обрабатываться. В набор операций по настройке среды выполнения базовой программы входит направление стандартного вывода базовой программы в файл или на устройство, задаваемое параметром file. Если программа qdaemon уже выполнила эту операцию для предыдущего задания, и это задание по-прежнему выполняется, то qdaemon не может захватить файл или устройство, заданные параметром file, а, следовательно, не может направить стандартный вывод базовой программы в этот файл или на это устройство. Поэтому qdaemon блокирует задание в очереди и ожидает, пока предыдущее задание не завершится полностью и не освободит файл или устройство. Таким образом система буферизации обеспечивает последовательный доступ к устройству и управляет им.

Если параметр file отсутствует или ему присвоено значение FALSE, то qdaemon направляет стандартный вывод базовой программы в /dev/null и немедленно выполняет задание. В этом случае нет определенного файла или устройства, к которым необходимо предоставить последовательный доступ, поэтому задание не помещается в очередь. Обработка заданий, находящихся в очереди, начинается, как только qdaemon сможет установить среду выполнения. Отсутствие параметра file отключает опцию последовательного доступа к локальному файлу или устройству.

Один из примеров очереди с отсутствующим параметром file - очередь удаленного принтера. В этом случае ресурс, к которому необходимо обеспечить последовательный доступ, в действительности существует на другом хосте; локальной очереди нет необходимости управлять всеми типами потоков. Базовая программа для очереди этого типа (по умолчанию в базовой операционной системе это программа rembak) просто отправляет задание по сети в удаленную очередь и разрешает ей управлять последовательным доступом.

По умолчанию базовой программой для локальной очереди принтера в базовой операционной системе служит программа piobe. Одна и та же базовая программа может быть определена для нескольких очередей. В этом случае одновременно могут существовать несколько экземпляров piobe; каждая очередь, которая определяет piobe как свою базовую программу, может создать экземпляр piobe. Однако, если при этом две или более очередей зададут одинаковое значение параметра file, вступит в силу ограничение на доступ. Программа qdaemon не сможет захватить заданный файл или устройство, если она уже зарезервировала его для другого экземпляра piobe. Очередь, которая не может обработать задание из-за такого ограничения, будет находиться в состоянии УСТРОЙСТВО_ЗАНЯТО. Однако состояние изменится на ВЫПОЛНЯЕТСЯ, как только qdaemon сможет получить доступ к файлу, указанному в параметре file.

Поток данных общих заданий печати

После того, как задание передано программе буферизации и программа qdaemon получила его и определила, что наступила его очередь для обработки, вызывается базовая программа для очереди. Для создания конвейера фильтров и управления им при обработке задания программа piobe применяет оболочку. Поток задания обрабатывается конвейером фильтров следующим образом:

  1. базовая программа (piobe) -- (получает аргументы от argc, argv[] от программы qdaemon).
  2. оболочка
  3. необязательный фильтр
  4. pioformat
  5. зависимый от устройства код
  6. pioout
  7. драйвер устройства

Этот процесс изображен на следующем рисунке:

Рис. 3-2. Поток данных общих заданий печати

Рисунок: Поток данных общих заданий печати

Как только устройство, в очереди которого находится задание, становится доступным, программа qdaemon вызывает базовую программу очереди. В базовой операционной системе это обычноpiobe. Программа qdaemon вызывает программу piobe и передает ей аргументы согласно обычным правилам языка C, используя argc и argv[].

Например, с помощью команды из шага 2 раздела Поток данных программы буферизации. Часть II :

qprt -Pasc -z1 -fp -p12 -s courier -C -N3 /etc/motd

программе piobe передаются следующие аргументы:

argv[0] - это, как обычно, имя самой базовой программы. Заметьте, что параметр -Pasc, задающий имя очереди, был передан вне исходной строки аргументов, так же как и флаги и аргументы -C и -N3.

Программа piobe использует значения argv[] для создания конвейера фильтров, которые при необходимости должны применяться при обработке задания. После определения структуры конвейера программа piobe передает эту информацию оболочке для создания структуры. Если в записи /etc/qconfig есть параметр file, то piobe будет направлять стандартный вывод последнего процесса в конвейере на устройство (или файл), заданные в параметре file. Для последнего процесса конвейера не запрещено перенаправление стандартного вывода в другой файл или на другое устройство.

Обратите внимание, как связаны между собой эти процессы, хотя на рисунке это и не очевидно:

Необязательный фильтр (например, pr) может быть задан в командной строке или запрограммирован в файле описания; он осуществляет предварительную фильтрацию задания перед тем, как его начнет обрабатывать программа pioformat.

Программа pioformat играет роль драйвера программы форматирования, не зависящего от устройства. Она выполняет динамическую загрузку, компоновку и обработку различных зависящих от устройства программ форматирования, предназначенных для обработки заданий с определенным типом потока данных (например, PostScript, ASCII, GL или PCL).

Зависящая от устройства программа разрабатывается специально для конкретных сочетаний потоков данных и физических принтеров. Так как типы потоков данных и связанные с ними принтеры группируются в классы с общими атрибутами, в настоящее время существует менее 20 зависящих от устройства модулей. Эти модули загружаются, компонуются и выполняются во время работы программы pioformat.

Программа pioout находится в конце конвейера обработки задания и называется программой интерфейса драйвера устройства. Она получает обрабатываемый поток данных и передает его соответствующему устройству (как правило, принтеру). В обычной среде локальной очереди печати именно стандартный вывод pioout передается в символьный файл в каталоге /dev в соответствии со значением параметра file в файле /etc/qconfig.

Это специальный символьный файл в каталоге /dev, который обеспечивает доступ драйвера к аппаратуре принтера.


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]