작업 제어 언어

작업 제어 언어(Job Control Language, JCL)는 IBM 메인프레임 운영 체제에 사용되는 스크립트 언어로, 일괄 처리 작업을 수행하거나 하부 시스템을 시작하는 방법을 시스템에 지시한다.
실제로 IBM JCL에는 두 가지가 있다: 하나는 DOS/360으로 시작하는 운영 체제 계열에 대한 것(최신의 것이 z/VSE). 나머지 하나는 OS/360부터 z/OS에 이르는 계열에 대한 것. 이들은 몇 가지 기본적인 문법과 몇 가지 기본 개념은 동일하지만 그 밖의 것들은 매우 다르다.

인스트림 입력

도스 JCL과 OS JCL은 둘 다 인스트림 입력을 지원하는데 이를테면 카드들은 운영 체제가 아닌 응용 프로그램이 처리한다. 오랜 기간에 걸쳐 보관해야 하는 데이터는 일반적으로 디스크에 저장되지만, 상호작용적인 터미널이 일반화되기 전까지 이러한 디스크 파일을 만들고 편집하는 유일한 방법은 새로운 데이터를 카드에 공급하는 것이었다.
도스 JCL과 OS JCL은 인스트림 입력의 시작 신호를 주는 방법이 다르지만 둘 다 카드의 첫 열에 인스트림 입력을 "/*"로 마친다는 것은 동일하다.

장치 의존성

초기 DOS/360과 대부분의 DOS/VS 버전에서, 잡을 마칠 때 삭제될 기존의 파일과 임시 파일에 대해서도 개별 디스크나 테이프 파일에 사용될 장치의 모델 번호를 지정해야 했다. 이는 고객이 더 현대적인 형태의 장치로 업그레이드하면 수많은 JCL 파일을 변경해야 함을 뜻한다.
나중에 DOS/360 계열이 등장함에 따라 모델 번호를 요구하는 일이 줄었다.

키워드 매개변수

//NEWFILE DD DSN=MYFILE01,UNIT=DISK,SPACE=(TRK,80,10),//           DCB=(LRECL=100,BLKSIZE=1000),//           DISP=(NEW,CATLG,DELETE)
OS JCL의 모든 주요 매개변수들은 키워드로 식별되며 어떠한 순서로도 표현이 가능하다. 이 중 일부는 위의 예시처럼 SPACE(새로운 파일에 얼마나 많은 디스크 공간을 할당할 것인지), DCB(파일의 레이아웃의 자세한 사양)와 같은 둘 이상의 하부 매개변수를 포함할 수 있다. 하부 매개변수들은 SPACE에서처럼 가끔 위치성을 띄지만 DCB와 같은 가장 복잡한 매개변수들은 키워드 하부 매개변수가 있다.
위치 매개변수는 키워드 매개변수보다 우선해야 한다. 키워드 매개변수는 등호(=)를 사용하여 언제나 값을 키워드로 할당해야 한다.

장치 독립성

처음부터 OS 계열 운영 체제의 JCL은 고수준의 장치 독립성을 제공하였다. 잡을 끝낸 뒤 유지되어야 할 새로운 파일들에 대해서도 일반적인 용어(예: UNIT=DISK, UNIT=TAPE)들로 장치 유형을 지정할 수 있다. 물론 문제가 되면 모델 번호라든지, 특정 장치 주소 또한 지정할 수 있다.

매개변수화된 프로시저

OS JCL 프로시저는 처음부터 매개변수화되었으며 마치 매크로나 단순 함수처럼 만들어준다. 이로써 재사용성을 다양한 환경에서 증대시킨다.
//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

오버라이드 기능

OS는 프로그램들이 포함할 수 있는 파일 구조의 사양 중 일부를 JCL에 오버라이드할 수 있게 한다. 이 기능은 대개 새로운 파일들을 만드는데 사용된다. 이를테면:
//STEP01  EXEC PGM=MYPROG//NEWFILE DD DSN=MYFILE01,UNIT=DISK,SPACE=(TRK,50,10),DCB=BLKSIZE=1000,//           DISP=(NEW,CATLG,DELETE)
프로그램 MYPROG 내의 코드가 블록 크기를 특정하더라도 새로운 파일이 1000 바이트의 블록 크기를 가질 것이다. 그러므로 프로그램 MYPROG를 변경할 필요가 없다. 한편 이 예제는 DCB의 하부 매개변수 LRECL (레코드 길이)를 지정하지 않고 있으므로 레코드 길이는 MYPROG이 제시하는 바대로 결정된다.

재조회

멀티 스텝 잡에서 나중의 스텝은 초기 스텝에서 이미 지정한 파일을 통째로 지정하지 않고 재조회를 사용할 수 있다. 이를테면 이 프로시저에서
//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는 스텝 MYPR01의 NEWFILE로 식별된 파일을 사용한다 (DSN은 데이터셋 이름을 말하며 파일의 이름을 지정한다).
여러 잡에 특화된 JCL과 프로시저 호출이 포함된 잡에서 잡에 특화된 스텝은 프로시저에 온전히 지정된 파일을 재조회할 수 있다. 이를테면:
//MYJOB JOB ..........//STEP01 EXEC MYPROC             Using a procedure//STEP02 EXEC PGM=.........      Step which is specific to this job//INPUT01 DD DSN=*.STEP01.MYPR01.NEWFILE
여기서 DSN=*.STEP01.MYPR01.NEWFILE은 "이 잡의 스텝 STEP01이 사용한 프로시저의 스텝 MYPR01의 NEWFILE로 식별된 파일을 사용하라"를 뜻한다. 프로시저의 이름이 아닌 프로시저를 호출한 스텝의 이름을 사용하면 프로그래머가 여러 번 동일한 잡 안에서 재조회에 사용된 프로시저의 인스턴스가 어느 것인지 혼동하지 않고 동일한 프로시저를 사용할 수 있다.

입력 파일들의 연결

OS JCL은 프로그래머들이 입력 파일들을 하나로 연결시킬 수 있게 하여, 이들이 마치 프로그램을 하나의 파일처럼 보이게 만들어준다. 예를 들어:
//INPUT01 DD DSN=MYFILE01,DISP=SHR
//        DD DSN=JOESFILE,DISP=SHR
//        DD DSN=SUESFILE,DISP=SHR
2번째, 3번째 문들은 이름 필드에 값이 없으므로 OS는 이들을 "연결"(concatenation)로 취급한다. 파일들은 동일한 기본 형태 (거의 언제나 연속적인)여야 하며 같은 레코드 길이여야 한다.

작업 엔트리 제어 언어

IBM 메인프레임 시스템에서 작업 엔트리 제어 언어(Job Entry Control Language, JECL)는 z/VSE용 z/OS나 VSE/POWER에서 스풀링 서브시스템 JES2 또는 JES3용 정보를 제공하는 명령 언어 제어문들믜 모임이다. JECL 문들은 네트워크 컴퓨터가 작업을 실행할지, 작업을 언제 실행할지, 결과 출력물을 어디로 보낼지 지정할 수 있다.
JECL은 운영 체제에게 어떻게 작업을 실행하는지를 지시하는 작업 제어 언어와는 구별된다.