Job Control Language

Last updated

Job Control Language (JCL) is a scripting language used on IBM mainframe operating systems to instruct the system on how to run a batch job or start a subsystem. [1] The purpose of JCL is to say which programs to run, using which files or devices [2] for input or output, and at times to also indicate under what conditions to skip a step. Parameters in the JCL can also provide accounting information for tracking the resources used by a job as well as which machine the job should run on.

Contents

There are two distinct IBM Job Control Languages:

They share some basic syntax rules and a few basic concepts, but are otherwise very different. [3]

The VM operating system does not have JCL as such; the CP and CMS components each have command languages.

Terminology

Certain words or phrases used in conjunction to JCL are specific to IBM mainframe technology.

Motivation

Originally, mainframe systems were oriented toward batch processing. Many batch jobs require setup, with specific requirements for main storage, and dedicated devices such as magnetic tapes, private disk volumes, and printers set up with special forms. [8] JCL was developed as a means of ensuring that all required resources are available before a job is scheduled to run. For example, many systems, such as Linux allow identification of required datasets to be specified on the command line, and therefore subject to substitution by the shell, or generated by the program at run-time. On these systems the operating system job scheduler has little or no idea of the requirements of the job. In contrast, JCL explicitly specifies all required datasets and devices. The scheduler can pre-allocate the resources prior to releasing the job to run. This helps to avoid "deadlock", where job A holds resource R1 and requests resource R2, while concurrently running job B holds resource R2 and requests R1. In such cases the only solution is for the computer operator to terminate one of the jobs, which then needs to be restarted. With job control, if job A is scheduled to run, job B will not be started until job A completes or releases the required resources.

Features common to DOS and OS JCL

Jobs, steps and procedures

For both DOS and OS the unit of work is the job. A job consists of one or several steps, each of which is a request to run one specific program. For example, before the days of relational databases, a job to produce a printed report for management might consist of the following steps: a user-written program to select the appropriate records and copy them to a temporary file; sort the temporary file into the required order, usually using a general-purpose utility; a user-written program to present the information in a way that is easy for the end-users to read and includes other useful information such as sub-totals; and a user-written program to format selected pages of the end-user information for display on a monitor or terminal.

In both DOS and OS JCL the first "card" must be the JOB card, which: [9]

Procedures (commonly called procs) are pre-written JCL for steps or groups of steps, inserted into a job. Both JCLs allow such procedures. Procs are used for repeating steps which are used several times in one job, or in several different jobs. They save programmer time and reduce the risk of errors. To run a procedure one simply includes in the JCL file a single "card" which copies the procedure from a specified file, and inserts it into the jobstream. Also, procs can include parameters to customize the procedure for each use.

Basic syntax

Both DOS and OS JCL have a maximum usable line length of 80 characters, because when DOS/360 and OS/360 were first used the main method of providing new input to a computer system was 80-column punched cards. [10] It later became possible to submit jobs via disk or tape files with longer record lengths, but the operating system's job submission components ignored everything after character 80.

Strictly speaking both operating system families use only 71 characters per line. Characters 73-80 are usually card sequence numbers which the system printed on the end-of-job report and are useful for identifying the locations of any errors reported by the operating system. Character 72 is usually left blank, but it can contain a nonblank character to indicate that the JCL statement is continued onto the next card.

All commands, parameter names and values have to be in capitals, except for USS filenames.

All lines except for in-stream input (see below) have to begin with a slash "/", and all lines which the operating system processes have to begin with two slashes // - always starting in the first column. However, there are two exceptions: the delimiter statement and the comment statement. A delimiter statements begins with a slash and an asterisk (/*), and a comment statement in OS JCL begins with a pair of slashes and asterisk (//*) or an asterisk in DOS JCL.

Many JCL statements are too long to fit within 71 characters, but can be extended on to an indefinite number of continuation cards by:

OS JCLDOS JCL
Ending all actual JCL cards except the last at a point where the syntax requires a comma (,)Ending all actual JCL cards except the last at a point where the syntax requires a comma (,) and a non-blank character in column 72
Starting each continuation card with // in column 1 and then at least 1 spaceStarting each continuation card with spaces and continuing in column 15

The structure of the most common types of card is: [11]

OS JCLDOS JCL
  • //
  • Name field for this statement, following // with no space between. If this statement does not have a name at least one blank immediately follows the //.
  • Space(s)
  • Statement type
  • Space(s)
  • Parameters, which vary depending on the statement type, separated by commas and with no space between them.
  • // (spaces if this is a continuation of a previous line)
  • Statement type for this statement, following // with a space between.
  • Space(s)
  • Name of resource
  • Space(s)
  • Parameters, which vary depending on the statement type, separated by commas and with no space between them. Positional parameters, followed by keyword parameters.

