Job Control Language (JCL) este un nume pentru limbile de scripting utilizate în sistemele de operare mainframe IBM pentru a instrui sistemul cu privire la modul de rulare a unei sarcini batch sau de a porni un subsistem."Every job submitted for execution ... must include JCL statements" -- ibm.com

Mai precis, scopul JCL este să demonstreze programele care se execută, folosind fișierele sau dispozitiveleand many more complex details, such as whether the file is to be retained or deleted, the maximum of disk space to which it can grow, the name of a tape to be pre-mounted pentru intrare sau ieșire și uneori pentru a indica în ce condiții să săriți un pas.

Există două limbi distincte IBM Job Control: unul pentru linia sistemului de operare care începe cu DOS/360 și al cărui ultim membru este z/VSE; cealaltă pentru linia de origine de la OS/360 la z/OS, acesta din urmă cuprinzând extensiile JES, JECL (Job Entry Control Language). Aceștia împărtășesc câteva reguli de sintaxă de bază și câteva concepte de bază, dar sunt foarte diferite.

DOS JCL Poziționarea parametrilor //TLBL TAPEFIL,'COPYTAPE.JOB',,,,2 //ASSGN SYS005,200 //DLBL DISKFIL,'COPYTAPE.JOB',0,SD //EXTENT SYS005,VOL01,1,0,800,1600

Parametrii DOS JCL sunt poziționali, ceea ce le face mai greu să citească și să scrie, dar mai ușor pentru analiza sistemului. Programatorul trebuie să-și amintească ce element se află în poziția în fiecare tip de instrucțiune. În cazul în care unii parametri opțional sunt omiși, dar mai târziu sunt incluși, parametrii omiși trebuie să fie reprezentați prin virgule fără spații, ca în instrucțiunea TLBL de mai sus.

DOS JCL într-o oarecare măsură diminuează dificultățile parametrilor poziționali prin utilizarea mai multor instrucțiuni cu parametri mai puțini decât OS JCL. În exemplu, instrucțiunile ASSGN, DLBL și EXTENT fac aceeași lucrare (specificând unde trebuie stocat un nou fișier disc) ca o singură instrucțiune DD în OS JCL.

Disponibilitatea dispozitivului În versiunea originală DOS/360 și în majoritatea versiunilor DOS/VS, a fost necesar să se precizeze numărul de model al dispozitivului care urma să fie utilizat pentru fiecare fișier disc sau bandă - chiar și pentru fișierele existente și pentru fișierele temporare care urmau să fie șterse la sfârșitul locului de muncă. Acest lucru însemna că, dacă un client a fost modernizat la un echipament mai modern, multe fișiere JCL trebuiau să fie schimbate.

Mai târziu, membrii familiei DOS / 360 au redus numărul de situații în care erau necesare numerele de model pentru dispozitive.

Alocarea filelor manuale DOS/360 a cerut inițial programatorului să specifice locația și dimensiunea tuturor fișierelor de pe DASD. Cardul EXTENT specifică volumul pe care se află amploarea, piesa absolută de pornire și numărul de piste. pentru z/VSE un fișier poate avea până la 256 extensii pe volume diferite.

OS JCL OS JCL constă din trei tipuri de declarații de bază:and 2 additional statements, PROC & PEND, to test Procedures Declarația JOB, care identifică începutul lucrării și informații despre întreaga activitate, cum ar fi facturarea, prioritatea de rulare și limitele de timp și spațiu. Instrucțiunea EXEC, care identifică programul sau proceduraA pre-stored set of "EXEC PGM=" and "DD" JCL commands which could be parameterized care trebuie executate în acest pas al lucrării, și informații despre pas, inclusiv CONDitions pentru a rula sau a sări peste un pas. DD (Definirea datelor), care identifică un fișier de date care va fi utilizat într-un pas și informații detaliate despre acel fișier. Declarațiile DD pot fi în orice ordine în cadrul etapei. Chiar de la început, JCL pentru familia OS (până la și inclusiv z/OS) a fost mai flexibilă și mai ușor de utilizat.

