Московский государственный университет путей сообщения
Опубликован: 13.04.2006 | Доступ: свободный | Студентов: 868 / 87 | Оценка: 4.41 / 3.73 | Длительность: 24:53:00
Лекция 5:

Управление заданиями и язык JCL

Функции и компоненты подсистемы JES2

Задания, поступающие в систему от различных источников, принимаются и обрабатываются специальным компонентом z/OS, который называется подсистемой управления заданиями JES (Job Entry Subsystem)1Хотя слово entry часто переводят как <вводgt;, здесь его смысл следует трактовать шире.. JES принимает задания (рис. 5.19), поступающие с входных устройств, регистрирует их, осуществляет анализ и формирует очереди заданий, а затем передает задания на выполнение базовой управляющей программе BCP. После завершения выполнения задания и получения результатов от BCP, JES формирует отчет по заданию (листинг), передает его пользователю или выводит на указанные устройства. Чаще всего в установленных конфигурациях z/OS используется базовый компонент управления заданиями JES2, который и будет рассмотрен в данной главе. Альтернативой JES2 является опциональный компонент JES3, который в отличие от JES2 может использоваться для централизованного управления заданиями в многомашинной системе. Отметим, что JES2 работает в собственном адресном пространстве и имеет статус подсистемы (использует специальный SSI-интерфейс для взаимодействия с базовой управляющей программой z/OS). Кроме того, JES2 поддерживает собственные языковые средства, которые можно включать в текст задания (так называемые операторы JECL - Job Entry Control Language) и применять в виде консольных команд (системные команды JES2).

Назначение подсистемы управления заданиями

Рис. 5.19. Назначение подсистемы управления заданиями

На рис. 5.20 представлена схема, иллюстрирующая основные этапы обработки заданий после того, как они направлены в подсистему JES2 [ 5.13 ] .

Этапы обработки заданий

Рис. 5.20. Этапы обработки заданий

На этапе ввода (entry phase) осуществляется прием заданий, поступающих в систему от различных источников. Пользователь может задействовать для этих целей терминальные устройства, консоли, сетевые рабочие станции и т.п., применяя консольные команды START, MOUNT, команды TSO/E LOGON и SUBMIT. Существует возможность формировать и направлять задания на обработку из ранее запущенных программ и заданий. Поддерживается возможность удаленного RJE (Remote Job Entry) и сетевого NJE (Network Job Entry) ввода заданий, поступающих от узлов распределенной вычислительной сети. JES2 контролирует все пути поступления заданий с помощью специальных встроенных программ ввода INTRDR (Internal Reader). Текст каждого поступившего задания (предложения JCL и JECL) и вложенные в него входные данные пользователя (обозначаемые как набор данных SYSIN) помещаются в специальный набор данных JES2, называемый "спул" (spool).

Спул используется для временного хранения данных, связанных с выполнением каждого поступившего в подсистему JES2 задания, и содержит:

  • JCL операторы задания и специальные операторы JES2 (JECL);
  • исходные данные, представленные во входном потоке (набор данных SYSIN);
  • выходные данные и сообщения, формируемые в процессе выполнения задания, и подготавливаемые для вывода в отчет (набор данных SYSOUT);
  • управляющая информация JES2;
  • сообщения для вывода в системный журнал SYSLOG.

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

Все зарегистрированные задания поступают затем в очередь на следующий этап обработки.

На этапе преобразования (conversion phase) сначала производится анализ текста задания и трансляция его в специальный промежуточный код. Если обнаружены синтаксические ошибки, формируется отчет SYSOUT, включающий диагностические сообщения, и задание направляется на этап вывода, минуя стадию выполнения. В процессе анализа при необходимости происходит включение в текст задания и настройка параметров так называемых процедур JCL, вызываемых из внешних библиотек. Процедуры представляют собой готовые блоки предложений JCL, предназначенные для решения типовых пользовательских задач и хранящиеся в специальных наборах данных - библиотеках процедур (на рисунке обозначены как PROC). JES2 располагает настраиваемым списком используемых стандартных библиотек процедур (самая известная среди них - SYS1.PROCLIB). Пользователь также имеет возможность указать собственный набор библиотек процедур с помощью оператора JCLLIB.

Если ошибки не обнаружены, промежуточный код задания помещается в спул, и задание передается в очередь на стадию выполнения. Следует отметить, что для каждого класса заданий формируется отдельная очередь. Внутри очереди задания упорядочены по приоритетам, назначаемым JES2 на основе установленной политики администрирования.

