Язык управления заданиями (, JCL) — язык программирования, применяющийся в операционных системах мейнфреймов фирмы IBM линии OS/360, MVS, OS/390, z/OS и их клонах, включая ОС ЕС, TKS и БОС. В линии IBM DOS/360, DOS/VS, VSE, z/VSE реализована частично совместимая версия JCL. В гостевой ОС IBM GCS реализовано подмножество JCL.
Применяется для управления запуском пакетных заданий. В силу функционального назначения, обладает минимальными выразительными свойствами как, собственно, язык программирования.
Синтаксис оператора исходно был жестко привязан к определенным позициям (колонкам) на перфокарте: в первых колонках — признак типа карты: // — карта оператора. Карта, содержащая только символы // в начальных позициях — пустой оператор. Пустой оператор указывает на завершение описания задания. /* — конец данных, вводимых во входном потоке, //* — строка комментариев Если это карта оператора, то далее может идти имя оператора (до 8 символов). Это имя используется для ссылок на данный оператор из других операторов, а также для идентификации оператора в сообщениях ОС. Имя оператора JOB является именем задания в системе. затем через как минимум один пробел (в ранних версиях — строго с 10-й колонки) следует оператор языка: JOB — описание задания EXEC — описание шага задания DD — описание используемого в шаге задания набора данных или устройства ввода-вывода (по одному оператору на каждый используемый ресурс). затем через как минимум один пробел идут параметры оператора, перечисляемые через запятую. Пробелы между параметрами недопустимы. Если параметры не умещаются на одной карте с оператором, они могут быть продолжены на картах продолжения. В ранних версиях для указания наличия карт продолжения нужно было указать в 71-й колонке символ, отличный от пробела (обычно это была латинская буква X), а список параметров на карте продолжения должен был начинаться строго с 16-й колонки. В более современных версиях достаточно отделить параметры хотя бы одним пробелом от начальных //. Колонки с 72-й по 80 отводились под нумерацию карт для предотвращения нарушения порядка карт.
Этот синтаксис остался с тех времён, когда задание вводилось с перфокарт (80-колоночных) и позволяет предохранить от случайного запуска на выполнение информации с неправильно вставленных (перевёрнутых) карт.
В целях обеспечения совместимости он не менялся с 1960 гг. и продолжает применяться в современных версиях операционных систем z/OS и z/VSE.
Пример
Эта последовательность команд («задание» в терминах ОС ЕС) копирует содержимое набора данных IS198.TEST.INPUT в набор данных IS198.TEST.OUTPUT.
//IS198CPY JOB (IS198T3*0500),'COPY JOB',CLASS=L,MSGCLASS=X //COPY01 EXEC PGM=IEBGENER //SYSPRINT DD SYSOUT=A //SYSUT1 DD DSN=IS198.TEST.INPUT,DISP=SHR //SYSUT2 DD DSN=IS198.TEST.OUTPUT, // DISP=(NEW,CATLG,DELETE), // SPACE=(CYL,(40,5),RLSE), // DCB=(LRECL=115,BLKSIZE=0), // DATACLAS=SEQFB //SYSIN DD DUMMY //
Копирование осуществляет служебная программа IEBGENER, которая копирует входной набор данных (SYSUT1) в выходной набор данных (SYSUT2). Для нового (DISP=(NEW,CATLG,DELETE)) выходного набора данных будет выделено место (параметр SPACE) на устройстве прямого доступа: 40 цилиндров изначально и 15 раз по 5 цилиндров, когда первоначально выделенное место будет израсходовано. При успешном завершении задания новый набор данных будет каталогизирован (DISP=(NEW,CATLG,DELETE), а в случае аварийного завершения — удален (DISP=(NEW,CATLG,DELETE))
Кроме того, у программы есть входной поток (SYSIN - не используется (DUMMY)) и выходной поток (SYSPRINT). Оператор JOB описывает учетную информацию пользователя (формат зависит от настроек системы) и параметры выполнения задания. В данном примере задание выполняется с классом L (параметры класса определяет системный администратор при настройке ОС), служебные сообщения будут выводиться в выходную очередь класса A. Имя, заданное в качестве метки оператора JOB (IS198CPY), будет использовано в качестве идентификатора задания во время его выполнения.
В юниксоподобной системе аналогичное действие выглядело бы как
cp IS198.TEST.INPUT IS198.TEST.OUTPUT
Следует однако иметь в виду, что «задание» в терминах «традиционных» ОС для mainframe всё же не является прямым аналогом командного файла в юниксоподобной системе. Обработка заданий выполняется специальной системной программой — Планировщиком заданий. Так как язык управления заданиями описывает не только порядок выполнения определенных программ, но и все необходимые для этого ресурсы (имена наборов данных и место под них, устройства ввода-вывода, требования к оперативной памяти и времени центрального процессора и т.д.). Планировщик организовывает порядок выполнения заданий так, чтобы наиболее эффективно использовать доступные вычислительные ресурсы с минимальным вмешательством человека-оператора.
Категория:Языки программирования по алфавиту