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-задание состоит из трёх частей:
- JOB-оператор — начало задания.
- Последовательность шагов (EXEC + DD) — каждый шаг запускает программу с определёнными входными/выходными данными.
- Конец задания — система автоматически завершает задание после последнего шага; явного оператора конца нет.
Пример простого задания, копирующего файл: `` //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 →