На этапе выполнения (execution phase) ключевую роль играют системные программы, получившие название инициаторов (initiators). Обычно запускается несколько инициаторов одновременно, так чтобы один инициатор обслуживал одну или несколько конкретных очередей заданий (по значениям класса). Каждый инициатор работает в собственном виртуальном адресном пространстве в соответствии со следующим алгоритмом:

  • инициатор формирует запрос к JES2 на получение нового задания из очередей обслуживаемых им классов;
  • JES2 анализирует очередь заданий (JOBQUEUE) и передает инициатору сообщение о выбранном в соответствии с приоритетом задании;
  • инициатор считывает из спула промежуточный код задания и входные данные (SYSIN), определяет, какие ресурсы необходимы для выполнения, и открывает соответствующие наборы данных, а также копирует в свое адресное пространство загрузочные модули вызываемых в задании программ;
  • инициатор последовательно передает управление программам задания, контролируя ход их выполнения и поступающие сообщения; реальное управление выполнением программ реализуется базовой управляющей программой (BCP);
  • при завершении задания (нормальном или аварийном) результаты работы программ передаются инициатором в набор данных SYSOUT спула, а задания поступают в очередь на стадию вывода.

Отметим, что в z/OS поддерживается два типа инициаторов: инициаторы JES и инициаторы WLM. Инициаторы JES2 обычно запускаются автоматически при инициализации системы в соответствии с настройками JES2 и назначаются на обслуживание определенных классов заданий. Инициаторы WLM запускаются динамически в зависимости от текущей нагрузки системы и в соответствии с установленной политикой управления нагрузкой в целевом режиме.

Важно подчеркнуть, что для большинства заданий не создаются новые адресные пространства z/OS, поскольку их выполнение происходит в адресных пространствах инициаторов. Исключение составляют задания классов STC и TSU, которые не обрабатываются инициаторами. Для этих классов JES2 самостоятельно создает отдельные адресные пространства для каждого пользовательского сеанса TSO и каждой запускаемой процедуры, а также обрабатывает поступающие сообщения.

На этапе вывода (output phase) JES2 формирует отчет о выполнении задания в наборе данных SYSOUT в соответствии с требованиями и характеристиками назначенного выходного класса и указанными в задании атрибутами вывода. Выходной класс задания (всего доступно 36 классов, кодируемых символами A-Z или цифрами 0-9) определяется пользователем с помощью параметра SYSOUT оператора DD или оператора OUTPUT либо назначается подсистемой JES2 по умолчанию. Классы служат для группирования заданий с целью использования общих ограничений по выводу отчетов и для целей управления, но никак не связаны с используемыми для вывода устройствами. Подготовленные отчеты направляются в очередь на стадию печати или задерживаются на этапе вывода, если для задания установлен статус HOLD. Данный статус задается пользователем или устанавливается JES2 для некоторого класса или группы заданий. Дальнейшая обработка задержанных заданий производится по специальному указанию оператора (пользователя).

На этапе печати (hardcopy phase) производится вывод подготовленного отчета из набора данных SYSOUT на указанное пользователем или установленное JES2 выходное устройство (принтер, узел сети и т.п.), и задание передается в очередь на стадию завершения.

На этапе завершения (purge phase) JES2 осуществляет "очистку" спула и очереди заданий от информации, связанной с выполненным заданием, и формирует соответствующее сообщение.

Следует напомнить, что в z/OS существует специальный опциональный компонент SDSF, предназначенный для просмотра параметров текущего состояния всех запущенных в системе заданий и отчетов о выполнении, а также предоставляющий возможность изменять некоторые параметры и управлять ходом выполнения заданий динамически.

Структура пакетного задания JCL

Итак, прежде чем передать пакетное задание системе, пользователь должен подготовить его текст на языке JCL. Обычно текст задания создается в некотором наборе данных с помощью текстового редактора, откуда специальными средствами пользовательского интерфейса его можно направить на обработку в подсистему JES2. z/OS требует, чтобы для представления заданий использовались только последовательные и библиотечные наборы данных с параметрами RECFM=FB и LRECL=80. Текст задания вводится, как правило, прописными буквами.

Задание состоит из последовательности управляющих предложений JCL (job control statement)2Иногда предложения JCL называют <картами> задания (job cards), вспоминая о тех временах, когда текст задания готовился на перфокартах. Оттуда, кстати, унаследовано ограничение строки задания в 80 символов.. Каждое предложение имеет следующую структуру:

//ИМЯ ОПЕРАТОР ОПЕРАНДЫ КОММЕНТАРИЙ

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

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

Примеры правильных имен: STOUT1, SYSPRINT, IVANOV, IVAN#S

Примеры неправильных имен: 3DIAGNOZ (начинается с цифры), DIAGNOSTIKA (содержит более восьми символов), ТОМ+И (содержит недопустимый символ И ).

Вслед за полем имени следуют другие поля, отделяемые друг от друга одним или несколькими пробелами.

Таблица 5.4. Основные операторы JCL
Оператор Назначение оператора
JOB Начало задания и режим выполнения задания
EXEC Начало шага задания, указание выполняемой программы или процедуры
DD Описание набора данных и используемых устройств
COMMAND Ввод системной (консольной) команды MVS или команды JES
PROC Начало процедуры и описание параметров процедуры
PEND Конец процедуры
JCLLIB Список библиотек для поиска процедур, указанных в задании
OUTPUT Параметры формирования отчета о выполнении задания (SYSOUT)
INCLUDE Имя раздела библиотеки, текст которого необходимо включить в указанное место задания
CNTL/ENDCNTL Начало и конец блока управляющих параметров, передаваемых программе во входном потоке
IF/THEN/ELSE/ENDIF Условное выполнение шагов задания (ветвление)
SET Инициализация или изменение значений символических параметров
/* Оператор ограничения данных, представленных во входном потоке
// Пустой оператор (конец задания)
//* Оператор комментария

Поле оператор определяет тип управляющего оператора JCL, который задается одним из ключевых слов, представленных в таблица 5.4. Назначение и использование основных операторов ( JOB, EXEC, DD ) будет рассмотрено в данной главе.

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

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

333,TEST,,0.8E-15 NEW,,DELETE

Ключевые параметры задаются с использованием предопределенных ключевых слов в виде: ключевое_слово=значение. Например, CLASS=B, REGION=100M, COND=(1,LE). Последовательность записи ключевых параметров - произвольная.

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

DISP=(NEW,,DELETE) - позиционные подпараметры параметра DISP

DCB=(RECFM=FB,LRECL=80) - ключевые подпараметры параметра DCB

В поле комментарий предложения JCL помещают произвольную текстовую информацию, поясняющую назначение или особенности использования отдельных операторов. Отметим, что для этой цели может применяться специальный оператор комментария //*. Этот текст не обрабатывается при выполнении задания.

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

  1. Разрыв строки необходимо сделать точно в том месте, где располагается разделительная запятая списка параметров.
  2. В следующей строке в позициях 1 и 2 нужно указать символы //. Продолжить ввод списка параметров, начиная не ранее 4-й, но не позднее 16-й позиции строки.

    Вот как выглядит запись многострочного предложения JCL:

    //OUT DD UNIT=SYSDA,VOL=SER=UB1,
    // DISP=NEW,SPACE=(1000(5,4)),
    // DSN=&&TEMP1

Исключением из этого правила является ситуация, когда перенос требует "разорвать" параметр, заключенный в апострофы. В этом случае следует вводить текст предложения до 71-й позиции включительно, а продолжение располагать точно с 16-й позиции следующей строки.

Структуру задания в z/OS схематично можно представить в виде последовательности операторов (рис. 5.21). Первым всегда указывается оператор задания JOB, который отмечает начало задания. Непосредственно за оператором JOB могут следовать другие операторы ( DD, JCLLIB, OUTPUT ), с помощью которых описывают общие ресурсы задания в целом (наборы данных, библиотеки процедур, параметры вывода результатов).

Структура задания

Рис. 5.21. Структура задания

Последующие операторы задания группируются по шагам или пунктам. Шаг (пункт) задания (job step) - это последовательность операторов JCL, начинающаяся с оператора EXEC и включающая некоторое количество иных операторов (в основном DD ). Оператор EXEC (его называют иногда оператором шага задания) устанавливает, какую программу (загрузочный модуль) или процедуру JCL необходимо выполнить. С помощью операторов DD в шаге задания описывают наборы данных и/или устройства, используемые при выполнении указанной в операторе EXEC программы (процедуры). Шаги задания выполняются строго последовательно. Однако есть возможность пропуска (невыполнения) некоторых шагов в зависимости от результатов работы предыдущих шагов с помощью операторов IF/THEN/ELSE или параметра COND операторов JOB и EXEC. Общее количество шагов задания не может превышать 255, включая шаги всех вызываемых в задании процедур.

Далее приводится обзор основных операторов языка управления заданиями, который, однако, не претендует на полноту и не может служить заменой стандартной документации [ 5.14 ] , [ 5.15 ] . Многие операторы и особенности их применения представлены без некоторых деталей, которые могут понадобиться при практическом использовании JCL. При описании формата операторов используются привычные мнемонические правила:

  • информация, заключенная в квадратные скобки, является необязательной и может быть опущена;
  • символ | используется для указания альтернативных значений, из которых следует выбрать одно.

Нужно отметить, что язык JCL достаточно подробно описан в отечественной литературе [ 5.16 ] , [ 5.17 ] , [ 5.18 ] , в том, правда, виде, в каком он сложился к началу 90-х годов.