In-stream input

DOS and OS JCL both allow in-stream input, i.e. "cards" which are to be processed by the application program rather than the operating system. Data which is to be kept for a long time will normally be stored on disk, but before the use of interactive terminals became common the only way to create and edit such disk files was by supplying the new data on cards.

DOS and OS JCL have different ways of signaling the start of in-stream input, but both end in-stream input with /* at column 1 of the card following the last in-stream data card. This makes the operating system resume processing JCL in the card following the /* card. [12]

An operand named DLM allowed specifying a delimiter (default is "/*"). Specifying an alternate delimiter allows JCL to be read as data, for example to copy procedures to a library member or to submit a job to the internal reader.
  • An example, [13] which submits a job to the Internal Reader (INTRDR) and then deletes two files is:
//SUBMEXECPGM=IEBGENER//SYSPRINT DD   SYSOUT=Z//SYSUT2   DD   SYSOUT=(A,INTRDR)//SYSIN    DD   DUMMY//SYSUT1   DD   DATA,DLM=ZZ//RUNLATRJOBACCT,MANIX,CLASS=A.TYPRUN=HOLD//* ^ a JOB to run later//CPUHOGEXECPGM=PICALC1K//OUTPUT   DD   DSN=PICALC.1000DGTS,SPACE=(TRK,1),DISP=(,KEEP)ZZ//* ^ as specified by DLM=ZZ//DROPOLDREXECPGM=IEFBR14//DELETE4  DD   DSN=PICALC.4DGTS,DISP=(OLD,DELETE)//DELETE5  DD   DSN=PICALC.5DGTS,DISP=(OLD,DELETE)
  1. The program called PICALC1K will await (TYPRUN=HOLD) being released manually
  2. The program called IEFBR14 will run NOW and upon completion, the two existing files, PICALC.4DGTS and PICALC.5DGTS will be deleted.

Complexity

Fred Brooks, who supervised the OS/360 project in which JCL was created, called it "the worst computer programming language ever devised by anybody, anywhere" in The Design of Design, where he used it as the example in the chapter "How Expert Designers Go Wrong". [14] He attributed this to the failure of the designers to realize that JCL is, in fact, a programming language.

Much of the complexity of OS JCL, in particular, derives from the large number of options for specifying dataset information. While files on Unix-like operating systems are abstracted into ordered streams of bytes, with the task of reading and writing structured data belonging exclusively with user-level programs (which, ultimately, ingest and emit such streams), and the practical details of data storage and access handled in large part by the operating system without the knowledge of user programs; datasets on OS/360 and its successors expose their file types and sizes, record types and lengths, block sizes, device-specific information like magnetic tape density, and label information. Although there are system defaults for many options, there is still a lot to be specified by the programmer, through a combination of JCL and information coded in the program. The more information coded in the program, the less flexible it is, since information in the program overrides anything in the JCL; thus, most information is usually supplied through JCL.

For example, to copy a file on Unix operating system, the user would enter a command like:

cp oldFile newFile

The following example, using JCL, might be used to copy a file on OS/360:

//IS198CPYJOB(IS198T30500),'COPY JOB',CLASS=L,MSGCLASS=X//COPY01EXECPGM=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

A second explanation for the complexity of JCL is the different expectations for running a job from those found in a PC or Unix-like environment.

Later versions of the DOS/360 and OS/360 operating systems retain most features of the original JCLalthough some simplification has been made, to avoid forcing customers to rewrite all their JCL files.[ citation needed ] Many users save as a procedure any set of JCL statements which is likely to be used more than once or twice. [18]

The syntax of OS JCL is similar to the syntax of macros in System/360 assembly language, and would therefore have been familiar to programmers at a time when many programs were coded in assembly language.

DOS JCL

Positional parameters

//TLBLTAPEFIL,'COPYTAPE.JOB',,,,2//ASSGNSYS005,200//DLBLDISKFIL,'COPYTAPE.JOB',0,SD//EXTENTSYS005,VOL01,1,0,800,1600

DOS JCL parameters are positional, which makes them harder to read and write, but easier for the system to parse.

DOS JCL to some extent mitigates the difficulties of positional parameters by using more statements with fewer parameters than OS JCL. In the example the ASSGN, DLBL and EXTENT statements do the same work (specifying where a new disk file should be stored) as a single DD statement in OS JCL.

Device dependence

In the original DOS/360 and in most versions of DOS/VS one had to specify the model number of the device which was to be used for each disk or tape fileeven for existing files and for temporary files which would be deleted at the end of the job. This meant that, if a customer upgraded to more modern equipment, many JCL files had to be changed.

Later members of the DOS/360 family reduced the number of situations in which device model numbers were required.

Manual file allocation

DOS/360 originally required the programmer to specify the location and size of all files on DASD. The EXTENT card specifies the volume on which the extent resides, the starting absolute track, and the number of tracks. For z/VSE a file can have up to 256 extents on different volumes.

OS JCL

OS JCL consists of three basic statement types: [19]

Right from the start, JCL for the OS family (up to and including z/OS) was more flexible and easier to use.

The following examples use the old style of syntax which was provided right from the launch of System/360 in 1964. The old syntax is still quite common in jobs that have been running for decades with only minor changes.

Rules for coding JCL statements

Each JCL statement is divided into five fields: [21]

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

Identifier-Field should be concatenated with Name-Field, i.e. there should be no spaces between them.

Keyword parameters

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

All of the major parameters of OS JCL statements are identified by keywords and can be presented in any order. A few of these contain two or more sub-parameters, such as SPACE (how much disk space to allocate to a new file) and DCB (detailed specification of a file's layout) in the example above. Sub-parameters are sometimes positional, as in SPACE, but the most complex parameters, such as DCB, have keyword sub-parameters.

Positional parameter must precede keyword parameters. Keyword parameters always assign values to a keyword using the equals sign (=). [22]

Data access (DD statement)

The DD statement is used to reference data. This statement links a program's internal description of a dataset to the data on external devices: disks, tapes, cards, printers, etc. The DD may provide information such as a device type (e.g. '181','2400-5','TAPE'), a volume serial number for tapes or disks, and the description of the data file, called the DCB subparameter after the Data Control Block (DCB) in the program used to identify the file.

Information describing the file can come from three sources: The DD card information, the dataset label information for an existing file stored on tape or disk, and the DCB macro coded in the program. When the file is opened this data is merged, with the DD information taking precedence over the label information, and the DCB information taking precedence over both. The updated description is then written back to the dataset label. This can lead to unintended consequences if incorrect DCB information is provided. [23]

Because of the parameters listed above and specific information for various access methods and devices the DD statement is the most complex JCL statement. In one IBM reference manual description of the DD statement occupies over 130 pages—more than twice as much as the JOB and EXEC statements combined. [24]

The DD statement allows inline data to be injected into the job stream. This is useful for providing control information to utilities such as IDCAMS, SORT, etc. as well as providing input data to programs.

Device independence

From the very beginning, the JCL for the OS family of operating systems offered a high degree of device independence. Even for new files which were to be kept after the end of the job one could specify the device type in generic terms, e.g., UNIT=DISK, UNIT=TAPE, or UNIT=SYSSQ (tape or disk). Of course, if it mattered one could specify a model number or even a specific device address. [25]

Procedures

Procedures permit grouping one or more "EXEC PGM=" and DD statements and then invoking them with "EXEC PROC=procname" -or- simply "EXEC procname" [26]

A facility called a Procedure Library allowed pre-storing procedures.

PROC & PEND

Procedures can also be included in the job stream by terminating the procedure with a // PEND statement, then invoking it by name the same was as if it were in a procedure library.

For example:

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

Parameterized procedures

OS JCL procedures were parameterized from the start, making them rather like macros or even simple subroutines and thus increasing their reusability in a wide range of situations. [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)....

In this example, all the values beginning with ampersands "&" are parameters which will be specified when a job requests that the procedure be used. The PROC statement, in addition to giving the procedure a name, allows the programmer to specify default values for each parameter. So one could use the one procedure in this example to create new files of many different sizes and layouts. For example:

//JOB01JOB..........//STEP01EXECMYPROCFNAME=JOESFILE,SPTYPE=CYL,SPINIT=10,SPEXT=2,LR=100,BLK=2000or//JOB02JOB..........//STEP01EXECMYPROCFNAME=SUESFILE,SPTYPE=TRK,SPINIT=500,SPEXT=100,LR=100,BLK=5000

Referbacks

In multi-step jobs, a later step can use a referback instead of specifying in full a file which has already been specified in an earlier step. For example:

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

Here, MYPR02 uses the file identified as NEWFILE in step MYPR01 (DSN means "dataset name" and specifies the name of the file; a DSN could not exceed 44 characters [28] ).

In jobs which contain a mixture of job-specific JCL and procedure calls, a job-specific step can refer back to a file which was fully specified in a procedure, for example:

//MYJOBJOB..........//STEP01EXECMYPROCUsing a procedure//STEP02EXECPGM=.........Step which is specific to this job//INPUT01 DD DSN=*.STEP01.MYPR01.NEWFILE

where DSN=*.STEP01.MYPR01.NEWFILE means "use the file identified as NEWFILE in step MYPR01 of the procedure used by step STEP01 of this job". Using the name of the step which called the procedure rather than the name of the procedure allows a programmer to use the same procedure several times in the same job without confusion about which instance of the procedure is used in the referback.

Comments

JCL files can be long and complex, and the language is not easy to read. OS JCL allows programmers to include two types of explanatory comment:

//MYJOBJOB..........//*  Lines containing only comments.//******** Often used to divide JCL listing into sections ********//STEP01EXECMYPROCComment 2 on same line as statement//STEP02EXECPGM=.........Comment 3 has been extended and       X//overflowsinto another line.//INPUT01 DD DSN=STEP01.MYPR01.NEWFILE

Concatenating input files

OS JCL allows programmers to concatenate ("chain") input files so that they appear to the program as one file, for example

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

The 2nd and third statements have no value in the name field, so OS treats them as concatenations. The files must be of the same basic type (almost always sequential), and must have the same record length, however the block length need not be the same.

In early versions of the OS (certainly before OS/360 R21.8) the block length must be in decreasing order, or the user must inspect each instance and append to the named DD statement the maximum block length found, as in, for example,

//INPUT01 DD DSN=MYFILE01,DISP=SHR,BLKSIZE=800//DDDSN=JOESFILE,DISP=SHR (BLKSIZE assumed to be equal to or less than 800)//DDDSN=SUESFILE,DISP=SHR (BLKSIZE assumed to be equal to or less than 800)

In later versions of the OS (certainly after OS/MVS R3.7 with the appropriate "selectable units") the OS itself, during allocation, would inspect each instance in a concatenation and would substitute the maximum block length which was found.

A usual fallback was to simply determine the maximum possible block length on the device, and specify that on the named DD statement, as in, for example,

//INPUT01 DD DSN=MYFILE01,DISP=SHR,BLKSIZE=8000//DDDSN=JOESFILE,DISP=SHR (BLKSIZE assumed to be equal to or less than 8000)//DDDSN=SUESFILE,DISP=SHR (BLKSIZE assumed to be equal to or less than 8000)

The purpose of this fallback was to ensure that the access method would allocate an input buffer set which was large enough to accommodate any and all of the specified datasets.

Conditional processing

OS expects programs to set a return code which specifies how successful the program thought it was. The most common conventional values are: [29] :p.87

OS JCL refers to the return code as COND ("condition code"), and can use it to decide whether to run subsequent steps. However, unlike most modern programming languages, conditional steps in OS JCL are not executed if the specified condition is truethus giving rise to the mnemonic, "If it's true, pass on through [without running the code]." To complicate matters further, the condition can only be specified after the step to which it refers. For example:

//MYJOBJOB...........//STEP01EXECPGM=PROG01....//STEP02EXECPGM=PROG02,COND=(4,GT,STEP01)....//STEP03EXECPGM=PROG03,COND=(8,LE)....//STEP04EXECPGM=PROG04,COND=(ONLY,STEP01)....//STEP05EXECPGM=PROG05,COND=(EVEN,STEP03)....

means:

  1. Run STEP01, and collect its return code.
  2. Don't run STEP02 if the number 4 is greater than STEP01's return code.
  3. Don't run STEP03 if the number 8 is less than or equal to any previous return code.
  4. Run STEP04 only if STEP01 abnormally ended.
  5. Run STEP05, even if STEP03 abnormally ended.

This translates to the following pseudocode:

run STEP01 if STEP01's return code is greater than or equal to  4 then     run STEP02 end ifif any previous return code is less than  8 then     run STEP03 end ifif STEP01 abnormally ended then     run STEP04 end ifif STEP03 abnormally ended then     run STEP05 else     run STEP05 end if

Note that by reading the steps containing COND statements backwards, one can understand them fairly easily. This is an example of logical transposition. However, IBM later introduced IF condition in JCL thereby making coding somewhat easier for programmers while retaining the COND parameter (to avoid making changes to the existing JCLs where COND parm is used).

The COND parameter may also be specified on the JOB statement. If so the system "performs the same return code tests for every step in a job. If a JOB statement return code test is satisfied, the job terminates." [30]

Utilities

Jobs use a number of IBM utility programs to assist in the processing of data. Utilities are most useful in batch processing. The utilities can be grouped into three sets:

Difficulty of use

