Открыть сервис

JCL

JCL (Job Control Language — язык управления заданиями) — это язык описания заданий (скриптов) для операционной системы IBM z/OS (и её предшественников OS/360, MVS), предназначенный для управления запуском пакетных (batch) задач в мейнфреймовых средах. JCL определяет, какие программы должны быть выполнены, какие наборы данных (файлы) используются, какие ресурсы системы выделяются, и как обрабатываются ошибки. JCL не является языком программирования общего назначения — это язык управления рабочими потоками, ориентированный на пакетную обработку.

История

JCL был разработан компанией IBM в середине 1960-х годов для операционной системы OS/360, которая стала основой для последующих мейнфреймовых ОС. Первоначально JCL предназначался для описания последовательности шагов (job steps) в пакетных заданиях, где каждый шаг запускал отдельную программу или утилиту. С развитием операционных систем (MVS, OS/390, z/OS) JCL эволюционировал, но сохранил обратную совместимость: многие конструкции, созданные в 1960-х, работают и в современных системах.

В 1970–1980-х годах JCL стал стандартом де-факто для управления пакетной обработкой на мейнфреймах IBM, которые доминировали в корпоративных вычислениях. С появлением распределённых систем и Unix-подобных ОС в 1990-х годах популярность JCL снизилась, однако он остаётся критически важным в банковской сфере, страховании, государственных системах и других отраслях, где используются мейнфреймы.

Основные концепции и синтаксис

JCL состоит из набора операторов (statements), каждый из которых начинается с символа // в первой колонке строки. Строки JCL имеют фиксированный формат: колонки 1–2 — символы //, колонка 3 — необязательный идентификатор, колонки 4–71 — тело оператора, колонки 72–80 — необязательный порядковый номер (игнорируется системой).

Основные типы операторов:

Оператор JOB

Задаёт имя задания и его параметры (например, класс выполнения, приоритет, учётную запись пользователя). `` //MYJOB JOB (ACCT#),'USER NAME',CLASS=A,MSGCLASS=X ``

Оператор EXEC

Указывает, какую программу или процедуру (процедура — набор шагов JCL, сохранённый в библиотеке) выполнить в данном шаге. `` //STEP1 EXEC PGM=IEFBR14 ``

Оператор DD (Data Definition)

Описывает набор данных (файл), используемый в шаге: его расположение, тип носителя, атрибуты (размер, организация записи), а также режим доступа (ввод, вывод, обновление). DD-операторы могут ссылаться на физические файлы (DSN — Data Set Name) или на временные наборы данных. `` //SYSPRINT DD SYSOUT=* //INPUT DD DSN=MY.DATA.SET,DISP=SHR ``

Оператор PROC и ENDPROC

Используются для определения встроенных процедур (inline procedures) внутри задания.

Оператор PEND

Завершает определение процедуры.

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

Типичное JCL-задание состоит из трёх частей:

  1. JOB-оператор — начало задания.
  2. Последовательность шагов (EXEC + DD) — каждый шаг запускает программу с определёнными входными/выходными данными.
  3. Конец задания — система автоматически завершает задание после последнего шага; явного оператора конца нет.

Пример простого задания, копирующего файл: `` //COPYJOB JOB (123),'COPY FILE',CLASS=A //STEP1 EXEC PGM=IEBGENER //SYSUT1 DD DSN=INPUT.FILE,DISP=SHR //SYSUT2 DD DSN=OUTPUT.FILE,DISP=(NEW,CATLG), // UNIT=SYSDA,SPACE=(CYL,(10,5)) //SYSPRINT DD SYSOUT=* ``

Классификация и виды операторов

По функциональному назначению:

  • Управляющие операторы — JOB, EXEC, DD, PROC, PEND.
  • Операторы описания процедур — PROC, PEND.
  • Операторы описания наборов данных — DD (с множеством параметров: DSN, DISP, UNIT, SPACE, DCB и др.).
  • Операторы комментариев — строки, начинающиеся с //*, игнорируются системой.

По способу использования:

  • Инлайн (inline) — операторы, записанные непосредственно в задании.
  • Процедуры (cataloged procedures) — наборы операторов, хранящиеся в библиотеке (SYS1.PROCLIB) и вызываемые по имени.
  • Инклуды (INCLUDE) — операторы, подключающие внешние наборы операторов из библиотек.

Характеристики и особенности

  • Фиксированный формат строк — строгие ограничения на позиции символов (колонки 1–71).
  • Обратная совместимость — JCL, написанный в 1970-х, обычно работает на современных версиях z/OS.
  • Пакетная ориентация — JCL не предназначен для интерактивного ввода-вывода; все задания выполняются в фоновом режиме.
  • Управление ресурсами — JCL позволяет задавать класс выполнения (CLASS), приоритет (PRTY), объём памяти (REGION) и другие параметры.
  • Обработка ошибок — с помощью операторов COND и IF/THEN/ELSE можно задавать условное выполнение шагов в зависимости от кодов возврата предыдущих шагов.
  • Поддержка наборов данных VSAM, GDG, PDS — JCL умеет работать с различными типами файловых структур, характерных для мейнфреймов.

Применение

JCL используется в основном в корпоративных средах, где требуются высокая надёжность, масштабируемость и пакетная обработка больших объёмов данных. Основные области применения:

В России JCL применяется в организациях, использующих мейнфреймы IBM (например, в Сбербанке, ВТБ, РЖД, Пенсионном фонде РФ), а также в системах, мигрировавших с советских ЕС ЭВМ на платформу IBM.

Интересные факты

  • JCL является одним из старейших языков управления заданиями, который до сих пор активно используется.
  • Синтаксис JCL считается сложным для изучения из-за строгих правил форматирования и большого числа параметров.
  • В 2000-х годах IBM разработала более современную альтернативу — z/OS UNIX System Services (USS), которая позволяет использовать shell-скрипты и утилиты POSIX, но JCL остаётся основным средством для пакетной обработки.
  • Существуют эмуляторы мейнфреймов (например, Hercules), позволяющие запускать JCL-задания на персональных компьютерах в учебных целях.
  • В сообществе мейнфреймщиков JCL часто называют «языком, который никто не любит, но все используют».

Критика

JCL подвергается критике за:

  • Сложность синтаксиса — фиксированный формат строк, обилие параметров и отсутствие современных конструкций (например, циклов) затрудняют написание и отладку.
  • Отсутствие структурированности — JCL не поддерживает модульность, инкапсуляцию или объектно-ориентированные подходы.
  • Зависимость от платформы — JCL привязан к мейнфреймам IBM и несовместим с другими ОС.
  • Низкая читаемость — длинные строки, обилие сокращений и неочевидные правила делают код трудночитаемым для новичков.

Тем не менее, в среде мейнфреймов JCL остаётся незаменимым инструментом благодаря стабильности, производительности и огромной накопленной базе заданий.

Источники

  • IBM z/OS MVS JCL Reference (SA22-7597)
  • IBM z/OS MVS JCL User's Guide (SA22-7598)
  • «OS/360 Job Control Language» — IBM Systems Reference Library, 1966
  • «MVS JCL: A Comprehensive Guide» — Mike H. (McGraw-Hill, 1995)
  • Документация IBM Knowledge Center по z/OS JCL
  • Статьи на сайте IBM Community (developerWorks, 2000–2010)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →