stringtranslate.com

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

Job Control Language ( JCL ) — это язык сценариев, используемый в операционных системах мэйнфреймов IBM для указания системе, как запустить пакетное задание или запустить подсистему. [1] Цель JCL — указать, какие программы запускать, какие файлы или устройства [2] использовать для ввода или вывода, а иногда также указать, при каких условиях следует пропустить шаг. Параметры в JCL также могут предоставлять учетную информацию для отслеживания ресурсов, используемых заданием, а также на какой машине задание должно выполняться.

Существует два различных языка управления заданиями IBM:

Они разделяют некоторые основные правила синтаксиса и несколько основных концепций, но в остальном они очень разные. [3]

Операционная система VM не имеет JCL как такового; компоненты CP и CMS имеют командные языки .

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

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

Мотивация

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

Общие черты DOS и OS JCL

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

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

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

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

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

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

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

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

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

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

Структура наиболее распространенных типов карточек следующая: [11]

Ввод в потоке

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

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

Операнд с именем DLM позволял указывать разделитель (по умолчанию "/*"). Указание альтернативного разделителя позволяет читать JCL как данные, например, для копирования процедур в член библиотеки или для отправки задания внутреннему считывателю .
  • Пример [13], который отправляет задание внутреннему считывателю ( INTRDR ), а затем удаляет два файла:
// SUBM EXEC PGM = IEBGENER // SYSPRINT DD SYSOUT = Z // SYSUT2  DD SYSOUT = ( A , INTRDR ) // SYSIN  DD DUMMY // SYSUT1  DD DATA , DLM = ZZ // RUNLATR JOB ACCT , MANIX , CLASS = A . TYPRUN = HOLD //* ^ ЗАДАНИЕ для последующего запуска // CPUHOG EXEC PGM = PICALC1K // OUTPUT  DD DSN = PICALC .1000 DGTS , SPACE = ( TRK , 1 ), DISP = (, KEEP ) ZZ //* ^ как указано в DLM=ZZ // DROPOLDR EXEC PGM = IEFBR14 // DELETE4  DD DSN = PICALC .4 DGTS , DISP = ( OLD , DELETE ) // DELETE5  DD DSN = PICALC .5 DGTS , DISP = ( OLD , DELETE )        
  1. Программа PICALC1K будет ожидать (TYPRUN=HOLD) ручного освобождения
  2. Программа под названием IEFBR14 будет запущена СЕЙЧАС, и по ее завершении два существующих файла, PICALC.4DGTS и PICALC.5DGTS, будут удалены.

Сложность

Фред Брукс , который руководил проектом OS/360, в котором был создан JCL, назвал его «худшим языком программирования, когда-либо созданным кем-либо и где-либо» в своей книге «Проектирование дизайна» , где он использовал его в качестве примера в главе «Как ошибаются опытные дизайнеры». [14] Он объяснил это неспособностью дизайнеров понять, что JCL на самом деле является языком программирования.

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

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

cp старыйФайл новыйФайл

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

// IS198CPY JOB ( IS198T30500 ), 'COPY JOB' , CLASS = L , MSGCLASS = X // COPY01 EXEC PGM = IEBGENER // SYSPRINT DD SYSOUT = * // SYSUT1  DD DSN = OLDFILE , DISP = SHR // SYSUT2  DD DSN = NEWFILE , // DISP = ( NEW , CATLG , DELETE ), // SPACE = ( CYL ,( 40 , 5 ), RLSE ), // DCB = ( LRECL = 115 , BLKSIZE = 1150 ) // SYSIN  DD DUMMY       

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

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

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

ДОС JCL

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

// TLBL TAPEFIL,'COPYTAPE.JOB',,,,2 // ASSGN SYS005,200 // DLBL DISKFIL,'COPYTAPE.JOB',0,SD // EXTENT SYS005,VOL01,1,0,800,1600    

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

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

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

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

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

Ручное распределение файлов

DOS/360 изначально требовала от программиста указания местоположения и размера всех файлов на DASD . EXTENTКарта определяет том, на котором находится экстент, начальную абсолютную дорожку и количество дорожек. Для z/VSE файл может иметь до 256 экстентов на разных томах.

ОС JCL

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

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

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

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

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

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

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

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

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

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

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

Доступ к данным (заявление DD)

Оператор DDиспользуется для ссылки на данные. Этот оператор связывает внутреннее описание набора данных программы с данными на внешних устройствах: дисках, лентах, картах, принтерах и т. д. DD может предоставлять такую ​​информацию, как тип устройства (например, '181','2400-5','TAPE'), серийный номер тома для лент или дисков и описание файла данных, называемое подпараметром DCBпосле блока управления данными (DCB) в программе, используемой для идентификации файла.

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

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

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

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

