stringtranslate.com

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

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

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

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

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

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

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

Мотивация

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

Функции, общие для DOS и OS JCL.

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

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

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

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

Основной синтаксис

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

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

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

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

Многие операторы 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 //* ^ as задано 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 на самом деле является языком программирования.

Большая часть сложности ОС 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]

Синтаксис ОС 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    

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

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]

Поле идентификатора Поле имени Поле операции Поле параметра Поле комментариев ^ ^ ^ ^ нет места, места, места, места

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

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

// NEWFILE DD DSN = MYFILE01 , UNIT = DISK , SPACE = ( TRK , 80 , 10 ), // DCB = ( LRECL = 100 , BLKSIZE = 1000 ), // DISP = ( NEW , CATLG , DELETE )  

Все основные параметры операторов 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 . ФАЙЛЫ . ДЕНЬ . 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 = ......... . // ВХОД01 ДД ДСН = * . МГПР01 . НОВЫЙ ФАЙЛ      

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

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

// MYJOB JOB .......... // STEP01 EXEC MYPROC Использование процедуры // STEP02 EXEC PGM = ......... Шаг, специфичный для этого задания // INPUT01 DD DSN = * . ШАГ01 . МГПР01 . НОВЫЙ ФАЙЛ        

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

Комментарии

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

// MYJOB JOB .......... //* Строки, содержащие только комментарии. //******* Часто используется для разделения списка JCL на разделы ******** // Комментарий STEP01 EXEC MYPROC 2 в той же строке, что и оператор // STEP02 EXEC PGM = ...... ... Комментарий 3 расширен, и X // переполняется в другую строку. // INPUT01 DD DSN = STEP01 . МГПР01 . НОВЫЙ ФАЙЛ          

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

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

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

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

В ранних версиях ОС (конечно, до 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(«кодом условия») и может использовать его, чтобы решить, выполнять ли последующие шаги. Однако, в отличие от большинства современных языков программирования, условные шаги в ОС JCL не выполняются, если указанное условие истинно, что приводит к появлению мнемоники : «Если это правда, пройдите дальше [без запуска кода]». Еще больше усложняет ситуацию то, что условие можно указать только после шага, к которому оно относится. Например:

// МОЕ ЗАДАНИЕ 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 , тогда запустите ШАГ 02end if, если любой предыдущий код возврата меньше 8 , то запустите ШАГ03end if если STEP01 завершился ненормально тогда запустите ШАГ04end if если STEP03 завершился ненормально тогда запустите ШАГ05еще запустите ШАГ05конец, если

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

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

Утилиты

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

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

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

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

Язык контроля ввода вакансий

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

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

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

ОС/360

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

до JES JECL

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

з/ОС

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

JES2 JECL

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

JES3 JECL

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

з/ВСЕ

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

Пример:

* $$ JOB JNM=NAME,DISP=K,CLASS=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 , стр. 288–289, 400.
  7. Льюис, Сесилия (8 августа 2011 г.). «Что мы сделали для вас в последнее время с PDSE» (PDF) . ДОЛЯ в Орландо . Проверено 3 марта 2023 г.
  8. ^ Маккуиллен, Язык ассемблера System/360–370 , стр. 22–24.
  9. ^ МакКвиллен, Язык ассемблера System/360–370 , стр. 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 с использованием знаний, относящихся к тому времени, когда от IBM появились грин-карты, и работал Manix. для компании, владеющей сортировщиком карточек IBM
  14. ^ Брукс, Фредерик П. (2010). Дизайн дизайна . Аддисон-Уэсли . стр. 167–173. ISBN 978-0-201-36298-5.
  15. ^ «Архивы IBM: System/360 Model 30» . www-03.ibm.com . 23 января 2003 г. Проверено 25 апреля 2016 г.
  16. ^ "IBM ПК". Архивировано из оригинала 5 июля 2006 г. Проверено 21 октября 2007 г.
  17. ^ IBM-совместимые компьютеры. История компьютеров. Архивировано 14 августа 2007 г. в Wayback Machine .
  18. ^ Браун, Гэри ДеВард (2002). zOS JCL (пятое изд.). Джон Уайли и сыновья. п. 248. ИСБН 0471-236357.
  19. ^ Эшли и Фернандес, Язык управления заданиями , стр. 8, 23. Есть также два дополнительных оператора, PROC и PEND, используемые для тестирования процедур JCL.
  20. ^ Предварительно сохраненный набор команд JCL "EXEC PGM=" и "DD", которые можно параметризовать.
  21. ^ Эшли и Фернандес, Язык управления заданиями , стр. 12–16.
  22. ^ Эшли и Фернандес, Язык управления заданиями , стр. 13–15.
  23. ^ Корпорация IBM (август 1978 г.). Руководство по службам управления данными OS/VS MVS (PDF) . Проверено 17 октября 2014 г.
  24. ^ Корпорация IBM (июнь 1971 г.). Операционная система IBM System/360: Справочник по языку управления заданиями (PDF) . Проверено 25 июня 2019 г.
  25. ^ Маккуиллен, Язык ассемблера System/360–370 , стр. 297, 406–407.
  26. ^ значением по умолчанию для оператора EXEC является PROC=
  27. ^ Эшли и Фернандес, Язык управления заданиями , стр. 129–131.
  28. ^ «Имена наборов данных» . ИБМ . 27 марта 2014 г. Имена наборов данных не должны превышать 44 символов, включая все сегменты и точки имени.
  29. ^ Аб Браун, Гэри ДеВард (2002). ЗОС JCL. Джон Уайли и сыновья. ISBN 9780471426738. Проверено 5 мая 2014 г.
  30. ^ Корпорация IBM. «Взаимосвязь параметров COND в операторах JOB и EXEC». Центр знаний IBM . Проверено 21 февраля 2018 г.
  31. ^ abc McQuillen, Язык ассемблера System/360–370 , стр. 406–407.
  32. ^ Чарли, Альфред (1993). NetView: продукт IBM для управления сетью . Нью-Йорк: Ван Ностранд Рейнхольд. п. 93. ИСБН 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 . Пасифик Палисейдс, Калифорния: Издательство Goodyear. п. 276. ИСБН 0-87620-440-Х.
  36. ^ Корпорация IBM (1968). Запись удаленного задания операционной системы IBM System/360 (PDF) . Проверено 5 мая 2014 г.
  37. ^ Корпорация IBM. «Управляющие инструкции подсистемы ввода заданий 2 (JES2)». z/OS V1R2.0 МВС JCL . Архивировано из оригинала 18 октября 2015 года . Проверено 25 февраля 2013 г.
  38. ^ другие примеры можно просмотреть в разделе Приоритет автоматической буферизации Хьюстона # Команды оператора.
  39. ^ Корпорация IBM. «Управляющие инструкции подсистемы ввода заданий 3 (JES3)». z/OS V1R2.0 МВС JCL . Архивировано из оригинала 18 октября 2015 года . Проверено 25 февраля 2013 г.
  40. ^ Корпорация IBM (1974). Установка и работа DOS/VS POWER/VS (PDF) .

Источники