Următoarele exemple utilizează stilul vechi de sintaxă care a fost furnizat încă de la lansarea System/360 în 1964. Vechea sintaxă este încă destul de obișnuită în lucrările care se desfășoară de peste 20 de ani, cu doar mici modificări.

Reguli pentru codificarea declarațiilor JCL Fiecare declarație JCL este împărțită în 5 câmpuri.

Identifier-Field Name-Field Operation-Field Parameter-Field Comments-Field ^ ^ ^ ^ no space space space space

Identifier-Field trebuie să fie concatenat cu câmpul Name-Field, adică nu trebuie să existe spații între ele. Identifier-Field (//): Câmpul de identificare indică sistemului că o instrucțiune este o instrucțiune JCL, nu o dată. Câmpul de identificare constă din următoarele: Coloanele 1 și 2 ale tuturor instrucțiunilor JCL, cu excepția instrucțiunii de delimiter, conțin // Coloanele 1 și 2 ale instrucțiunii delimitatorului conțin /* Coloanele 1, 2 și 3 ale unei declarații de comentariu JCL conțin //* Name-Field: Câmpul nume identifică o anumită declarație, astfel încât alte declarații și sisteme să se poată referi la ea. Pentru declarațiile JCL, acesta trebuie codat după cum urmează: Numele trebuie să înceapă în coloana 3. Numele este de la 1 la 8 alfanumeric sau național ($, #, @) caractere. Primul caracter trebuie să fie alfabetic. Numele trebuie să fie urmat de cel puțin un gol. Operation-Field: Câmpul de operare specifică tipul de instrucțiune sau, pentru comandă. Operation-Field ar trebui să fie codificate după cum urmează: Câmpul de operație constă din caracterele din caseta de sintaxă pentru instrucțiune. Operațiunea urmează câmpul cu numele. Operațiunea trebuie să fie precedată și să fie urmată de cel puțin un semifabricat. Operațiunea va fi una dintre JOB, EXEC sau DD. Parameter-Field: Câmpul de parametri, denumit uneori câmpul operand, conține parametri separați prin virgule. Câmpul de parametri trebuie codat după cum urmează: Câmpul parametrilor urmează câmpul de operare. Câmpul de parametri trebuie să fie precedat de cel puțin un gol. Câmpul parametru conține parametri care sunt cuvintele cheie utilizate în instrucțiune pentru a furniza informații cum ar fi numele programului sau setul de date. Comments-Field: Aceasta conține comentarii. Comments-Field ar trebui să fie codificate după cum urmează: Câmpul de comentarii urmează câmpul parametru. Câmpul de comentarii trebuie să fie precedat de cel puțin un gol.

Parametrii cuvintelor cheie //NEWFILE DD DSN=MYFILE01,UNIT=DISK,SPACE=(TRK,80,10), // DCB=(LRECL=100,BLKSIZE=1000), // DISP=(NEW,CATLG,DELETE) Toți parametrii majori ai declarațiilor OS JCL sunt identificați prin cuvinte cheie și pot fi prezenți în orice ordine. Câteva dintre acestea conțin doi sau mai mulți sub-parametri, cum ar fi SPACE (cât de mult spațiu de disc să aloce unui fișier nou) și DCB (specificație detaliată a aspectului fișierului) în exemplul de mai sus. Sub-parametrii sunt uneori poziționali, ca în SPACE, dar cei mai complexi parametri, cum ar fi DCB, au sub-parametri de cuvinte cheie.

Parametrul de poziție trebuie să fie precedat de parametrii de cuvinte cheie. Parametrii cuvintelor cheie atribuie întotdeauna valori unui cuvânt cheie utilizând semnul egal (=).

Accesul la date Declarația DD este utilizată pentru a trimite date. Această declarație face legătura între descrierea internă a unui set de date a unui program și datele pe dispozitivele externe: discuri, casete, carduri, imprimante etc. DD poate furniza informații cum ar fi un tip de dispozitiv (de ex. „181”, „2400-5”, „TAPE”), un număr de serie pentru casete sau discuri și descrierea fișierului de date, denumit sub-parametru DCB după Blocul de control al datelor (DCB) din programul utilizat pentru identificarea fișierului. Informațiile care descriu fișierul pot proveni din trei surse: informațiile despre cartea DD, informațiile despre eticheta setului de date pentru un fișier existent stocat pe bandă sau pe disc și macrocomanda DCB codată în program. Când fișierul este deschis, aceste date sunt fuzionate, informațiile DD având prioritate față de informațiile de pe etichetă și informațiile DCB au prioritate față de ambele. Descrierea actualizată este apoi scrisă înapoi la eticheta setului de date. Acest lucru poate duce la consecințe neintenționate dacă sunt furnizate informații DCB incorecte.

Independența dispozitivului De la bun început, JCL pentru familia OS de sisteme de operare a oferit un grad înalt de independență a dispozitivului. Chiar și pentru fișierele noi care urmau să fie păstrate după terminarea lucrării, s-ar putea specifica tipul de dispozitiv în termeni generici, de exemplu, UNIT=DISK or UNIT=TAPE. Desigur, dacă este important, se poate specifica un număr de model sau chiar o adresă specifică a dispozitivului.

Proceduri Procedurile permit gruparea uneia sau mai multor instrucțiuni „EXEC PGM=” și DD și apoi invocarea acestora cu „EXEC PROC= procname” sau pur și simplu „EXEC procname”the default for the EXEC statement is PROC=

O facilitate numită Bibliotecă de proceduri a permis procedurile de stocare prealabilă.

PROC & PEND De asemenea, procedurile pot fi incluse în fluxul de locuri de muncă prin încheierea procedurii cu o instrucțiune // PEND, apoi invocând-o cu același nume ca și cum ar fi fost într-o bibliotecă de proceduri.

De exemplu: //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

Proceduri parametrizate Procedurile OS JCL au fost parametrizate de la început, făcându-le mai degrabă ca macro-uri sau chiar simple subrutine, crescând astfel reutilizarea acestora într-o gamă largă de situații. //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) .... În acest exemplu, toate valorile care încep cu ampersands „&” sunt parametrii care vor fi specificați când o lucrare cere ca procedura să fie utilizată. Instrucțiunea PROC, pe lângă faptul că dă procedură un nume, permite programatorului să specifice valorile implicite pentru fiecare parametru. Deci, s-ar putea folosi procedura din acest exemplu pentru a crea noi fișiere de diferite mărimi și machete diferite. De exemplu: //JOB01 JOB .......... //STEP01 EXEC MYPROC FNAME=JOESFILE,SPTYPE=CYL,SPINIT=10,SPEXT=2,LR=100,BLK=2000 or //JOB02 JOB .......... //STEP01 EXEC MYPROC FNAME=SUESFILE,SPTYPE=TRK,SPINIT=500,SPEXT=100,LR=100,BLK=5000

Referbacks În lucrările cu mai multe etape, un pas ulterior poate utiliza o trimitere în loc să precizeze în întregime un fișier care a fost deja specificat într-un pas anterior. De exemplu: //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

Aici, MYPR02 folosește fișierul identificat ca NEWFILE în pasul MYPR01 (DSN înseamnă „numele setului de date” și specifică numele fișierului).

În lucrările care conțin un amestec de JCL specifice locului de muncă și apeluri de procedură, un pas specific unui loc de muncă se poate referi la un fișier care a fost specificat pe deplin într-o procedură, de exemplu: //MYJOB JOB .......... //STEP01 EXEC MYPROC Using a procedure //STEP02 EXEC PGM=......... Step which is specific to this job //INPUT01 DD DSN=*.STEP01.MYPR01.NEWFILE unde DSN=*.STEP01.MYPR01.NEWFILE înseamnă „utilizați fișierul identificat ca NEWFILE în pasul MYPR01 al procedurii utilizate de pasul STEP01 al acestei lucrări”. Folosind numele pasului care a denumit procedura mai degrabă decât numele procedurii permite unui programator să utilizeze aceeași procedură de mai multe ori în aceeași lucrare fără confuzie cu privire la ce instanță a procedurii este utilizată în referire.

Comentarii Fișierele JCL pot fi lungi și complexe, iar limba nu este ușor de citit. (JCL a fost descris ca „utilizator ostil”.) OS JCL permite programatorilor să includă două tipuri de comentarii explicative: