Язык управления заданиями - Job Control Language

Язык управления заданиями (JCL) это имя для языки сценариев используется на Мэйнфрейм IBM операционных систем, чтобы проинструктировать систему о том, как запустить пакетная работа или запустить подсистему.[1]

В частности, цель JCL - указать, какие программы запускать, с помощью каких файлов или устройств. [2] для ввода или вывода, а иногда также указать, при каких условиях пропустить шаг.

Существует два разных языка IBM Job Control:

У них есть общие правила синтаксиса и несколько основных концепций, но в остальном они очень разные.[3] В Операционная система ВМ не имеет JCL как такового; то CP и CMS компоненты каждый имеет командные языки.

Терминология

Некоторые слова или фразы, используемые в связи с JCL, относятся к технологии мэйнфреймов IBM.

  • Набор данных: «набор данных» - это файл; он может быть временным или постоянным и находиться на жестком диске, ленточном накопителе или другом устройстве.[4][5]
  • Член: «член» секционированного набора данных (PDS) - это отдельный набор данных в PDS. Доступ к члену можно получить, указав имя PDS с именем члена в круглых скобках. Например, системный макрос GETMAIN в SYS1.MACLIB может упоминаться как SYS1.MACLIB (GETMAIN).[6]
  • Многораздельный набор данных: «многораздельный набор данных» или PDS - это совокупность элементов или архив, обычно используемый для представления системных библиотек. Как и в случае с большинством таких структур, однажды сохраненный член не может быть обновлен; член должен быть удален и заменен, например, на IEBUPDTE полезность.[6] Секционированные наборы данных примерно аналогичны статические библиотеки на основе ar в Unix-системах.
  • USS: системные службы Unix, подсистема Unix, работающая как часть MVS и позволяющая запускать файлы, сценарии, задачи и программы Unix на мэйнфрейме в среде UNIX.

Мотивация

Первоначально системы мэйнфреймов были ориентированы на пакетная обработка. Многие пакетные задания требуют настройки с особыми требованиями для основное хранилище, и специальные устройства, такие как магнитные ленты, частные тома дисков и принтеры, настроенные с помощью специальных форм.[7] JCL был разработан как средство обеспечения доступности всех необходимых ресурсов до того, как запланировано выполнение задания. Например, многие системы, такие как Linux позволяют указать необходимые наборы данных на командная строка, и поэтому подлежит замене на оболочка или генерируется программой во время выполнения. В этих системах Операционная система планировщик заданий мало или совсем не знает требований работы. Напротив, JCL явно определяет все необходимые наборы данных и устройства. Планировщик может предварительно выделить ресурсы перед запуском задания. Это помогает избежать "тупик ", где задание A содержит ресурс R1 и запрашивает ресурс R2, в то время как одновременно выполняющееся задание B удерживает ресурс R2 и запрашивает R1. В таких случаях единственным решением является оператор компьютера чтобы завершить одно из заданий, которое затем необходимо перезапустить. При управлении заданием, если задание A запланировано для запуска, задание B не будет запущено, пока задание A не завершит или не освободит необходимые ресурсы.

Общие особенности DOS и OS JCL

Работа, шаги и процедуры

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

И в DOS, и в OS JCL первой «картой» должна быть карта JOB, которая:[8]

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

Процедуры (обычно называемые прока) представляют собой предварительно написанные JCL для шагов или групп шагов, вставленных в задание. Оба JCL допускают такие процедуры. Процедуры используются для повторения шагов, которые используются несколько раз в одном задании или в нескольких разных заданиях. Они экономят время программиста и снижают риск ошибок. Чтобы запустить процедуру, нужно просто включить в файл JCL одну «карточку», которая копирует процедуру из указанного файла и вставляет ее в поток заданий. Также procs могут включать параметры настраивать процедуру для каждого использования.

Базовый синтаксис

И DOS, и OS JCL имеют максимальную полезную длину строки 80 символов, потому что, когда DOS / 360 и OS / 360 были впервые использованы, основным методом предоставления нового ввода в компьютерную систему было 80 столбцов. перфокарты.[9] Позже стало возможно отправлять задания через файлы на диске или на магнитной ленте с более длинными записями, но компоненты отправки заданий операционной системы игнорировали все, что находится после символа 80.

Строго говоря, оба семейства операционных систем используют только 71 символ в строке. Символы 73-80 обычно представляют собой порядковые номера карт, которые система распечатывает в отчете об окончании работы и полезны для определения местоположения любых ошибок, сообщаемых операционной системой. Символ 72 обычно остается пустым, но он может содержать непустой символ, чтобы указать, что оператор JCL продолжается на следующей карточке.

Все команды, имена параметров и значения должны быть заглавными, кроме USS имена файлов.

Все строки, кроме ввода In-Stream (см. Ниже), должны начинаться с косой черты "/", и все строки, которые обрабатывает операционная система, должны начинаться с двух косых черт. // - всегда начиная с первый столбец. Однако есть два исключения: оператор-разделитель и оператор комментария. Операторы-разделители начинаются с косой черты и звездочки (/*), а оператор комментария в OS JCL начинается с пары косых черт и звездочки (//*) или звездочкой в ​​DOS JCL.

Многие операторы JCL слишком длинные, чтобы уместиться в 71 символ, но их можно расширить до неопределенного количества карточек продолжения:

ОС JCLDOS JCL
Завершение всех фактических карт JCL, кроме последней, в точке, где синтаксис требует запятой (,)Завершение всех фактических карт JCL, кроме последней, в точке, где синтаксис требует запятой (,) и непустой символ в столбце 72
Начиная каждую дополнительную карту с // в столбце 1 и затем не менее 1 пробелаКаждая карта-продолжение начинается с пробелов и продолжается в столбце 15.

Структура наиболее распространенных типов карт:[10]

ОС JCLDOS JCL
  • //
  • Поле имени для этого утверждения, следующее // без пробелов между ними. Если у этого оператора нет имени, сразу после него следует хотя бы один пробел. //.
  • Пространство (а)
  • Тип заявления
  • Пространство (а)
  • Параметры, которые различаются в зависимости от типа инструкции, разделены запятыми и без пробелов между ними.
  • // (пробелы, если это продолжение предыдущей строки)
  • Тип утверждения для этого утверждения, следующий // с пробелом между ними.
  • Пространство (а)
  • Название ресурса
  • Пространство (а)
  • Параметры, которые различаются в зависимости от типа инструкции, разделены запятыми и без пробелов между ними. Позиционные параметры, за которыми следуют параметры ключевого слова.

In-Stream ввод

И DOS, и OS JCL позволяют ввод в потоке, то есть «карты», которые должны обрабатываться прикладной программой, а не операционной системой. Данные, которые должны храниться в течение длительного времени, обычно хранятся на диске, но перед использованием интерактивный Терминалы стали обычным явлением, и единственный способ создавать и редактировать такие файлы на дисках - вводить новые данные на карты.

DOS и OS JCL имеют разные способы сигнализации о начале ввода в потоке, но оба заканчивают ввод в потоке с помощью /* в столбце 1 карточки, следующей за последней карточкой данных In-Stream. Это заставляет операционную систему возобновить обработку JCL на карте после /* карта.[11]

  • OS JCL: операторы DD могут использоваться для описания данных в потоке, а также наборов данных. Оператор DD, имеющий дело с данными в потоке, имеет звездочку (*) после идентификатора DD, например // SYSIN DD *. Операторы JCL могут быть включены как часть данных в потоке с помощью операторов DD DATA.
Операнд с именем DLM разрешено указывать разделитель (по умолчанию "/ *"). Указание альтернативного разделителя позволяет читать JCL как данные, например, для копирования процедур в член библиотеки или для отправки задания в внутренний читатель.
  • Пример,[12] который отправляет вакансию в Внутренний читатель (INTRDR) является:
//СУБМEXECPGM=IEBGENER//SYSPRINT DD SYSOUT=Z//SYSUT2   DD SYSOUT=(А,INTRDR)//SYSIN    DD ДУРАЧОК//SYSUT1   DD ДАННЫЕ,DLM=ZZ//РУНЛАТРРАБОТАACCT,МАНИКС,КЛАСС=А.ТИПРУН=ДЕРЖАТЬ// * ^ ЗАДАНИЕ, которое нужно запустить позже//CPUHOGEXECPGM=PICALC1K//ВЫВОД   DD DSN=PICALC.1000DGTS,КОСМОС=(TRK,1),DISP=(,ХРАНИТЬ)ZZ// * ^ как указано в DLM = ZZ//DROPOLDREXECPGM=IEFBR14//УДАЛИТЬ 4  DD DSN=PICALC.4DGTS,DISP=(Старый,УДАЛИТЬ)//УДАЛИТЬ5  DD DSN=PICALC.5DGTS,DISP=(Старый,УДАЛИТЬ)
  1. Программа под названием PICALC1K будет ждать (TYPRUN = HOLD) ручного освобождения.
  2. Два файла, PICALC.4DGTS и PICALC.5DGTS, будут удалены СЕЙЧАС.
  • DOS JCL: просто введите данные в потоке после карты EXEC для программы.

Сложность

Большая часть сложности OS JCL, в частности, проистекает из большого количества опций для определения набор данных Информация. Пока файлы на Unix -подобные операционные системы абстрагируются в произвольные наборы байтов, при этом детали обрабатываются по большей части операционной системой, наборы данных в OS / 360 и ее преемниках раскрывают свои типы и размеры файлов, типы и длину записей, размеры блоков, зависящие от устройства информация как магнитная лента плотность и информация на этикетке. Хотя для многих параметров существуют системные значения по умолчанию, программисту еще многое предстоит указать с помощью комбинации JCL и информации, закодированной в программе. Чем больше информации закодировано в программе, тем она менее гибкая, поскольку информация в программе перекрывает все, что есть в JCL; таким образом, большая часть информации обычно предоставляется через JCL.

Например, чтобы скопировать файл на Unix операционной системы, пользователь должен ввести такую ​​команду, как:

cp oldFile newFile

Следующий пример с использованием JCL можно использовать для копирования файла в OS / 360:

//IS198CPYРАБОТА(IS198T30500),"КОПИРОВАТЬ ЗАДАНИЕ",КЛАСС=L,MSGCLASS=Икс//КОПИЯ01EXECPGM=IEBGENER//SYSPRINT DD SYSOUT=*//SYSUT1   DD DSN=СТАРЫЙ ФАЙЛ,DISP=SHR//SYSUT2   DD DSN=НОВЫЙ ФАЙЛ,//DISP=(НОВАЯ,CATLG,УДАЛИТЬ),//КОСМОС=(CYL,(40,5),RLSE),//DCB=(LRECL=115,BLKSIZE=1150)//SYSIN  DD ДУРАЧОК

Второе объяснение сложности JCL заключается в том, что ожидания выполнения задания отличаются от ожиданий в ПК или Unix-подобная среда.

  • Младшие CPU System / 360 были менее мощными и более дорогими, чем ПК середины 1980-х, для которых была разработана MS-DOS. OS / 360 была предназначена для систем с минимальным объемом памяти 32 КБ, а DOS / 360 - для систем с минимальным объемом памяти 16 КБ. А 360/30 ЦП - младший, когда в 1964 году была анонсирована System / 360 - обрабатывал от 1,8 до 34,5 тыс. Инструкций в секунду.[13] Первый ПК IBM в 1981 году имел 16 или 64 КБ памяти и обрабатывал около 330 КБ инструкций в секунду.[14][15] В результате JCL должен был быть легким для компьютер для обработки, и простота использования программистами была гораздо менее приоритетной. В то время программисты были намного дешевле компьютеров.
  • JCL был разработан для пакетная обработка. Таким образом, он должен сообщать операционной системе все, включая то, что делать в зависимости от результата шага. Например, DISP = (НОВОЕ, CATLG, УДАЛИТЬ) означает «если программа работает успешно, создайте новый файл и внесите его в каталог; в противном случае удалите новый файл». Программы, запускаемые на ПК, часто зависят от того, как пользователь очистит после обработки проблемы.
  • Машины System / 360 были разработаны для совместного использования всеми пользователями в организации. Так что РАБОТА card сообщает операционной системе, как выставить счет на счет пользователя (IS198T30500), какой предопределенный объем памяти и другие ресурсы могут быть выделены (КЛАСС = L) и многое другое. // SYSPRINT DD SYSOUT = * сообщает компьютеру, чтобы он распечатал отчет программы по умолчанию принтер который загружен с обычной бумагой, а не на каком-либо другом принтере, который может быть загружен с пустыми чеками. DISP = SHR сообщает операционной системе, что другие программы могут читать СТАРЫЙ ФАЙЛ в то же время.

Более поздние версии операционных систем DOS / 360 и OS / 360 сохраняют большинство функций оригинального JCL, хотя были сделаны некоторые упрощения, чтобы не заставлять клиентов переписывать все свои файлы JCL.[нужна цитата ] Многие пользователи сохраняют как процедура любой набор операторов JCL, который может использоваться более одного или двух раз.[16]

Синтаксис OS JCL аналогичен синтаксису макросы в Системе / 360 язык ассемблера, и поэтому был бы знаком программистам в то время, когда многие программы были написаны на ассемблере.

DOS JCL

Позиционные параметры

//TLBLTAPEFIL, 'COPYTAPE.JOB' ,,,, 2//ASSGNSYS005,200//DLBLDISKFIL, 'КОПИЯ.ЗАДАНИЕ', 0, SD//СТЕПЕНЬSYS005, VOL01,1,0,800,1600

Параметры DOS JCL являются позиционными, что затрудняет их чтение и запись, но упрощает анализ системы.

  • Программист должен помнить, какой элемент в какой позиции находится в каждом типе оператора.
  • Если некоторые необязательные параметры опущены, но включены более поздние, опущенные параметры должны быть представлены запятыми без пробелов, как в заявлении TLBL выше.

DOS JCL до некоторой степени смягчает трудности позиционных параметров за счет использования большего количества операторов с меньшим количеством параметров, чем OS JCL. В этом примере операторы ASSGN, DLBL и EXTENT выполняют ту же работу (указывая, где должен храниться новый файл на диске) как один DD заявление в ОС JCL.

Зависимость от устройства

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

Позднее члены семейства DOS / 360 сократили количество ситуаций, в которых требовались номера моделей устройств.

Размещение файлов вручную

DOS / 360 изначально требовал, чтобы программист указывал расположение и размер всех файлов на DASD. В СТЕПЕНЬ card определяет том, на котором находится экстент, начальную абсолютную дорожку и количество дорожек. Для z / VSE файл может иметь до 256 экстентов на разных томах.

ОС JCL

OS JCL состоит из трех основных типов операторов:[17]

  • РАБОТА оператор, который определяет начало задания и информацию обо всем задании, такую ​​как выставление счетов, приоритет выполнения, а также ограничения по времени и пространству.
  • EXEC оператор, который идентифицирует программу или процедура[18] для выполнения на этом этапе работы,
    и информация о шаге, включая CONDварианты бега или пропуска шага.
  • DD (Определение данных) операторы, которые идентифицируют файл данных, который будет использоваться на шаге, и подробную информацию об этом файле. DD инструкции могут быть в любом порядке на шаге.

С самого начала JCL для семейства ОС (до z / OS ) был более гибким и простым в использовании.

В следующих примерах используется старый стиль синтаксиса, который был предоставлен с момента запуска Система / 360 в 1964 году. Старый синтаксис все еще довольно распространен в рабочих местах, которые выполнялись десятилетиями, с небольшими изменениями.

Правила кодирования операторов JCL

Каждый оператор JCL разделен на пять полей:[19]

 Идентификатор-Имя поля-Поле Операция-Поле Параметр-Поле Комментарии-Поле ^ ^ ^ ^ без пробела пробел пробел