С самого начала JCL для семейства операционных систем OS предлагал высокую степень независимости от устройств. Даже для новых файлов, которые должны были сохраняться после окончания работы, можно было указать тип устройства в общих терминах, например, , UNIT=DISK, UNIT=TAPEили UNIT=SYSSQ(лента или диск). Конечно, если это имело значение, можно было указать номер модели или даже конкретный адрес устройства. [25]

Процедуры

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

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

ПРОЦЕСС И ОЖИДАНИЕ

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

Например:

// SUMPRINT PROC // PRINT EXEC PGM=IEBGENER // SYSUT1  DD DSN = CEO . FILES . DAYEND . RPT24A , DISP = SHR // SYSUT2  DD SYSOUT = A // SYSIN  DD DUMMY // PEND // EXEC SUMPRINT    

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

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

// MYPROC PROC FNAME = MYFILE01 , SPTYPE = TRK , SPINIT = 50 , SPEXT = 10 , LR = 100 , BLK = 1000 ..... // NEWFILE DD DSN =& FNAME , UNIT = DISK , SPACE = ( & SPTYPE , & SPINIT , & SPEXT ), // DCB = ( LRECL =& LR , BLKSIZE =& BLK ), DISP = ( NEW , CATLG , DELETE ) .... 

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

// JOB01 JOB .......... // STEP01 EXEC MYPROC FNAME=JOESFILE,SPTYPE=CYL,SPINIT=10,SPEXT=2,LR=100,BLK=2000 или // JOB02 JOB .......... // STEP01 EXEC MYPROC FNAME=SUESFILE,SPTYPE=TRK,SPINIT=500,SPEXT=100,LR=100,BLK=5000          

Рефералы

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

// MYPROC ................ // MYPR01 EXEC PGM = .......... // NEWFILE DD DSN =& MYFILE , UNIT = DISK , SPACE = ( TRK , 50 , 10 ), // DCB = ( LRECL = 100 , BLKSIZE = 1000 ), DISP = ( NEW , CATLG , DELETE ) .... // MYPR02 EXEC PGM = .......... // INPUT01 DD DSN = * . MYPR01 . NEWFILE      

Здесь MYPR02используется файл, указанный NEWFILEв шаге MYPR01( DSNозначает «имя набора данных» и указывает имя файла; DSN не может превышать 44 символа [28] ).

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

// MYJOB JOB .......... // STEP01 EXEC MYPROC Использование процедуры // STEP02 EXEC PGM = ......... Шаг, специфичный для этого задания // INPUT01 DD DSN = * . STEP01 . MYPR01 . NEWFILE        

где DSN=*.STEP01.MYPR01.NEWFILEозначает «использовать файл, указанный как NEWFILEв шаге MYPR01процедуры, используемой шагом STEP01этого задания». Использование имени шага, вызвавшего процедуру, а не имени процедуры позволяет программисту использовать одну и ту же процедуру несколько раз в одном и том же задании, не путаясь в том, какой экземпляр процедуры используется в реферале.

Комментарии

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

// MYJOB JOB .......... //* Строки, содержащие только комментарии. //******** Часто используется для разделения листинга JCL на разделы ******** // STEP01 EXEC MYPROC Комментарий 2 на той же строке, что и оператор // STEP02 EXEC PGM = ......... Комментарий 3 был расширен и X // переполняется на другую строку. // INPUT01 DD DSN = STEP01 . MYPR01 . NEWFILE          

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

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

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

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

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

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

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

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

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

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

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

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

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

// MYJOB JOB ........... // STEP01 EXEC PGM = PROG01 .... // STEP02 EXEC PGM = PROG02 , COND = ( 4 , GT , STEP01 ) .... // STEP03 EXEC PGM = PROG03 , COND = ( 8 , LE ) .... // STEP04 EXEC PGM = PROG04 , COND = ( ONLY , STEP01 ) .... // STEP05 EXEC PGM = PROG05 , COND = ( EVEN , STEP03 ) ....            

означает:

  1. Запустите STEP01и получите код возврата.
  2. Не запускать, STEP02если число 4 больше STEP01кода возврата.
  3. Не запускать, STEP03если число 8 меньше или равно любому предыдущему коду возврата.
  4. Запускать STEP04только в случае STEP01аварийного завершения.
  5. Запустить STEP05, даже если STEP03он завершился ненормально.

Это преобразуется в следующий псевдокод :

запустить STEP01 , если код возврата STEP01 больше или равен 4 , то запустить ШАГ02конец, если любой предыдущий код возврата меньше 8 , то запустить ШАГ03конец, если если STEP01 ненормально завершился , то запустить ШАГ04конец, если если STEP03 ненормально завершился , то запустить ШАГ05еще запустить ШАГ05конец, если

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

Параметр CONDтакже может быть указан в JOBоператоре. Если это так, система «выполняет те же самые тесты кода возврата для каждого шага в задании. Если тест кода возврата оператора JOB удовлетворен, задание завершается». [30]

Коммунальные услуги

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

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

OS JCL, несомненно, сложен [31] и описывается как «враждебный пользователю». [32] [33] Как спрашивалось в одной учебной книге по JCL: «Почему даже опытные программисты колеблются, когда дело доходит до языка управления заданиями?» [34] В книге утверждалось, что многие программисты либо копировали контрольные карты, не понимая, что они делают, либо «верили распространенным слухам о том, что JCL ужасен, и только «упорные» компьютерщики когда-либо понимали его», и передавали задачу выяснения операторов JCL кому-то другому. [34] Такое отношение можно найти в учебниках по языкам программирования, которые предпочитали сосредотачиваться на самом языке, а не на том, как программы на нем запускаются. Как говорилось в одном учебнике по Fortran IV при перечислении возможных сообщений об ошибках от компилятора WATFOR : «Вы были настолько глупы, что пытались написать свои собственные системные контрольные карты 'DD'? Прекратите и воздержитесь немедленно; бегите, а не идите за помощью». [35]

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

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

В системах мэйнфреймов IBM язык управления записью заданий (Job Entry Control Language) или JECL — это набор операторов управления языком команд , которые предоставляют информацию для подсистемы спулингаJES2 или JES3 на z/OS или VSE/POWER для z/VSE . Операторы JECL могут «указывать, на каком сетевом компьютере запускать задание , когда запускать задание и куда отправлять результирующий вывод». [29]

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

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

ОС/360

Ранняя версия языка управления записью заданий для OS/360 Remote Job Entry (номер программы 360S-RC-536) использовала идентификатор   ..  в столбцах 1–2 входной записи и состояла из одного управляющего оператора: JED(Определение записи задания). «Команды рабочей станции», такие как LOGON, LOGOFF, и STATUSтакже начинались с   .. . [36]

пред-JES JECL

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

z/ОС

Для JES2 операторы JECL начинаются с /*, для JES3 они начинаются с //*, за исключением команд remote   /*SIGNON  и   /*SIGNOFF  . Команды для двух систем совершенно разные.

JES2 JECL

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

JES3 JECL

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

z/ВСЕ

Для VSE операторы JECL начинаются с ' * $$' (обратите внимание на один пробел). Язык управления вводом заданий определяет начальную и конечную строки заданий JCL. Он сообщает VSE / POWER , как обрабатывать это задание. Операторы JECL определяют имя задания (используемое VSE/POWER), класс, в котором обрабатывается задание, и расположение задания (т. е. D, L, K, H).

Пример:

* $$ РАБОТА JNM=ИМЯ,DISP=K,КЛАСС=2[здесь есть некоторые заявления JCL]* $$ ЕО

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

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

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

Ссылки

  1. ^ "Каждое задание, отправленное на выполнение... должно включать операторы JCL" -- ibm.com
  2. ^ и многие другие сложные детали, например, следует ли сохранить или удалить файл, максимальный размер дискового пространства, на которое он может увеличиться, имя ленты, которая должна быть предварительно смонтирована.
  3. ^ Эшли и Фернандес, Язык управления заданиями , стр. 1.
  4. ^ Эшли и Фернандес, Язык управления работой , стр. 5.
  5. ^ МакКвиллен, Язык ассемблера System/360–370 , стр. 385–386.
  6. ^ ab McQuillen, System/360–370 Assembler Language , стр. 288–289, 400.
  7. ^ Льюис, Сесилия (8 августа 2011 г.). «Что мы сделали для вас в последнее время с PDSE» (PDF) . ПОДЕЛИТЬСЯ в Орландо . Получено 2023-03-03 .
  8. ^ МакКвиллен, Язык ассемблера System/360–370 , стр. 22–24.
  9. ^ МакКвиллен, System/360–370 Assembler Language , стр. 380–382.
  10. ^ Стерн и Стерн, Структурированное программирование на COBOL , стр. 528–529.
  11. ^ Стерн и Стерн, Структурированное программирование на COBOL , стр. 529, 531.
  12. ^ Стерн и Стерн, Структурированное программирование на COBOL , стр. 529, 537.
  13. ^ смоделировано на основе 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, с использованием знаний, которые относятся ко времени появления Green Cards от IBM, а Manix работал в компании, владеющей сортировщиком карт IBM
  14. ^ Брукс, Фредерик П. (2010). Дизайн дизайна . Эддисон-Уэсли . С. 167–173. ISBN 978-0-201-36298-5.
  15. ^ "Архивы IBM: System/360 Model 30". www-03.ibm.com . 2003-01-23. Архивировано из оригинала 17 декабря 2004 года . Получено 2016-04-25 .
  16. ^ "IBM PC". Архивировано из оригинала 2006-07-05 . Получено 2007-10-21 .
  17. ^ IBM-совместимые компьютеры История ПК Архивировано 14 августа 2007 г. на Wayback Machine
  18. ^ Браун, Гэри ДеВард (2002). zOS JCL (пятое изд.). John Wiley & Sons. стр. 248. ISBN 0471-236357.
  19. ^ Эшли и Фернандес, Язык управления заданиями , стр. 8, 23. Также есть два дополнительных оператора, PROC и PEND, используемые для тестирования процедур JCL.
  20. ^ Предварительно сохраненный набор команд JCL "EXEC PGM=" и "DD", которые могут быть параметризованы
  21. Эшли и Фернандес, Язык управления заданиями , стр. 12–16.
  22. Эшли и Фернандес, Язык управления заданиями , стр. 13–15.
  23. ^ IBM Corporation (август 1978 г.). Руководство по службам управления данными OS/VS MVS (PDF) . Получено 17 октября 2014 г.
  24. ^ IBM Corporation (июнь 1971 г.). IBM System/360 Operating System: Job Control Language Reference (PDF) . Получено 25 июня 2019 г. .
  25. ^ МакКвиллен, Язык ассемблера System/360–370 , стр. 297, 406–407.
  26. ^ значение по умолчанию для оператора EXEC — PROC=
  27. ^ Эшли и Фернандес, Язык управления заданиями , стр. 129–131.
  28. ^ "Имена наборов данных". IBM . 27 марта 2014 г. Имена наборов данных не должны превышать 44 символа, включая все сегменты имени и точки.
  29. ^ ab Brown, Gary DeWard (2002). zOS JCL. John Wiley & Sons. ISBN 9780471426738. Получено 2014-05-05 .
  30. ^ IBM Corporation. "Связь параметров COND с операторами JOB и EXEC". IBM Knowledge Center . Получено 21 февраля 2018 г.
  31. ^ abc McQuillen, System/360–370 Assembler Language , стр. 406–407.
  32. ^ Чарли, Альфред (1993). NetView: продукт IBM для управления сетями . Нью-Йорк: Van Nostrand Reinhold. стр. 93. ISBN 0-442-01407-4.
  33. ^ Мэтью В. Блод (6 апреля 2020 г.). «Новые безработные жители Нью-Йорка разочарованы технологиями 1970-х годов (nytimes.com)» . Получено 7 мая 2020 г. JCL , в частности, печально известен своей враждебностью к пользователям и был назван Фредом Бруксом «худшим языком программирования из когда-либо созданных» ... (http://dtsc.dfw.ibm.com/MVSDS/'HTTPD2.APPS.ZOSCLASS.PDF(ZCLA...)[ссылка в оригинале].
  34. ^ abc Эшли и Фернандес, Язык управления заданиями , стр. vii–viii, задняя обложка.
  35. ^ Блатт, Джон М. (1971). Введение в программирование на FORTRAN IV: использование компиляторов WATFOR/WATFIV . Pacific Palisades, Калифорния: Goodyear Publishing Company. стр. 276. ISBN 0-87620-440-X.
  36. ^ IBM Corporation (1968). Удалённый ввод задания операционной системы IBM System/360 (PDF) . Получено 2014-05-05 .
  37. ^ IBM Corporation. "Job Entry Subsystem 2 (JES2) Control Statements". z/OS V1R2.0 MVS JCL . Архивировано из оригинала 18 октября 2015 г. Получено 25 февраля 2013 г.
  38. ^ Другие примеры можно посмотреть на странице Houston Automatic Spooling Priority#Operator Commands
  39. ^ IBM Corporation. "Job Entry Subsystem 3 (JES3) Control Statements". z/OS V1R2.0 MVS JCL . Архивировано из оригинала 18 октября 2015 г. Получено 25 февраля 2013 г.
  40. ^ Корпорация IBM (1974). Установка и эксплуатация DOS/VS POWER/VS (PDF) .

Источники