D3 Reference Manual

Index | Help

Поиск по страницам

Разделы / Спулер / Использование спулера

Использование спулера

Управляет всем выводом, который направляется на принтер.

"SPOOLER" - это акроним от английских слов "Simultaneous Peripheral Output and On-Line Error Recovery" ("Одновременный периферийный вывод с оперативным исправлением ошибок").

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

В зависимости от назначения принтера (printer assignment) и его статуса вывод может быть выполнен немедленно, направлен на ленту, помещен в очередь для последующей печати или помещен в специальный "файл задержки" или "файл хранения" (hold file).

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

Связь между физическими принтерами (аппаратурой) и очередями на печать устанавливается в момент запуска ("стартовки") логического принтера (см. "startptr"). В этот момент пользователь назначает имя/номер логического принтера, физическок устройство, на котором этот логический принтер будет работать, и одну или несколько очередей, которые будут обслуживаться данным логическим принтером.

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

В счете расположен файл "Peqs", используемый для хранения ссылок на задания спулера, как на стандартные записи D3.

Раздел данных файла является "QS"-указателем на драйвер "peqs:". Код "QS" сигнализирует процессору "save", что необходимо сбрасывать на ленту и информацию заголовку, и задания спулера. Обычно, только данный счет должен содержать "QS"-указатель на драйвер "peqs:". Все другие счета должны содержать просто "Q"-указатели.

В настоящее время, счет спулера не несет полезной нагрузки, кроме указанной. Супер-Q-указатели не помещаются в счет "dm", поскольку может возникнуть конфликт при случайном восстановлении файла "peqs".

Теперь стало возможным восстанавливать задания спулера с предварительно сделанных копий (file-save). Доступны две опции: отдельные записи или весь файл могут быть восстановлены во временный файл, а затем скопированы в спулер по необходимости, или все содержимое спулера может быть пререзаписано.

Обратите внимание, что для сохранения заданий спулера с командой "save" Необходимо указать опцию "E".

Супер-Q-указатель для доступа к заданиям спулера. Супер-Q-указатель "peqs" позволяет получить доступ к заданиям спулера, как к стандартным файлам. Следующие преобразования применяются и при извлечении, и при обновлении (DLE - символ 16):

Необработанное задание Преобразованная запись
CR,LF AM
DLE DLE,DLE
SM DLE,'_'
AM DLE,'^'
VM DLE,']'

Отметим, что все завершающие пустые символы при чтении задания удаляются.

Такое преобразование упрощает чтение, редактирование и обновление заданий с помощью BASIC, ED и Update processor.

Команда "COPY" может быть использована для копирования заданий в стандартный файл в архивных целях.

Поддерживаются операции удаления "DELETE" и очистки "CLEARFILE", но только для разблокированных удержанных файлов (как при выполнении "SP-EDIT").

При обновлении существующего разблокированного удержанного задания обновляется его содержание, без изменения номера задания. При обновлении несуществующего задания создается новое задание спулера с опциями текущей команды "SP-ASSIGN". Попытка обновления блокированного или не удержанного задания имеет нулевой эффект.

При чтении записи для обновления рекомендуется воспользоваться командой "READU". Операция завершается неудачно, если задание заблокировано или не является удержанным файлом.

Если пользователь обновляет запись "0" файла "peqs", задание отправляется в спулер снова с текущими опциями "sp-assign" и помещается в запись с первым доступным номером. Пользователь может переназначить текущие параметры спулера, напрямую указав новые опции после идентификатора записи "0". Отметим, что в идентификаторе записи не должно быть пробелов, а опции "c","i","o","rnnn","t" и "?" игнорируются.

Если для обновления записей "peqs" применяется Update processor, рекомендуется использовать опцию "(r" для более полного контроля за управляющими символами и для предотвращения усечения завершающих маркеров атрибута.

Следующие псевдо-атрибуты определены в файле "peqs". Эти атрибуты транслируют данные из записей файла "peqs" в секцию заголовка файла (с именем "hdr:peqs"):

Job Номер задания.
Size Размер записи спулера.
User Последний пользователь, обновлявший задание.
Pib Порт последнего пользователя, выполнившего обновление задания.
Line Порт последнего пользователя, выполнившего обновление задания.
Date Дата последней модификации.
Time Время последней модификации.
Permissions Показывает возможность чтения или записи задания.
Form Номер очереди.
Copies Заданное количество копий.
Status Информация о статусе задания (аналогично "list-peqs").
Prio Показывает преоритет печати из очереди.

Счет "SPOOLER" содержит супер-Q-указатели, которые имеют в атрибуте типа файла "qs". Этот код сигнализирует процессору "save" о необходимости сбрасывать и информацию заголовка, и задание спулера на ленту. Для получения дополнительной информации см. "spooler.account".

Блокировки

Имеется 4 вида блокировки, связанных со спулером: блокировка главной очереди ("master"), блокировка входной очереди ("input"), блокировка очереди на печать ("form") и блокировка номера работы ("permanent element (or entry)").

Если блокировка конкретного типа не произведена, в соответствующей позиции на экране появляется литерал "###". Если блокировка имеется, выдается номер порта (port.number) процесса, который установил эту блокировку.

  • "mq" - это блокировка главной очереди ("master queue" lock). Эта блокировка используется процессом спулера во время изменения любой из его таблиц (например, в момент запуска принтера).
  • "iq" - это блокировка входной очереди ("input queue" lock). "iq" срабатывает на максимальное количество заданий, которые могут быть открыты одновременно. До момента выхода на рынок нового спулера, где каждое задание на печать будет существовать в виде записи файла, максимальное количество составляет около 650 "постоянных" элементов, т.е. элементов типа "hold".
  • "fq" - это блокировка очереди заданий на печать ("form queue" lock). Она осуществляется каждый раз, когда очередь печатных заданий (form-queue) приписывается к принтеру.
  • "peq" - это блокировка номера работы в очереди на принтер ("printer element queue" lock). Она задействуется в течение короткого времени каждым пользователем, когда создается первый байт записи в очереди спулера.
Опции

Большинство команд спулера допускает использование опций, которые иногда имеют числовые аргументы.

Чтобы числовые опции были понятны интерпретатору опций, рекомендуется разделять их пробелами, как в следующем примере:

sp-assign 3 hs f1 ?

В этой команде задаются параметры для вывода данных в файл задержки (hold file), подавляется вывод на печать в конце работы, выходные данные направляются в очередь выходных работ номер 1 (form queue 1), и выдаются три копии.

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

sp-assign f1 3 hs ?

Без пробела между "1" и "3" выходный данные в одном экземпляре будут направлены в очередь 13, а не в очередь 1.

Примеры:

:list peqs
Page 1    Peqs           10:57:12 12 Sep 1994
peqs
1
2
3
[405] 3 items listed out of 3 items.
:u peqs 3 (r
peqs '3' size = 167
01 .:list md md (p
02 Page 1 md           10:57:59 12 Sep 1994
03
04 md...................
05
06 md
07
08 [405] 1 items listed out of 1 items.
09
peqs '3' size = 167 filed