Идентификатор-Поле следует объединить с Имя-Поле, т.е. между ними не должно быть пробелов.

  • Идентификатор-Поле (//): Поле идентификатора указывает системе, что оператор является оператором JCL, а не данными. Поле идентификатора состоит из следующего:
    • Столбцы 1 и 2 всех операторов JCL, кроме оператора-разделителя, содержат //
    • Столбцы 1 и 2 оператора-разделителя содержат /*
    • Столбцы 1, 2 и 3 комментария JCL содержат //*
  • Имя-Поле: Поле имени идентифицирует конкретный оператор, чтобы другие операторы и система могли ссылаться на него. Для операторов JCL он должен быть закодирован следующим образом:
    • Имя должно начинаться в столбце 3.
    • Имя может быть от 1 до 8 буквенно-цифровым или национальным ($, #, @) символы.
    • Первый символ должен быть буквенным.
    • После имени должен быть хотя бы один пробел.
  • Операция-Поле: Поле операции указывает тип оператора или, для оператора команды, команду. Операция-Поле следует закодировать следующим образом:
    • Поле операции состоит из символов в поле синтаксиса оператора.
    • Операция следует за полем имени.
    • Перед операцией должен быть хотя бы один пробел.
    • Операция будет одной из РАБОТА, EXEC и DD.
  • Параметр-Поле: Поле параметра, также иногда называемое полем операнда, содержит параметры, разделенные запятыми. Поле параметра должно быть закодировано следующим образом:
    • Поле параметра следует за полем операции.
    • Перед полем параметра должен быть хотя бы один пробел.
    • Поле параметра содержит параметры, которые являются ключевыми словами, которые используются в операторе для предоставления такой информации, как имя программы или набора данных.
  • Комментарии-Поле: Это содержит Комментарии. Комментарии-Поле должен быть закодирован следующим образом:
    • Поле комментариев следует за полем параметра.
    • Перед полем комментариев должен быть хотя бы один пробел.

Параметры ключевого слова

//НОВЫЙ ФАЙЛ DD DSN=MYFILE01,ЕДИНИЦА ИЗМЕРЕНИЯ=ДИСК,КОСМОС=(TRK,80,10),//DCB=(LRECL=100,BLKSIZE=1000),//DISP=(НОВАЯ,CATLG,УДАЛИТЬ)

Все основные параметры операторов JCL ОС идентифицируются ключевыми словами и могут быть представлены в любом порядке. Некоторые из них содержат два или более субпараметра, например КОСМОС (сколько места на диске выделить для нового файла) и DCB (подробное описание макета файла) в примере выше. Подпараметры иногда позиционны, как в КОСМОС, но самые сложные параметры, такие как DCB, имеют подпараметры ключевого слова.

Позиционный параметр должен предшествовать параметрам ключевого слова. Параметры ключевого слова всегда присваивают значения ключевому слову с помощью знака равенства (=).[20]

Доступ к данным (инструкция DD)

В DD заявление используется для ссылки на данные. Этот оператор связывает внутреннее описание набора данных программой с данными на внешних устройствах: дисках, магнитных лентах, картах, принтерах и т. Д. DD может предоставлять такую ​​информацию, как тип устройства (например, «181», «2400-5», » ЛЕНТА '), а том серийный номер для лент или дисков и описание файла данных, называемого DCB подпараметр после Блок управления данными (DCB) в программе, используемой для идентификации файла.

Информация, описывающая файл, может поступать из трех источников: информация карты DD, информация метки набора данных для существующего файла, хранящегося на ленте или диске, и макрос DCB, закодированный в программе. Когда файл открывается, эти данные объединяются, причем информация DD имеет приоритет над информацией о метке, а информация DCB имеет приоритет над обоими. Затем обновленное описание записывается обратно в метку набора данных. Это может привести к непредвиденным последствиям, если будет предоставлена ​​неверная информация DCB.[21]

Из-за перечисленных выше параметров и конкретной информации для различных методов доступа и устройств оператор DD является наиболее сложным оператором JCL. В одном справочном руководстве IBM описание оператора DD занимает более 130 страниц - более чем в два раза больше, чем операторы JOB и EXEC вместе взятые.[22]

Независимость от устройства

С самого начала JCL для семейства операционных систем OS предлагал высокую степень независимости устройства. Даже для новых файлов, которые должны были быть сохранены после завершения задания, можно было указать тип устройства в общих терминах, например, БЛОК = ДИСК, ЕДИНИЦА = ЛЕНТА, или UNIT = SYSSQ (лента или диск). Конечно, если это имело значение, можно было указать номер модели или даже адрес конкретного устройства.[23]

Процедуры

Процедуры разрешить группировку одного или нескольких "EXEC PGM =" и DD операторы, а затем вызывая их с помощью "EXEC PROC =procname "-или- просто" EXEC procname " [24]

Средство, называемое библиотекой процедур, позволяет предварительно сохранять процедуры.

PROC & PEND

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

Например:

//SUMPRINT PROC //РАСПЕЧАТАТЬEXEC PGM = IEBGENER//SYSUT1   DD DSN=Исполнительный директор.ФАЙЛЫ.ДЕНЬ.RPT24A,DISP=SHR//SYSUT2   DD SYSOUT=А//SYSIN    DD ДУРАЧОК//PEND//EXECSUMPRINT

Параметризованные процедуры

Процедуры OS JCL были параметризованы с самого начала, что делало их похожими на макросы или даже просто подпрограммы и таким образом увеличивая их возможность повторного использования в самых разных ситуациях.[25]

//MYPROC PROC FNAME=MYFILE01,SPTYPE=TRK,ПОКРУТИТЕ=50,SPEXT=10,LR=100,BLK=1000.....//НОВЫЙ ФАЙЛ DD DSN=&FNAME,ЕДИНИЦА ИЗМЕРЕНИЯ=ДИСК,КОСМОС=(&SPTYPE,&ПОКРУТИТЕ,&SPEXT),//DCB=(LRECL=&LR,BLKSIZE=&BLK),DISP=(НОВАЯ,CATLG,УДАЛИТЬ)....

В этом примере все значения, начинающиеся с амперсандов "&"являются параметрами, которые будут указаны, когда задание запрашивает использование процедуры. Оператор PROC, помимо присвоения имени процедуре, позволяет программисту указать значения по умолчанию для каждого параметра. Таким образом, можно использовать одну процедуру в этом пример для создания новых файлов разных размеров и макетов. Например:

//JOB01РАБОТА..........//ШАГ01EXECMYPROCFNAME = JOESFILE, SPTYPE = CYL, SPINIT = 10, SPEXT = 2, LR = 100, BLK = 2000или//JOB02РАБОТА..........//ШАГ01EXECMYPROCFNAME = SUESFILE, SPTYPE = TRK, SPINIT = 500, SPEXT = 100, LR = 100, BLK = 5000

Рефералы

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

//MYPROC................//MYPR01EXECPGM=..........//НОВЫЙ ФАЙЛ DD DSN=&МОЙ ФАЙЛ,ЕДИНИЦА ИЗМЕРЕНИЯ=ДИСК,КОСМОС=(TRK,50,10),//DCB=(LRECL=100,BLKSIZE=1000),DISP=(НОВАЯ,CATLG,УДАЛИТЬ)....//MYPR02EXECPGM=..........//INPUT01 DD DSN=*.MYPR01.НОВЫЙ ФАЙЛ

Вот, MYPR02 использует файл, обозначенный как НОВЫЙ ФАЙЛ в ногу MYPR01 (DSN означает «имя набора данных» и указывает имя файла; DSN не может превышать 44 символа[26]).

В заданиях, которые содержат смесь JCL для конкретного задания и вызовов процедур, конкретный шаг для задания может ссылаться на файл, который был полностью указан в процедуре, например:

//МОЯ РАБОТАРАБОТА..........//ШАГ01EXECMYPROCИспользование процедуры//ШАГ02EXECPGM=.........Шаг, специфичный для этой работы//INPUT01 DD DSN=*.ШАГ01.MYPR01.НОВЫЙ ФАЙЛ

где DSN = *. STEP01.MYPR01.NEWFILE означает "использовать файл, обозначенный как НОВЫЙ ФАЙЛ в ногу MYPR01 процедуры, используемой пошагово ШАГ01 этого задания ». Использование имени шага, который вызвал процедуру, а не имени процедуры, позволяет программисту использовать одну и ту же процедуру несколько раз в одном и том же задании, не беспокоясь о том, какой экземпляр процедуры используется в ссылке.

Комментарии

Файлы JCL могут быть длинными и сложными, а язык непросто читать. OS JCL позволяет программистам включать два типа пояснительных комментариев:

  • В той же строке, что и оператор JCL. Их можно расширить, поместив символ продолжения (обычно "Икс") в столбце 72, за которым следует"// "в столбцах 1–3 следующей строки.
  • Строки, содержащие только комментарии, часто используются для объяснения основных моментов общей структуры JCL, а не местных деталей. Строки только для комментариев также используются для разделения длинных сложных файлов JCL на разделы.
//МОЯ РАБОТАРАБОТА..........// * Строки, содержащие только комментарии.// ******** Часто используется для разделения листинга JCL на разделы ********//ШАГ01EXECMYPROCКомментарий 2 в той же строке, что и заявление//ШАГ02EXECPGM=.........Комментарий 3 был расширен, и X//переливаетсяв другую строку.//INPUT01 DD DSN=ШАГ01.MYPR01.НОВЫЙ ФАЙЛ

Объединение входных файлов

OS JCL позволяет программистам объединять («цеплять») входные файлы так, чтобы они отображались в программе как один файл, например

//INPUT01 DD DSN=MYFILE01,DISP=SHR//DDDSN = JOESFILE, DISP = SHR//DDDSN = SUESFILE, DISP = SHR

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

В ранних версиях ОС (конечно, до OS / 360 R21.8) длина блока должна быть в порядке убывания, или пользователь должен проверить каждый экземпляр и добавить к названному оператору DD найденную максимальную длину блока, как, например, ,

//INPUT01 DD DSN=MYFILE01,DISP=SHR,BLKSIZE=800//DDDSN = JOESFILE, DISP = SHR (BLKSIZE предполагается равным или меньшим 800)//DDDSN = SUESFILE, DISP = SHR (BLKSIZE предполагается равным или меньшим 800)

В более поздних версиях ОС (обязательно после OS / MVS R3.7 с соответствующими «выбираемыми единицами») сама ОС во время выделения будет проверять каждый экземпляр в конкатенации и подставлять максимальную длину найденного блока.

Обычным откатом было просто определить максимально возможную длину блока на устройстве и указать это в названном операторе DD, как, например,

//INPUT01 DD DSN=MYFILE01,DISP=SHR,BLKSIZE=8000//DDDSN = JOESFILE, DISP = SHR (BLKSIZE предполагается равным или меньшим 8000)//DDDSN = SUESFILE, DISP = SHR (BLKSIZE предполагается равным или меньшим 8000)

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

Условная обработка

ОС ожидает, что программы установят код возврата, который указывает, насколько успешно программа думал, что это было. Наиболее распространенные условные значения:[27]:стр.87

  • 0 = Нормально - все ОК
  • 4 = Предупреждение - незначительные ошибки или проблемы
  • 8 = Ошибка - значительные ошибки или проблемы
  • 12 = Серьезная ошибка - серьезные ошибки или проблемы, результатам (например, созданным файлам или отчетам) нельзя доверять.
  • 16 = Терминальная ошибка - очень серьезные проблемы, не используйте результаты!

OS JCL ссылается на код возврата как COND («код условия») и может использовать его, чтобы решить, выполнять ли последующие шаги. Однако, в отличие от большинства современных языков программирования, условные шаги в OS JCL являются нет выполняется, если указанное условие истинно, что приводит к мнемонический, «Если это правда, пройдите [без запуска кода]». Чтобы еще больше усложнить ситуацию, условие можно указать только после шаг, к которому это относится. Например:

//МОЯ РАБОТАРАБОТА...........//ШАГ01EXECPGM=PROG01....//ШАГ02EXECPGM=PROG02,COND=(4,GT,ШАГ01)....//ШАГ03EXECPGM=PROG03,COND=(8,LE)....//ШАГ04EXECPGM=PROG04,COND=(ТОЛЬКО,ШАГ01)....//ШАГ05EXECPGM=PROG05,COND=(ДАЖЕ,ШАГ03)....

означает:

  1. Бегать ШАГ01и соберите его код возврата.
  2. Не беги ШАГ02 если число 4 больше, чем ШАГ01код возврата.
  3. Не беги ШАГ03 если число 8 меньше или равно любому предыдущему коду возврата.
  4. Бегать ШАГ04 только если ШАГ01 ненормально закончился.
  5. Бегать ШАГ05, даже если ШАГ03 ненормально закончился.

Это означает следующее псевдокод:

запустите STEP01если Код возврата STEP01 Больше или равно  4 тогда    запустите STEP02конец, еслиесли любой предыдущий код возврата меньше чем  8 тогда    запустите STEP03конец, еслиесли STEP01 завершился ненормально тогда    запустите STEP04конец, еслиесли ШАГ03 завершился ненормально тогда    запустите STEP05еще    запустите STEP05конец, если

Обратите внимание, что, прочитав шаги, содержащие COND высказывания в обратном порядке, их можно довольно легко понять. Это пример логическая транспозиция Однако позже IBM представила условие IF в JCL, что несколько упростило программирование для программистов, сохранив при этом COND параметр (чтобы избежать внесения изменений в существующие JCL, где COND parm используется).

В COND параметр также может быть указан на РАБОТА заявление. В таком случае система «выполняет одни и те же тесты кода возврата для каждого шага задания. Если проверка кода возврата оператора JOB удовлетворяется, задание завершается».[28]

Утилиты

Вакансии используют ряд Служебные программы IBM для помощи в обработке данных. Утилиты наиболее полезны при пакетной обработке. Утилиты можно сгруппировать в три набора:

  • Утилиты набора данных - создание, печать, копирование, перемещение и удаление наборов данных.
  • Системные утилиты - поддержание и управление каталогами и другой системной информацией.
  • Службы методов доступа - Процесс Метод доступа к виртуальному хранилищу (VSAM) и наборы данных без VSAM.

Сложность использования

ОС JCL, несомненно, сложна[29] и был описан как "враждебный пользователю".[30][31] Как спросили в одном учебном пособии по JCL: «Почему даже опытные программисты сомневаются, когда дело доходит до языка управления заданиями?»[32] В книге говорилось, что многие программисты либо копировали контрольные карты, не понимая, что они делают, либо «верили распространенным слухам о том, что JCL ужасен, и только« твердолобые »компьютерные типы когда-либо понимали это», и передали задачу выяснить причину. Заявления JCL кому-то другому.[32] Такое отношение можно было найти в учебниках по языкам программирования, которые предпочитали сосредотачиваться на самом языке, а не на том, как выполняются программы на нем. Как один Фортран IV учебник сказал, перечисляя возможные сообщения об ошибках от ВАТФОР компилятор: «Вы были настолько глупы, что пытались написать свои собственные управляющие карты системы DD? Немедленно прекратите и воздержитесь; бегите, не ходите, за помощью».[33]

Тем не менее, в некоторых книгах, подробно описывающих JCL, подчеркивалось, что как только он будет изучен до некоторой степени, можно получить свободу от настроек по умолчанию для всей установки и гораздо лучший контроль над тем, как система IBM обрабатывает вашу рабочую нагрузку.[32][29] В другой книге говорилось о сложности, но говорилось: «Мужайтесь. Возможности JCL, которые вы получите от [предыдущей главы], - это все, что когда-либо понадобится большинству программистов».[29]

Язык управления вводом вакансий

В системах мэйнфреймов IBM Язык управления вводом вакансий или JECL это набор командный язык операторы управления, которые предоставляют информацию для намотка подсистема - JES2 или JES3 на z / OS или ВСЕ / МОЩНОСТЬ за z / VSE. Операторы JECL могут «указывать, на каком сетевом компьютере запускать работа, когда запускать задание и куда отправлять результат ».[27]

JECL отличается от язык управления работой (JCL), который инструктирует Операционная система как для запуска работы.

Существуют разные версии JECL для трех сред.

OS / 360

В ранней версии языка управления вводом заданий для удаленного ввода заданий OS / 360 (номер программы 360S-RC-536) использовался идентификатор.. в столбцах 1–2 входной записи и состоял из одного управляющего оператора: JED (Определение записи о вакансии). «Команды рабочей станции», такие как ВХОД, ВЫЙТИ, и СТАТУС также началось с.. .[34]

pre-JES JECL

Хотя этот термин еще не был разработан, HASP имел функциональность, аналогичную тому, что стало JECL JES, в том числе /* синтаксис.

z / OS

Для JES2 операторы JECL начинаются с /*, для JES3 они начинаются с //*, кроме удаленного/*ПОДПИШИСЬ и/*ВЫЙТИ команды. Команды для двух систем совершенно разные.

JES2 JECL

Следующие операторы JES2 JECL используются в z / OS 1.2.0.[35]

Заявление JECLФункцияпример
/*$командаВводит команду оператора (консоли)/ * $ S ПРИНТЕР3[36]
/ * JOBPARMЗадает значения для параметров, связанных с заданием/ * ВРЕМЯ РАБОТЫ = 10
/*СООБЩЕНИЕОтправляет сообщение на консоль оператора/ * СООБЩЕНИЕ ПОЗВОНИТЬ ДЖО ДОМА, ЕСЛИ РАБОТА НАРУЧИТ
/ * NETACCTУказывает номер учетной записи для сетевого задания/ * NETACCT 12345
/*УВЕДОМЛЯТЬУказывает место назначения для уведомлений/ * УВЕДОМЛЕНИЕ СЭМ
/*ВЫХОДУказывает SYSOUT параметры набора данных/ * ВЫВОДНЫЕ ФОРМЫ = СЧЕТ
/ * ПРИОРИТЕТУстанавливает приоритет выбора работы/ * ПРИОРИТЕТ 15
/*МАРШРУТУказывает место назначения вывода или узел выполнения/ * МАРШРУТ PRT RMT5
/*НАСТРАИВАТЬЗапрашивает установку тома или другую офлайн-операцию/ * НАСТРОЙКА TAPE01, TAPE02
/*ВЫЙТИЗавершает удаленный сеанс/*ВЫЙТИ
/*ПОДПИШИСЬНачинает удаленный сеанс/ * УДАЛЕННЫЙ СИГНАЛ 5 пароль
/ * XEQЗадает узел выполнения/ * XEQ DENVER
/ * XMITУказывает на задание или набор данных, которые необходимо передать на другой сетевой узел/ * XMIT NYC

JES3 JECL

Следующие операторы JES3 JECL используются в z / OS 1.2.0[37]

Заявление JECLФункцияпример
//**командаВводит команду оператора JES3 (консоль)
// * НАБОР ДАННЫХОтмечает начало набора данных In-Stream
// * ENDDATASETОбозначает конец набора данных In-Stream
//*ЗАВЕРШИТЬ ПРОЦЕССОзначает конец серии//*ПРОЦЕСС заявления
//*ФОРМАТУказываетSYSOUT параметры набора данных
//*ГЛАВНЫЙЗадает значения для параметров, связанных с заданием
//*СЕТЬОпределяет отношения между заданиями с помощью JES3 зависимый контроль работы
// * NETACCTУказывает номер учетной записи для сетевого задания
// * ОПЕРАТОРОтправляет сообщение на консоль оператора
//*ПАУЗАОстанавливает читатель ввода
//*ПРОЦЕССВыявляет нестандартную работу
//*МАРШРУТЗадает узел выполнения для задания
/*ВЫЙТИЗавершает удаленный сеанс/*ВЫЙТИ
/*ПОДПИШИСЬНачинает удаленный сеанс

z / VSE

Для VSE операторы JECL начинаются с '* $$' (Обратите внимание не замужем Космос). Язык управления вводом заданий определяет начальную и конечную строки заданий JCL. Он советует ВСЕ /МОЩНОСТЬ как выполняется эта работа. Операторы JECL определяют имя задания (используется VSE / POWER), класс, в котором выполняется задание, и расположение задания (т. Е. D, L, K, ЧАС).

Заявление JECL[38]Функцияпример
* $$ CTLУстанавливает значение по умолчанию входной класс* $$ CTL CLASS = A
* $$ РАБОТАОпределяет атрибуты задания* $$ JOB JNM = PYRL, PRI = 9
* $$ EOJОзначает конец работы* $$ EOJ
* $$ RDRВставляет файл с дискеты 3540 во входной поток* $$ RDR SYS005, 'имя_файлы', 2
* $$ PRTЗадает характеристики буферных файлов печати
"LST" является синонимом "PRT"
* $$ PRT FNO = STD, COPY = 2
* $$ PUNЗадает характеристики буферных файлов перфорации* $$ PUN DISP = T, TADDR = 280
* $$ SLIВставляет данные («книгу») из исходной библиотеки операторов во входной поток.* $$ SLI A.JCL1
* $$ ДАННЫЕВставляет данные из кардридера в книгу, полученную из исходной библиотеки выписок.* $$ DATA INPUT1

Пример:

* $$ JOB JNM = NAME, DISP = K, CLASS = 2[здесь некоторые заявления JCL]* $$ EOJ

Другие системы

Другой мэйнфрейм партия в системах была некоторая форма языка управления заданиями, независимо от того, называлась она так или нет; их синтаксис полностью отличался от версий IBM, но обычно они предоставляли аналогичные возможности. Интерактивный системы включают "командные языки "—Командные файлы (такие как файлы PCDOS" .bat ") можно запускать неинтерактивно, но они обычно не обеспечивают такой надежной среды для выполнения автоматических заданий, как JCL. В некоторых компьютерных системах язык управления заданиями и интерактивная команда язык может быть другим. Например, TSO в системах z / OS использует КЛИСТ или Rexx в качестве командных языков вместе с JCL для пакетной работы. В других системах они могут быть такими же.

Смотрите также

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

  1. ^ «Каждое задание, отправленное на выполнение ... должно включать JCL-операторы» - ibm.com
  2. ^ и многое другое сложные детали, например, следует ли сохранить или удалить файл, максимальный объем дискового пространства, до которого он может увеличиться, имя ленты, которая будет предварительно смонтирована
  3. ^ Эшли и Фернандес, Язык управления заданиями, п. 1.
  4. ^ Эшли и Фернандес, Язык управления заданиями, п. 5.
  5. ^ Маккуиллен, Язык ассемблера System / 360–370С. 385–386.
  6. ^ а б Маккуиллен, Язык ассемблера System / 360–370С. 288–289, 400.
  7. ^ Маккуиллен, Язык ассемблера System / 360–370С. 22–24.
  8. ^ Маккуиллен, Язык ассемблера System / 360–370С. 380–382.
  9. ^ Штерн и Штерн, Структурированное программирование на COBOLС. 528–529.
  10. ^ Штерн и Штерн, Структурированное программирование на COBOL, с. 529, 531.
  11. ^ Штерн и Штерн, Структурированное программирование на COBOL, с. 529, 537.
  12. ^ по образцу https://www.ibm.com/support/knowledgecenter/SSLTBW_2.2.0/com.ibm.zos.v2r2.hasc300/has2z1_Submitting_to_the_internal_reader_from_jobs_or_tasks.htm, используя знания, полученные с тех пор, как компания IBM пришла к Зеленым картам, а Маникс работал в компании, владеющей сортировщиком карт IBM.
  13. ^ "Архивы IBM: Система / 360 Модель 30". www-03.ibm.com. 2003-01-23. Получено 2016-04-25.
  14. ^ IBM PC
  15. ^ IBM-совместимые компьютеры История ПК В архиве 14 августа 2007 г. Wayback Machine
  16. ^ Браун, Гэри ДеВард (2002). zOS JCL (пятое изд.). Джон Вили и сыновья. п. 248. ISBN  0471-236357.
  17. ^ Эшли и Фернандес, Язык управления заданиями, pp. 8, 23. Есть также два дополнительных оператора, PROC и PEND, которые используются для тестирования процедур JCL.
  18. ^ Предварительно сохраненный набор команд JCL «EXEC PGM =» и «DD», которые можно параметризовать.
  19. ^ Эшли и Фернандес, Язык управления заданиямиС. 12–16.
  20. ^ Эшли и Фернандес, Язык управления заданиями, стр. 13–15.
  21. ^ Корпорация IBM (август 1978 г.). Руководство по службам управления данными OS / VS MVS (PDF). Получено 17 октября, 2014.
  22. ^ Корпорация IBM (июнь 1971 г.). Операционная система IBM System / 360: Справочник по языку управления заданиями (PDF). Получено 25 июня, 2019.
  23. ^ Маккуиллен, Язык ассемблера System / 360–370С. 297, 406–407.
  24. ^ значение по умолчанию для оператора EXEC - PROC =
  25. ^ Эшли и Фернандес, Язык управления заданиямиС. 129–131.
  26. ^ «Имена наборов данных». Имена наборов данных не должны превышать 44 символа, включая все сегменты и точки имени.
  27. ^ а б Браун, Гэри ДеВард (2002). zOS JCL. Джон Вили и сыновья. ISBN  9780471426738. Получено 2014-05-05.
  28. ^ Корпорация IBM. «Взаимосвязь параметров COND в операторах JOB и EXEC». Центр знаний IBM. Получено 21 февраля, 2018.
  29. ^ а б c Маккуиллен, Язык ассемблера System / 360–370С. 406–407.
  30. ^ Чарли, Альфред (1993). NetView: продукт IBM для управления сетью. Нью-Йорк: Ван Ностранд Рейнхольд. п.93. ISBN  0-442-01407-4.
  31. ^ Мэтью Блоуд (6 апреля 2020 г.). «Новые безработные жители Нью-Йорка разочарованы технологиями 1970-х годов (nytimes.com)». Получено 7 мая, 2020. В частности, JCL заведомо враждебно настроен к пользователям и был назван Фредом Бруксом «худшим языком программирования, когда-либо созданным» ... (http://dtsc.dfw.ibm.com/MVSDS/'HTTPD2.APPS.ZOSCLASS.PDF (ZCLA ...).
  32. ^ а б c Эшли и Фернандес, Язык управления заданиями, стр. vii – viii, задняя обложка.
  33. ^ Блатт, Джон М. (1971). Введение в программирование на FORTRAN IV: использование компиляторов WATFOR / WATFIV. Пасифик Палисейдс, Калифорния: издательство Goodyear Publishing Company. п. 276. ISBN  0-87620-440-X.
  34. ^ Корпорация IBM (1968 г.). Ввод удаленного задания операционной системы IBM System / 360 (PDF). Получено 2014-05-05.
  35. ^ Корпорация IBM. «Контрольные утверждения подсистемы ввода заданий 2 (JES2)». z / OS V1R2.0 MVS JCL. Получено 25 февраля, 2013.
  36. ^ другие примеры можно посмотреть на Houston Automatic Spooling Priority # Команды оператора
  37. ^ Корпорация IBM. «Контрольные утверждения подсистемы ввода заданий 3 (JES3)». z / OS V1R2.0 MVS JCL. Получено 25 февраля, 2013.
  38. ^ Корпорация IBM (1974 г.). Установка и работа DOS / VS POWER / VS (PDF).

Источники