OS JCL is undeniably complex [31] and has been described as "user hostile". [32] [33] As one instructional book on JCL asked, "Why do even sophisticated programmers hesitate when it comes to Job Control Language?" [34] The book stated that many programmers either copied control cards without really understanding what they did, or "believed the prevalent rumors that JCL was horrible, and only 'die-hard' computer-types ever understood it" and handed the task of figuring out the JCL statements to someone else. [34] Such an attitude could be found in programming language textbooks, which preferred to focus on the language itself and not how programs in it were run. As one Fortran IV textbook said when listing possible error messages from the WATFOR compiler: "Have you been so foolish as to try to write your own 'DD' system control cards? Cease and desist forthwith; run, do not walk, for help." [35]

Nevertheless, some books that went into JCL in detail emphasized that once it was learned to an at least somewhat proficient degree, one gained freedom from installation-wide defaults and much better control over how an IBM system processed your workload. [34] [31] Another book commented on the complexity but said, "take heart. The JCL capability you will gain from [the preceding chapter] is all that most programmers will ever need." [31]

Job Entry Control Language

On IBM mainframe systems Job Entry Control Language or JECL is the set of command language control statements that provide information for the spooling subsystem JES2 or JES3 on z/OS or VSE/POWER for z/VSE. JECL statements may "specify on which network computer to run the job, when to run the job, and where to send the resulting output." [29]

JECL is distinct from job control language (JCL), which instructs the operating system how to run the job.

There are different versions of JECL for the three environments.

OS/360

An early version of Job Entry Control Language for OS/360 Remote Job Entry (Program Number 360S-RC-536) used the identifier  ..  in columns 12 of the input record and consisted of a single control statement: JED (Job Entry Definition). "Workstation Commands" such as LOGON, LOGOFF, and STATUS also began with  .. . [36]

pre-JES JECL

Although the term had not yet been developed, HASP did have similar functionality to what would become the JECL of JES, including /* syntax.

z/OS

For JES2 JECL statements start with /*, for JES3 they start with //*, except for remote  /*SIGNON  and  /*SIGNOFF  commands. The commands for the two systems are completely different.

JES2 JECL

The following JES2 JECL statements are used in z/OS 1.2.0. [37]

JECL statementFunctionExample
/*$commandEnters an operator (console) command/*$S PRINTER3 [38]
/*JOBPARMSpecifies values for job-related parameters/*JOBPARM TIME=10
/*MESSAGESends a message to the operator console/*MESSAGE CALL JOE AT HOME IF JOB ABENDS
/*NETACCTSpecifies account number for network job/*NETACCT 12345
/*NOTIFYSpecifies destination for notification messages/*NOTIFY SAM
/*OUTPUTSpecifies SYSOUT dataset options/*OUTPUT FORMS=BILL
/*PRIORITYSets job selection priority/*PRIORITY 15
/*ROUTESpecifies output destination or execution node/*ROUTE PRT RMT5
/*SETUPRequests volume mounting or other offline operation/*SETUP TAPE01,TAPE02
/*SIGNOFFEnds remote session/*SIGNOFF
/*SIGNONBegins remote session/*SIGNON REMOTE5 password
/*XEQSpecifies execution node/*XEQ DENVER
/*XMITIndicates job or dataset to be transmitted to another network node/*XMIT NYC

JES3 JECL

The following JES3 JECL statements are used in z/OS 1.2.0 [39]

JECL statementFunctionExample
//**commandEnters a JES3 operator (console) command
//*DATASETMarks the beginning of an in-stream dataset
//*ENDDATASETMarks the end of an in-stream dataset
//*ENDPROCESSMarks the end of a series of  //*PROCESS  statements
//*FORMATSpecifies  SYSOUT  dataset options
//*MAINSpecifies values for job-related parameters
//*NETIdentifies relationships among jobs using JES3 dependent job control
//*NETACCTSpecifies account number for network job
//*OPERATORSends a message to the operator console
//*PAUSEStops the input reader
//*PROCESSIdentifies a non-standard job
//*ROUTESpecifies the execution node for the job
/*SIGNOFFEnds remote session/*SIGNOFF
/*SIGNONBegins remote session

z/VSE

For VSE JECL statements start with '* $$' (note the single space). The Job Entry Control Language defines the start and end lines of JCL jobs. It advises VSE/POWER how this job is handled. JECL statements define the job name (used by VSE/POWER), the class in which the job is processed, and the disposition of the job (i.e. D, L, K, H).

JECL statement [40] FunctionExample
* $$ CTLEstablishes a default input class* $$ CTL CLASS=A
* $$ JOBSpecifies attributes of a job* $$ JOB JNM=PYRL,PRI=9
* $$ EOJMarks the end of a job* $$ EOJ
* $$ RDRInserts a file from a 3540 diskette into the input stream* $$ RDR SYS005,'fname',2
* $$ PRTSpecifies characteristics of spooled print files
"LST' is a synonym for "PRT"
* $$ PRT FNO=STD,COPY=2
* $$ PUNSpecifies characteristics of spooled punch files* $$ PUN DISP=T,TADDR=280
* $$ SLIInserts data ("book") from source statement library into the input stream* $$ SLI A.JCL1
* $$ DATAInserts data from the card reader into a book retrieved from the source statement library* $$ DATA INPUT1

Example:

* $$ JOB JNM=NAME,DISP=K,CLASS=2[some JCL statements here]* $$ EOJ

Other systems

Other mainframe batch systems had some form of job control language, whether called that or not; their syntax was completely different from IBM versions, but they usually provided similar capabilities. Interactive systems include "command languages"command files (such as PCDOS ".bat" files) can be run non-interactively, but these usually do not provide as robust an environment for running unattended jobs as JCL. On some computer systems the job control language and the interactive command language may be different. For example, TSO on z/OS systems uses CLIST or Rexx as command languages along with JCL for batch work. On other systems these may be the same.

See also

Related Research Articles

<span class="mw-page-title-main">MVS</span> Operating system for IBM mainframes

Multiple Virtual Storage, more commonly called MVS, is the most commonly used operating system on the System/370, System/390 and IBM Z IBM mainframe computers. IBM developed MVS, along with OS/VS1 and SVS, as a successor to OS/360. It is unrelated to IBM's other mainframe operating system lines, e.g., VSE, VM, TPF.

z/OS 64-bit operating system for IBM mainframes

z/OS is a 64-bit operating system for IBM z/Architecture mainframes, introduced by IBM in October 2000. It derives from and is the successor to OS/390, which in turn was preceded by a string of MVS versions. Like OS/390, z/OS combines a number of formerly separate, related products, some of which are still optional. z/OS has the attributes of modern operating systems but also retains much of the older functionality that originated in the 1960s and is still in regular use—z/OS is designed for backward compatibility.

Time Sharing Option (TSO) is an interactive time-sharing environment for IBM mainframe operating systems, including OS/360 MVT, OS/VS2 (SVS), MVS, OS/390, and z/OS.

Virtual Storage Access Method (VSAM) is an IBM direct-access storage device (DASD) file storage access method, first used in the OS/VS1, OS/VS2 Release 1 (SVS) and Release 2 (MVS) operating systems, later used throughout the Multiple Virtual Storage (MVS) architecture and now in z/OS. Originally a record-oriented filesystem, VSAM comprises four data set organizations: key-sequenced (KSDS), relative record (RRDS), entry-sequenced (ESDS) and linear (LDS). The KSDS, RRDS and ESDS organizations contain records, while the LDS organization contains a sequence of pages with no intrinsic record structure, for use as a memory-mapped file.

The Control Language (CL) is a scripting language originally created by IBM for the System/38 Control Program Facility and later used in OS/400. It bears a resemblance to the IBM Job Control Language and consists of a set of command objects (*CMD) used to invoke traditional programs or get help on what those programs do. CL can also be used to create CL programs where there are additional commands that provide program-like functionality

Disk Operating System/360, also DOS/360, or simply DOS, is the discontinued first member of a sequence of operating systems for IBM System/360, System/370 and later mainframes. It was announced by IBM on the last day of 1964, and it was first delivered in June 1966. In its time, DOS/360 was the most widely used operating system in the world.

In the context of IBM mainframe computers in the S/360 line, a data set or dataset is a computer file having a record organization. Use of this term began with, e.g., DOS/360, OS/360, and is still used by their successors, including the current z/OS. Documentation for these systems historically preferred this term rather than file.

IEFBR14 is an IBM mainframe utility program. It runs in all IBM mainframe environments derived from OS/360, including z/OS. It is a placeholder that returns the exit status zero, similar to the true command on UNIX-like systems.

This article discusses support programs included in or available for OS/360 and successors. IBM categorizes some of these programs as utilities and others as service aids; the boundaries are not always consistent or obvious. Many, but not all, of these programs match the types in utility software.

Work Flow Language, or WFL ("wiffle") is the process control language for the Burroughs large systems, including the Unisys ClearPath/MCP series, and their operating system Master Control Program. Developed soon after the B5000 in 1961, WFL is the ClearPath equivalent of the Job Control Language (JCL) on IBM mainframes and the shell scripts of Unix-like operating systems. Unlike JCL, WFL is a high-level structured language complete with subroutines with arguments and high-level program control flow instructions. WFL programs are compiled to binary executables like any other MCP subject.

In the IBM System/360 storage architecture, the Volume Table of Contents (VTOC) is a data structure that provides a way of locating the data sets that reside on a particular DASD volume. With the exception of the IBM Z compatible disk layout in Linux on Z, it is the functional equivalent of the MS/PC DOS File Allocation Table (FAT), the NTFS Master File Table (MFT), and an inode table in a file system for a Unix-like system. The VTOC is not used to contain any IPLTEXT and does not have any role in the IPL process, therefore does not have any data used by or functionally equivalent to the MBR. It lists the names of each data set on the volume as well as size, location, and permissions. Additionally, it contains an entry for every area of contiguous free space on the volume. The third record on the first track of the first cylinder of any DASD volume is known as the volume label and must contain a pointer to the location of the VTOC. The location of the VTOC may be specified when the volume is initialized. For performance reasons it may be located as close to the center of the volume as possible, since it is referenced frequently. A VTOC is added to a DASD volume when it is initialized using the Device Support Facilities program, ICKDSF, in current systems.

The IBM Basic assembly language and successors is a series of assembly languages and assemblers made for the IBM System/360 mainframe system and its successors through the IBM Z.

Operational Control Language (OCL) is the control language of the IBM System/3, System/32, System/34 and System/36 minicomputer family. It is supported on IBM i's System/36 Environment for backwards compatibility purposes. It is similar to the older control languages JCL (System/370), and unrelated to the later Control Language, and REXX (AS/400).

In a non-interactive computer system, particularly IBM mainframes, a job stream, jobstream, or simply job is the sequence of job control language statements (JCL) and data that comprise a single "unit of work for an operating system". The term job traditionally means a one-off piece of work, and is contrasted with a batch, but non-interactive computation has come to be called "batch processing", and thus a unit of batch processing is often called a job, or by the oxymoronic term batch job; see job for details. Performing a job consists of executing one or more programs. Each program execution, called a job step, jobstep, or step, is usually related in some way to the others in the job. Steps in a job are executed sequentially, possibly depending on the results of previous steps, particularly in batch processing.

In IBM mainframe operating systems, basic partitioned access method (BPAM) is an access method for libraries, called partitioned datasets (PDSes) in IBM terminology. BPAM is used in OS/360, OS/VS2, MVS, z/OS, and others.

In IBM mainframe operating systems, such as OS/360, MVS, z/OS, a Data Control Block (DCB) is a description of a dataset in a program. A DCB is coded in Assembler programs using the DCB macro instruction. High level language programmers use library routines containing DCBs.

In IBM mainframe operating systems, Execute Channel Program (EXCP) is a macro generating a system call, implemented as a Supervisor Call instruction, for low-level device access, where the programmer is responsible for providing a channel program—a list of device-specific commands (CCWs)—to be executed by I/O channels, control units and devices. EXCP for OS/360 and successors is more specifically described in the OS System Programmer's Guide.; EXCP for DOS/360 and successors is more specifically described in DOS Supervisor and I/O Macros. This article mostly reflects OS/360 through z/OS; some details are different for TOS/360 and DOS/360 through z/VSE.

<span class="mw-page-title-main">OS/360 and successors</span> Operating system for IBM S/360 and later mainframes

OS/360, officially known as IBM System/360 Operating System, is a discontinued batch processing operating system developed by IBM for their then-new System/360 mainframe computer, announced in 1964; it was influenced by the earlier IBSYS/IBJOB and Input/Output Control System (IOCS) packages for the IBM 7090/7094 and even more so by the PR155 Operating System for the IBM 1410/7010 processors. It was one of the earliest operating systems to require the computer hardware to include at least one direct access storage device.

Basic Direct Access Method, or BDAM is an access method for IBM's OS/360 and successors computer operating systems on System/360 and later mainframes. BDAM "consists of routines used in retrieving data from, and storing data onto, direct access devices." BDAM is available on OS/360, OS/VS2, MVS, z/OS, and related high-end operating systems.

TERSE is an IBM archive file format that supports lossless compression. A TERSE file may contain a sequential data set, a partitioned data set (PDS), partitioned data set extended (PDSE), or a large format dataset (DSNTYPE=LARGE). Any record format (RECFM) is allowed as long as the record length is less than 32 K. Records may contain printer control characters.

References

  1. "Every job submitted for execution ... must include JCL statements" -- ibm.com
  2. and many more complex details, such as whether the file is to be retained or deleted, the maximum disk space to which it can grow, the name of a tape to be pre-mounted
  3. Ashley and Fernandez, Job Control Language, p. 1.
  4. Ashley and Fernandez, Job Control Language, p. 5.
  5. McQuillen, System/360–370 Assembler Language, pp. 385–386.
  6. 1 2 McQuillen, System/360–370 Assembler Language, pp. 288–289, 400.
  7. Lewis, Cecilia (August 8, 2011). "What We've Done for You Lately With PDSE" (PDF). SHARE in Orlando. Retrieved 2023-03-03.
  8. McQuillen, System/360–370 Assembler Language, pp. 22–24.
  9. McQuillen, System/360–370 Assembler Language, pp. 380–382.
  10. Stern and Stern, Structured COBOL Programming, pp. 528–529.
  11. Stern and Stern, Structured COBOL Programming, pp. 529, 531.
  12. Stern and Stern, Structured COBOL Programming, pp. 529, 537.
  13. modeled on 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, using knowledge dating back to when Green Cards came from IBM, and Manix worked for a company owning an IBM card sorter
  14. Brooks, Frederick P. (2010). The Design Of Design. Addison-Wesley. pp. 167–173. ISBN   978-0-201-36298-5.
  15. "IBM Archives: System/360 Model 30". www-03.ibm.com. 2003-01-23. Archived from the original on December 17, 2004. Retrieved 2016-04-25.
  16. "IBM PC". Archived from the original on 2006-07-05. Retrieved 2007-10-21.
  17. IBM-compatible computers History of PCs Archived August 14, 2007, at the Wayback Machine
  18. Brown, Gary DeWard (2002). zOS JCL (fifth ed.). John Wiley & Sons. p. 248. ISBN   0471-236357.
  19. Ashley and Fernandez, Job Control Language, pp. 8, 23. There are also two additional statements, PROC and PEND, used to test JCL procedures.
  20. A pre-stored set of "EXEC PGM=" and "DD" JCL commands which could be parameterized
  21. Ashley and Fernandez, Job Control Language, pp. 12–16.
  22. Ashley and Fernandez, Job Control Language, pp. 13–15.
  23. IBM Corporation (August 1978). OS/VS MVS Data Management Services Guide (PDF). Retrieved Oct 17, 2014.
  24. IBM Corporation (June 1971). IBM System/360 Operating System: Job Control Language Reference (PDF). Retrieved June 25, 2019.
  25. McQuillen, System/360–370 Assembler Language, pp. 297, 406–407.
  26. the default for the EXEC statement is PROC=
  27. Ashley and Fernandez, Job Control Language, pp. 129–131.
  28. "Data set names". IBM . 27 March 2014. Data set names must not exceed 44 characters, including all name segments and periods.
  29. 1 2 Brown, Gary DeWard (2002). zOS JCL. John Wiley & Sons. ISBN   9780471426738 . Retrieved 2014-05-05.
  30. IBM Corporation. "Relationship of the COND parameters on JOB and EXEC statements". IBM Knowledge Center. Retrieved Feb 21, 2018.
  31. 1 2 3 McQuillen, System/360–370 Assembler Language, pp. 406–407.
  32. Charley, Alfred (1993). NetView: IBM's Network Management Product. New York: Van Nostrand Reinhold. p.  93. ISBN   0-442-01407-4.
  33. Mathew W. Blode (April 6, 2020). "Newly unemployed New Yorkers are being frustrated by 1970s-era technology(nytimes.com)" . Retrieved May 7, 2020. JCL in particular is notoriously user hostile and has been called "the worst programming language ever designed" by Fred Brooks ... (http://dtsc.dfw.ibm.com/MVSDS/'HTTPD2.APPS.ZOSCLASS.PDF(ZCLA...)[link in original].
  34. 1 2 3 Ashley and Fernandez, Job Control Language, pp. vii–viii, back cover.
  35. Blatt, John M. (1971). Introduction to FORTRAN IV Programming: Using the WATFOR/WATFIV Compilers. Pacific Palisades, California: Goodyear Publishing Company. p. 276. ISBN   0-87620-440-X.
  36. IBM Corporation (1968). IBM System/360 Operating System Remote Job Entry (PDF). Retrieved 2014-05-05.
  37. IBM Corporation. "Job Entry Subsystem 2 (JES2) Control Statements". z/OS V1R2.0 MVS JCL. Archived from the original on October 18, 2015. Retrieved February 25, 2013.
  38. other examples can be viewed at Houston Automatic Spooling Priority#Operator Commands
  39. IBM Corporation. "Job Entry Subsystem 3 (JES3) Control Statements". z/OS V1R2.0 MVS JCL. Archived from the original on October 18, 2015. Retrieved February 25, 2013.
  40. IBM Corporation (1974). DOS/VS POWER/VS Installation and Operations (PDF).

Sources