작업 제어 언어

Job Control Language

JCL(Job Control Language)은 IBM 메인프레임 운영 체제에서 배치 작업을 실행하거나 [1]하위 시스템을 시작하는 방법을 시스템에 지시하는 데 사용되는 스크립트 언어의 이름입니다.

보다 구체적으로 JCL의 목적은 실행할 프로그램, 입력 또는 출력에 사용할 파일 또는 장치를 지정하는 것이며 때로는 스텝을 건너뛸 조건도 지정하는 것입니다.

또한 JCL의 매개 변수는 작업에서 사용되는 리소스 및 작업을 실행해야 하는 시스템을 추적하기 위한 계정 정보를 제공할 수 있습니다.

IBM 작업 제어 언어에는 두 가지가 있습니다.

기본 구문 규칙과 몇 가지 기본 개념을 공유하지만 그 외에는 매우 다릅니다.[3]

VM 운영 체제에는 JCL이 없습니다.CP 컴포넌트와 CMS 컴포넌트에는 각각 명령어가 있습니다.

용어.

JCL과 함께 사용되는 특정 단어 또는 구문은 IBM 메인프레임 기술에 고유합니다.

  • 데이터 세트: "데이터셋"은 파일입니다.일시적 또는 영속적으로 디스크 드라이브, 테이프 스토리지 또는 기타 [4][5]장치에 배치할 수 있습니다.
  • 멤버: PDS(Partitioned Dataset)의 "멤버"는 PDS 내의 개별 데이터 세트입니다.PDS 이름을 괄호 안에 지정하여 멤버에 액세스할 수 있습니다.예를 들어 SYS1의 시스템 매크로 GETMAIN이 있습니다.MACLIB는 SYS1로 참조할 수 있습니다.MACLIB(GETMAIN)[6]
  • 분할 데이터 세트: "분할 데이터 세트" 또는 PDS는 일반적으로 시스템 라이브러리를 나타내기 위해 사용되는 멤버 또는 아카이브의 집합입니다.이러한 대부분의 구조와 마찬가지로 일단 저장된 구성원은 업데이트할 수 없습니다. IEBUPDTE [6]유틸리티와 같이 구성원을 삭제하고 교체해야 합니다.분할 데이터 세트는 Unix 기반 시스템의 ar 기반 정적 라이브러리와 거의 유사합니다.
  • USS: Unix 시스템 서비스. MVS의 일부로 실행되며 UNIX 환경의 메인프레임에서 Unix 파일, 스크립트, 작업 및 프로그램을 실행할 수 있습니다.

동기

원래 메인프레임 시스템은 배치 처리를 지향했습니다.대부분의 배치 작업에서는 주 스토리지에 대한 특정 요구 사항을 포함하여 설정해야 하며 자기 테이프, 개인 Disk 볼륨 및 프린터와 같은 전용 장치를 특수 [7]형식으로 설정해야 합니다.JCL은 작업 실행을 예약하기 전에 필요한 모든 리소스를 사용할 수 있도록 하기 위한 수단으로 개발되었습니다.예를 들어 Linux와 같은 많은 시스템에서는 명령줄에서 필요한 데이터 세트를 식별할 수 있으므로 에 의해 대체되거나 런타임에 프로그램에 의해 생성됩니다.이러한 시스템에서 운영 체제 작업 스케줄러는 작업의 요구 사항을 거의 또는 전혀 알지 못합니다.반면 JCL은 필요한 모든 데이터셋과 디바이스를 명시적으로 지정합니다.스케줄러는 실행할 작업을 해제하기 전에 리소스를 미리 할당할 수 있습니다.이렇게 하면 작업 A가 리소스 R1을 보유하여 리소스 R2를 요구하는 동시에 작업 B가 리소스 R2를 보유하여 R1을 요청하는 "데드록"을 피할 수 있습니다.이러한 경우 유일한 해결책은 컴퓨터 운영자가 작업 중 하나를 종료하는 것입니다. 그러면 작업을 재시작해야 합니다.작업 제어를 사용하면 작업 A가 실행되도록 예약된 경우 작업 A가 완료되거나 필요한 리소스를 릴리스할 때까지 작업 B가 시작되지 않습니다.

DOS 및 OS JCL 공통 기능

작업, 절차 및 절차

DOS와 OS 모두에서 작업 단위는 작업입니다.작업은 하나 또는 여러 단계로 구성되며, 각 단계는 하나의 특정 프로그램을 실행하라는 요청입니다.예를 들어, 관계형 데이터베이스가 존재하기 전에 관리용 인쇄 보고서를 생성하는 작업은 다음 단계로 구성됩니다. 적절한 레코드를 선택하여 임시 파일에 복사하는 사용자 작성 프로그램, 일반적으로 범용 유틸리티를 사용하여 필요한 순서로 임시 파일을 정렬하는 사용자 작성 프로그램,최종사용자가 읽기 쉬운 방법으로 정보를 제시합니다.또, 서브 유저등의 유용한 정보도 포함되어 있습니다.또, 최종사용자의 정보의 선택된 페이지를, 모니터 또는 단말기에 표시하기 위해서, 유저가 작성한 프로그램도 포함되어 있습니다.

DOS 와 OS JCL 의 양쪽 모두에서, 최초의 「카드」는 JOB 카드여야 합니다.[8]이 카드는 다음과 같습니다.

  • 작업을 식별합니다.
  • 일반적으로 컴퓨터 서비스 부서에서 적절한 사용자 부서에 청구할 수 있는 정보를 제공합니다.
  • 작업 전체의 실행 방법(예: 대기열의 다른 작업에 대한 우선 순위)을 정의합니다.

프로시저(일반적으로 proc라고 함)는 스텝 또는 스텝 그룹에 대해 사전에 작성된 JCL로 작업에 삽입됩니다.두 JCL 모두 이러한 절차를 허용합니다.Proc는 한 작업 또는 여러 다른 작업에서 여러 번 사용되는 단계를 반복하는 데 사용됩니다.이를 통해 프로그래머의 시간을 절약하고 오류 위험을 줄일 수 있습니다.프로시저를 실행하려면 JCL 파일에 지정된 파일에서 프로시저를 복사하여 작업 스트림에 삽입하는 단일 "카드"를 포함하기만 하면 됩니다.또한 각 용도에 맞게 절차를 사용자 지정하는 매개 변수를 포함할 수 있습니다.

기본 구문

DOS/360과 OS/360이 처음 사용되었을 때 컴퓨터 시스템에 새로운 입력을 제공하는 주요 방법은 80개의 천공 [9]카드였기 때문에 DOS와 OS JCL의 최대 사용 가능한 행 길이는 80자입니다.나중에 레코드 길이가 긴 디스크나 테이프 파일을 통해 작업을 제출할 수 있게 되었지만 운영 체제의 작업 제출 구성 요소는 문자 80 이후의 모든 내용을 무시했습니다.

엄밀히 말하면 두 운영체제 패밀리는 한 줄에 71자만 사용합니다.문자 73 ~ 80 은, 통상, 시스템이 작업 종료시에 인쇄하는 카드 시퀀스 번호이며, operating system에 의해서 보고된 에러의 장소를 특정하는데 도움이 됩니다.문자 72는 보통 공백으로 두지만, JCL 문이 다음 카드로 계속됨을 나타내는 공백이 아닌 문자를 포함할 수 있습니다.

USS 파일 이름을 제외한 모든 명령, 매개 변수 이름 및 값은 대문자로 입력해야 합니다.

인스트림 입력(아래 참조)을 제외한 모든 행은 슬래시 "로 시작해야 합니다./operating system이 처리하는 모든 행은 2개의 슬래시로 시작해야 합니다.//- 항상 첫 번째 열부터 시작합니다.단, 딜리미터문과 코멘트문의 2가지 예외가 있습니다.딜리미터 문은 슬래시와 아스타리스크( )로 시작합니다./*OS JCL 의 코멘트 스테이트먼트는 슬래시와 아스타리스크( )의 쌍으로 시작합니다.//*또는 DOS JCL의 아스타리스크.

많은 JCL 문장은 71자 이내로 너무 길지만, 다음과 같이 무제한의 연속 카드로 확장할 수 있습니다.

OS JCL DOS JCL
구문에 쉼표가 필요한 시점에서 마지막 카드를 제외한 모든 실제 JCL 카드를 종료합니다( ).,) 구문에 쉼표가 필요한 시점에서 마지막 카드를 제외한 모든 실제 JCL 카드를 종료합니다( ).,) 및 72열에 공백이 아닌 문자를 입력합니다.
각 연속 카드 시작//1열, 1개 이상의 공백으로 표시됩니다. 각 연속 카드를 공백으로 시작하고 15열에 계속합니다.

가장 일반적인 유형의 카드 구조는 다음과 같습니다.[10]

OS JCL DOS JCL
  • //
  • 이 문의 이름 필드(다음)//간격을 두지 않고이 스테이트먼트에 이름이 없는 경우 적어도1개의 공백이 바로 뒤에 있습니다.//.
  • 공간
  • 전표유형
  • 공간
  • 파라미터는 스테이트먼트유형에 따라 다르며 콤마로 구분되며 공백은 없습니다.
  • //(이전 줄의 연속인 경우 공백)
  • 이 스테이트먼트의 스테이트먼트 타입은 다음과 같습니다.//간격을 두고
  • 공간
  • 자원명
  • 공간
  • 파라미터는 스테이트먼트유형에 따라 다르며 콤마로 구분되며 공백은 없습니다.위치 파라미터 뒤에 키워드 파라미터가 계속됩니다.

인스트림 입력

DOS와 OS JCL은 둘 다 운영 체제가 아닌 애플리케이션 프로그램에 의해 처리되는 인스트림 입력을 허용합니다.장기간 보관해야 하는 데이터는 보통 디스크에 저장되지만, 인터랙티브 단말기가 보편화되기 전에는 이러한 디스크 파일을 만들고 편집할 수 있는 유일한 방법은 카드에 새 데이터를 제공하는 것이었습니다.

DOS와 OS JCL은 인스트림 입력의 시작을 알리는 다른 방법을 가지고 있지만, 둘 다 인스트림 입력의 끝을/*마지막 인스트림 데이터 카드 뒤에 있는 카드의 1열에 표시됩니다.이것에 의해, operating system은, 다음에 카드내의 JCL 처리를 재개합니다./*카드를 클릭합니다.[11]

  • OS JCL: DD 문을 사용하여 인스트림 데이터 및 데이터 세트를 설명할 수 있습니다.인스트림 데이터를 취급하는 DD문은 DD 식별자 뒤에 별표(*)가 붙습니다.//SYSIN DD *DD DATA 문을 사용하면 JCL 문을 스트림 데이터의 일부로 포함할 수 있습니다.
DLM이라는 이름의 오퍼랜드에서 딜리미터를 지정할 수 있습니다(기본값은 "/*").대체 딜리미터를 지정하면 JCL을 데이터로서 읽을 수 있습니다.예를 들어 라이브러리 멤버에게 프로시저를 복사하거나 내부 리더에 작업을 송신할 수 있습니다.
  • [12]들어 내부 판독기(INTRDR)에 작업을 제출하고 두 개의 파일을 삭제하는 방법은 다음과 같습니다.
//서브미트     EXEC PGM=IEBGenerator //시스템 프린트DD시스템 출력=Z //SYSYSUT2DD시스템 출력=(A,내부) //시스템DD모조의 //시스템 1DD데이터.,DLM=ZZ //실행    ACCT,마닉스,학급=A.타이프룬=잡고 있어 //* ^ 나중에 실행할 작업 //CPUHOG   EXEC PGM=PILC1K //산출량DDDSN=피알시.1000DGTS,공간=(TRK,1),디스패치=(,지킨다) ZZ //* ^ (DLM=ZZ에서 지정) //드롭 EXEC PGM=IEFBR14 //삭제 4DDDSN=피알시.4DGTS,디스패치=(늙은,삭제) //삭제 5DDDSN=피알시.5DGTS,디스패치=(늙은,삭제) 
  1. PILC1K라는 프로그램이 수동으로 해제되기를 기다립니다(TYPRUN=HOLD).
  2. IEFBR14라는 프로그램이 지금 바로 실행되며 완료 시 기존 파일 2개, PILC.4가 실행됩니다.DGTS 및 PILC.5DGTS가 삭제됩니다.
  • DOS JCL: 프로그램의 EXEC 카드 뒤에 인스트림 데이터를 입력합니다.

복잡성

특히 OS JCL의 복잡성의 대부분은 데이터셋 정보를 지정하기 위한 수많은 옵션에서 비롯됩니다.Unix와 유사한 운영 체제 상의 파일은 대부분 운영 체제에서 처리되는 임의의 바이트 모음으로 추상화되지만 OS/360 및 그 이후의 데이터셋은 파일 유형과 크기, 레코드 유형과 길이, 블록 크기, 자기 테이프 밀도, 라벨 정보 등의 디바이스 고유 정보를 표시합니다.시스템 디폴트에는 많은 옵션이 있지만 JCL과 프로그램 내의 코드화된 정보의 조합을 통해 프로그래머가 지정해야 하는 것은 여전히 많습니다.프로그램의 정보가 JCL의 정보보다 우선하기 때문에 프로그램에서 코드화된 정보가 많을수록 유연성이 떨어집니다.따라서 대부분의 정보는 보통 JCL을 통해 제공됩니다.

예를 들어, Unix 운영 체제에서 파일복사하려면 다음과 같은 명령을 입력합니다.

cp old File new File

다음의 예에서는, JCL 를 사용해 OS/360 에 파일을 카피할 수 있습니다.

//IS198CPY  (IS198T30500),'복사 작업',학급=L,MSG클래스=X //카피01   EXEC PGM=IEBGenerator //시스템 프린트DD시스템 출력=* //시스템 1DDDSN=오래된 파일,디스패치=쉬르 //SYSYSUT2DDDSN=새로운 파일, //            디스패치=(신규,밧테루,삭제), //            공간=(실린더,(40,5),RLSE), //            DCB=(LRECL=115,점멸=1150) //시스템DD모조의 

JCL의 복잡성에 대한 두 번째 설명은 작업 실행에 대한 PC 또는 Unix와 유사한 환경에서 발견된 것과 다른 기대치입니다.

  • 로우엔드 시스템/360 CPU는 MS-DOS가 설계된 1980년대 중반 PC보다 성능이 떨어지고 가격이 비쌌습니다.OS/360은 최소 메모리 사이즈가 32KB인 시스템용으로, DOS/360은 최소 16KB인 시스템용으로 설계되어 있습니다.시스템/360이 1964년에 발표되었을 때 보급형이었던 360/30 CPU는 초당 [13]1.8K에서 34.5K의 명령을 처리했습니다.1981년 최초의 IBM PC는 16KB 또는 64KB의 메모리를 가지고 있었으며 초당 [14][15]약 33만 개의 명령을 처리할 수 있었습니다.그 결과 JCL은 컴퓨터가 쉽게 처리할 수 있어야 했고 프로그래머의 사용 편의성은 훨씬 낮은 우선순위에 있었습니다.이 시대에는 프로그래머가 컴퓨터보다 훨씬 저렴했다.
  • JCL은 배치 처리를 위해 설계되었습니다.따라서 단계 결과에 따라 어떻게 해야 하는지 등 운영체제에 모든 것을 지시해야 합니다.예를들면,DISP=(NEW,CATLG,DELETE)「프로그램이 정상적으로 실행되면, 새로운 파일을 작성해 카탈로그를 작성합니다.그렇지 않으면 새로운 파일을 삭제합니다.」를 의미합니다.PC 상에서 실행되는 프로그램은, 많은 경우, 문제를 처리한 후, 유저에 의해서 청소됩니다.
  • 시스템/360 머신은 조직 내 모든 사용자가 공유하도록 설계되었습니다.그래서...JOB사용자 계정에 과금하는 방법을 운영시스템에 지시합니다.IS198T30500할당할 수 있는 스토리지 및 기타 자원의 사전 정의된 양(CLASS=L기타 몇 가지 사항도 있습니다. //SYSPRINT DD SYSOUT=*에서는, 프로그램의 리포트를, 일반 용지가 로드되고 있는 디폴트 프린터로 인쇄하도록 지시합니다.백지 체크가 로드되어 있는 다른 프린터는 인쇄되지 않습니다. DISP=SHR운영 체제에 다른 프로그램이 읽을 수 있음을 알립니다.OLDFILE 동시에.

최신 버전의 DOS/360 및 OS/360 운영체제는 JCL의 대부분의 기능을 유지하고 있습니다.단, JCL 파일을 [citation needed]모두 다시 쓰는 것을 피하기 위해 약간의 단순화가 이루어졌습니다.많은 사용자가 절차로 한두 [16]번 이상 사용되는 JCL 문 세트를 저장합니다.

OS JCL의 구문은 System/360 어셈블리 언어의 매크로 구문과 비슷하기 때문에 많은 프로그램이 어셈블리 언어로 코딩되어 있던 당시에는 프로그래머에게 친숙했을 것입니다.

DOS JCL

위치 파라미터

//TLBL 테이프 파일, 카피 테이프.작업......2 //ASSGN SYS005,200 //DLBL 디스크 파일, 복사 테이프.작업', 0, SD //정도 SYS005,VOL01,1,0,800,1600 

DOS JCL 파라미터는 위치하기 때문에 읽기 및 쓰기가 어렵지만 시스템이 해석하기 쉬워집니다.

  • 프로그래머는 모든 유형의 문장에서 어떤 항목이 어떤 위치에 있는지 기억해야 합니다.
  • 일부 옵션 파라미터가 생략되어 있지만 이후 파라미터가 포함되는 경우 위의 TLBL 문과 같이 생략된 파라미터는 공백 없이 쉼표로 표현해야 합니다.

DOS JCL은 OS JCL보다 적은 파라미터로 더 많은 문을 사용함으로써 위치 파라미터의 어려움을 어느 정도 완화합니다.이 예에서는 ASSGN, DLBL 및 EXNT 문이 단일과 동일한 작업(새 Disk 파일을 저장할 위치 지정)을 수행합니다.DDOS JCL의 스테이트먼트.

디바이스 의존성

원래의 DOS/360 및 대부분의 DOS/VS 버전에서는 각 디스크 또는 테이프 파일에 사용되는 디바이스의 모델 번호를 지정해야 했습니다.기존 파일이나 작업 종료 시 삭제되는 임시 파일도 마찬가지입니다.즉, 고객이 보다 현대적인 기기로 업그레이드 할 경우 많은 JCL 파일을 변경해야 했습니다.

이후 DOS/360 패밀리의 구성원들은 장치 모델 번호가 필요한 상황의 수를 줄였습니다.

수동 파일 할당

DOS/360은 원래 프로그래머가 DASD 상의 모든 파일의 위치와 크기를 지정해야 했습니다.EXTENTcard는 익스텐트가 상주하는 볼륨, 시작 절대 트랙 및 트랙 수를 지정합니다.z/VSE의 경우 파일마다 서로 다른 볼륨에 최대 256개의 익스텐트를 가질 수 있습니다.

OS JCL

OS JCL은 다음 3가지 기본적인 [17]스테이트먼트로 구성됩니다.

  • JOB작업 시작 및 과금, 실행 우선순위, 시간 및 공간 제한 등의 작업 전체에 대한 정보를 나타냅니다.
  • EXEC스테이트먼트: 작업의 이 단계에서 실행할 프로그램 또는 절차[18] 식별합니다.
    스텝 실행 또는 건너뛰기 조건을 포함한 스텝에 대한 정보.
  • DD(Data Definition) 스테이트먼트: 스텝에서 사용할 데이터 파일 및 해당 파일에 대한 상세 정보를 식별합니다. DD스테이트먼트는 스텝 내에서 임의의 순서로 할 수 있습니다.

처음부터 OS 패밀리(z/OS까지 포함)용 JCL은 유연성이 높고 사용하기 쉬웠습니다.

다음 예제에서는 1964년 System/360 출시 직후 제공된 구문을 사용합니다.이 구문은 수십 년 동안 사소한 변경만으로 실행되어 온 작업에서는 여전히 매우 일반적입니다.

JCL 문 부호화 규칙

각 JCL 문은 5개의 [19]필드로 나뉩니다.

식별자 필드 이름 필드 조작 필드 매개 변수 필드 주석 필드 ^ ^ ^ 공간 공간 없음

Identifier-Field와 연결되어야 한다Name-Field즉, 둘 사이에 공백이 없어야 합니다.

  • Identifier-Field(//): ID 필드는 스테이트먼트가 데이터가 아닌 JCL 스테이트먼트임을 시스템에 나타냅니다.식별자 필드는 다음과 같이 구성됩니다.
    • 딜리미터 문을 제외한 모든 JCL 문의 열 1과 2에는 다음이 포함됩니다.//
    • 구분자 문의 열 1과 2에는 다음이 포함됩니다./*
    • JCL 코멘트 스테이트먼트의 1, 2, 3열에는 다음이 포함됩니다.//*
  • Name-Field: name 필드는 다른 문장과 시스템이 참조할 수 있도록 특정 문을 식별합니다.JCL 문의 경우 다음과 같이 코드화해야 합니다.
    • 이름은 열 3에서 시작해야 합니다.
    • 이름은 1~8 영숫자 또는 국가($,#,@)의 문자.
    • 첫 번째 문자는 알파벳이어야 합니다.
    • 이름 뒤에 하나 이상의 공백이 있어야 합니다.
  • Operation-Field: operation 필드에는 문의 유형을 지정합니다.명령문의 경우 명령어를 지정합니다. Operation-Field는 다음과 같이 코드화되어야 합니다.
    • 조작 필드는 문의 구문 상자 내의 문자로 구성됩니다.
    • 조작은 이름 필드에 이어집니다.
    • 작업은 하나 이상의 공백 뒤에 선행되어야 합니다.
    • 이 작업은 다음 중 하나가 됩니다.JOB,EXEC그리고.DD.
  • Parameter-Field: 파라미터 필드(operand 필드라고도 함)에는 쉼표로 구분된 파라미터가 포함되어 있습니다.파라미터 필드는 다음과 같이 코드화해야 합니다.
    • 매개 변수 필드는 작업 필드 뒤에 있습니다.
    • 매개 변수 필드 앞에 하나 이상의 공백이 있어야 합니다.
    • 매개 변수 필드에는 프로그램 또는 데이터 세트 이름과 같은 정보를 제공하기 위해 문에서 사용된 키워드인 매개 변수가 포함됩니다.
  • Comments-Field: 코멘트가 포함되어 있습니다. Comments-Field다음과 같이 코드화해야 합니다.
    • comments 필드는 파라미터 필드 뒤에 있습니다.
    • 코멘트 필드에는 적어도1개의 공백이 필요합니다.

키워드 파라미터

//새로운 파일DDDSN=MYFILE01,구성 단위=디스크,공간=(TRK,80,10), //           DCB=(LRECL=100,점멸=1000), //           디스패치=(신규,밧테루,삭제) 

OS JCL 문의 주요 파라미터는 모두 키워드로 식별되며 임의의 순서로 표시할 수 있습니다.이들 중 일부에는 다음과 같은 두 개 이상의 하위 파라미터가 포함되어 있습니다.SPACE(새 파일에 할당하는 디스크 영역의 크기)와DCB(파일 레이아웃의 사양 변경)을 참조해 주세요.하위 파라미터가 다음과 같이 위치할 수 있습니다.SPACE단, 가장 복잡한 파라미터는 다음과 같습니다.DCB키워드 서브 파라미터가 있습니다.

키워드 파라미터 앞에 위치 파라미터가 있어야 합니다.키워드 파라미터는 항상 등호( )를 사용하여 키워드에 값을 할당합니다.=를 참조해 주세요.[20]

데이터 액세스(DD 문)

DD스테이트먼트를 사용하여 데이터를 참조합니다.이 스테이트먼트는, 프로그램의 데이터 세트에 대한 내부 설명을, 디스크, 테이프, 카드, 프린터등의 외부 디바이스상의 데이터에 링크 합니다.DD는 디바이스 유형(예: '181', '2400-5') 등의 정보를 제공할 수 있습니다.테이프 또는 디스크의 볼륨 일련 번호 및 데이터 파일의 설명('TAPE')DCB파일 식별에 사용되는 프로그램에서 데이터 제어 블록(DCB) 에 있는 하위 매개 변수.

파일을 설명하는 정보는 다음 3가지 소스로부터 얻을 수 있습니다.DD 카드 정보, 테이프 또는 디스크에 저장된 기존 파일의 데이터 세트 레이블 정보 및 프로그램에서 코드화된 DCB 매크로.파일이 열리면 이 데이터가 Marge되고 DD 정보가 라벨 정보보다 우선하며 DCB 정보가 양쪽 정보보다 우선합니다.그런 다음 업데이트된 설명이 데이터 세트 레이블에 다시 기록됩니다.이로 인해 잘못된 DCB 정보가 제공될 [21]경우 의도하지 않은 결과가 발생할 수 있습니다.

위의 파라미터와 다양한 접근방법 및 디바이스에 대한 특정 정보 때문에 DD 문은 가장 복잡한 JCL 문입니다.IBM의 한 레퍼런스 매뉴얼 설명서에서 DD 문장은 JOB 문장과 EXEC 문장을 [22]합친 것보다 두 배 이상 많은 130페이지 이상을 차지합니다.

DD 문을 사용하면 인라인 데이터를 작업 스트림에 삽입할 수 있습니다.이것은 IDCAMS, SORT 등의 유틸리티에 제어 정보를 제공할 뿐만 아니라 프로그램에 입력 데이터를 제공할 때 유용합니다.

디바이스의 독립성

처음부터 OS 패밀리용 JCL은 높은 수준의 디바이스 독립성을 제공했습니다.작업 종료 후 보관해야 하는 새 파일의 경우에도 다음과 같은 일반적인 용어로 장치 유형을 지정할 수 있습니다.UNIT=DISK,UNIT=TAPE, 또는UNIT=SYSSQ(하드웨어 또는 디스크).물론 중요한 경우 모델 번호나 특정 장치 [23]주소를 지정할 수 있습니다.

절차들

절차에서는 하나 이상의 "EXEC PGM=" 및 DD 문을 그룹화한 다음 "EXEC PROC=" 또는 단순히 "EXEC Procname"으로 호출할 수 있습니다.

프로시저 라이브러리라고 불리는 시설은 사전 보관 절차를 허용했다.

PROC & PEND

프로시저를 작업스트림에 포함할 수도 있습니다.// PEND이름에서 호출하는 것은 마치 프로시저 라이브러리에 있는 것과 같습니다.

예를 들어 다음과 같습니다.

//섬프린트프로세서 //인쇄하다    EXEC PGM=IEBGenerator //시스템 1DDDSN=최고경영자.파일.데이엔드.RPT24A,디스패치=쉬르 //SYSYSUT2DD시스템 출력=A //시스템DD모조의 //         펜드 // EXEC 섬프린트 

파라미터화된 프로시저

OS JCL 프로시저는 처음부터 파라미터화 되어 매크로나 단순한 서브루틴과 같이 되어 다양한 [25]상황에서 재사용성이 향상되었습니다.

//마이프로크프로세서이름=MYFILE01,SPType=TRK,회전하다=50,스피커=10,LR=100,BLK=1000 ..... //새로운 파일DDDSN=&이름,구성 단위=디스크,공간=(&SPType,&회전하다,&스피커), //           DCB=(LRECL=&LR,점멸=&BLK),디스패치=(신규,밧테루,삭제) .... 

이 예에서는 앰퍼샌드로 시작하는 모든 값이&"는 작업이 프로시저의 사용을 요구할 때 지정되는 파라미터입니다.프로시저에 이름을 붙일 뿐만 아니라 프로그래머는 각 파라미터의 기본값을 지정할 수 있습니다.따라서 이 예제의 한 가지 절차를 사용하여 다양한 크기와 레이아웃의 새 파일을 만들 수 있습니다.예를 들어 다음과 같습니다.

//JOB01   .......... //스텝 01 EXEC 마이프로크 FNAME=JOESFILE, SPTYPE=SYPT, SPINIT=10, SPEXT=2,LR=100,BLK=2000 또는 //작업02   .......... //스텝 01 EXEC 마이프로크 FNAME=SUESFILE,SPTYPE=TRK,SPINIT=500,SPEXT=100,LR=100,BLK=표준 

레퍼백

다단계 작업에서는 이전 단계에서 이미 지정된 파일을 완전히 지정하는 대신 이후 단계에서 참조를 사용할 수 있습니다.예를 들어 다음과 같습니다.

//마이프로크 ................ //MYPR01 EXEC PGM=.......... //새로운 파일DDDSN=&마이파일,구성 단위=디스크,공간=(TRK,50,10), //           DCB=(LRECL=100,점멸=1000),디스패치=(신규,밧테루,삭제) .... //MYPR02 EXEC PGM=.......... //입력 01DDDSN=*.MYPR01.새로운 파일 

여기서,MYPR02로 식별된 파일을 사용합니다.NEWFILE보조를 맞추어MYPR01(DSN는 "데이터셋 이름"을 의미하며 파일 이름을 지정합니다.DSN은 44자를[26] 초과할 수 없습니다.

작업 고유의 JCL과 프로시저 콜이 혼재하는 작업의 경우, 작업 고유의 스텝은 프로시저에서 완전히 지정된 파일을 참조할 수 있습니다.다음은 예를 제시하겠습니다.

//마이잡  .......... //스텝 01 EXEC 마이프로크             순서 사용 //스텝 02 EXEC PGM=.........      이 작업에 고유한 단계 //입력 01DDDSN=*.스텝 01.MYPR01.새로운 파일 

어디에DSN=*.STEP01.MYPR01.NEWFILE"파일 사용"을 의미합니다.NEWFILE보조를 맞추어MYPR01단계별로 사용되는 절차의STEP01이 직업에 대해서요.프로시저의 이름이 아닌 프로시저를 호출한 스텝의 이름을 사용하면 프로그래머는 레퍼백에서 프로시저의 어떤 인스턴스가 사용되는지 혼동하지 않고 같은 작업에서 동일한 프로시저를 여러 번 사용할 수 있습니다.

평.

JCL 파일은 길고 복잡할 수 있으며 언어를 읽기 쉽지 않습니다.OS JCL 에서는, 프로그래머가 다음의 2 종류의 설명 코멘트를 포함할 수 있습니다.

  • JCL 문과 같은 행에 있습니다.연속 문자를 배치하여 확장할 수 있습니다(통상은 " ").X72열에 ") 뒤에 "가 붙습니다.// "를 다음 줄의 1~3열에 입력합니다.
  • 코멘트만을 포함한 행.로컬 상세보다는 JCL의 전체적인 구조에 관한 주요 포인트를 설명하는 데 자주 사용됩니다.코멘트 전용 행은 길고 복잡한 JCL 파일을 섹션으로 분할할 때도 사용됩니다.
//마이잡  .......... //* 코멘트만 포함된 행. //******* JCL 목록을 섹션으로 분할할 때 자주 사용됩니다********** //스텝 01 EXEC 마이프로크             스테이트먼트와 같은 행의 코멘트 2 //스텝 02 EXEC PGM=.........      코멘트 3이 연장되어 X가 되었습니다. //         오버플로우 다른 행으로. //입력 01DDDSN=스텝 01.MYPR01.새로운 파일 

입력 파일 연결 중

OS JCL을 사용하면 프로그래머가 입력 파일을 하나의 파일로 표시하도록 연결("체인")할 수 있습니다.

//입력 01DDDSN=MYFILE01,디스패치=쉬르 //        DD DSN=JOESFILE,DISP=ShR //        DD DSN=SUESFILE,DISP=ShR 

두 번째 문과 세 번째 문에는 이름 필드에 값이 없으므로 OS는 이들을 연결로 간주합니다.파일은 같은 기본 유형(거의 항상 순차적)이어야 하며 레코드 길이가 같아야 하지만 블록 길이가 같을 필요는 없습니다.

OS의 초기 버전(특히 OS/360 R21.8 이전)에서는 블록 길이가 내림차순이어야 합니다.또는 사용자는 각 인스턴스를 검사하여 다음과 같이 지정된 DD 문에 최대 블록 길이를 추가해야 합니다.

//입력 01DDDSN=MYFILE01,디스패치=쉬르,점멸=800 //        DD DSN=JOESFILE,DISP=SR(BLKSIZE는 800 이하인 것으로 간주) //        DD DSN=SUESFILE,DISP=SR(BLKSIZE는 800 이하인 것으로 간주) 

OS의 새로운 버전(적절한 「선택 가능한 유닛」을 갖춘 OS/MVS R3.7 이후)에서는, 할당중에 OS 자체가 각 인스턴스를 검사해, 발견된 블록의 최대 길이를 대체했습니다.

일반적인 폴백은 디바이스에서 가능한 최대 블록 길이를 판별하고, 예를 들어 다음과 같이 이름 있는 DD 문으로 지정하는 것입니다.

//입력 01DDDSN=MYFILE01,디스패치=쉬르,점멸=8000 //        DD DSN=JOESFILE,DISP=SR(BLKSIZE는 8000 이하인 것으로 간주) //        DD DSN=SUESFILE,DISP=SR(BLKSIZE는 8000 이하인 것으로 간주) 

이 폴백의 목적은 액세스 방식이 지정된 모든 데이터 세트를 수용하기에 충분한 크기의 입력 버퍼 세트를 할당하는 것입니다.

조건부 처리

OS는 프로그램이 얼마나 성공적이었는지를 나타내는 반환 코드를 설정해 줄 것을 기대하고 있습니다.가장 일반적인 일반 [27]: p.87 값은 다음과 같습니다.

  • 0 = 정상 - 모두 정상
  • 4 = 경고 - 사소한 오류 또는 문제
  • 8 = 오류 - 중대한 오류 또는 문제
  • 12 = 심각한 오류 - 중대한 오류 또는 문제, 결과(예: 생성된 파일 또는 보고서)를 신뢰할 수 없습니다.
  • 16 = 터미널 오류 - 매우 심각한 문제, 결과를 사용하지 마십시오!

OS JCL은 반환 코드를 다음과 같이 나타냅니다.COND("condition code") 및 이를 사용하여 후속 단계를 실행할지 여부를 결정할 수 있습니다.그러나 대부분의 최신 프로그래밍 언어와는 달리 OS JCL의 조건부 스텝은 지정된 조건이 참일 경우 실행되지 않으므로 "참일 경우 [코드를 실행하지 않고 전달하십시오."라는 니모닉이 발생합니다.문제를 더욱 복잡하게 만드는 것은 조건이 참조되는 단계 이후에만 지정할 수 있다는 것입니다.예를 들어 다음과 같습니다.

//마이잡  ........... //스텝 01 EXEC PGM=PROG01 .... //스텝 02 EXEC PGM=PROG02,상태=(4,GT,스텝 01) .... //스텝 03 EXEC PGM=PROG03,상태=(8,LE) .... //순서 04 EXEC PGM=PROG04,상태=(오직.,스텝 01) .... //스텝 05 EXEC PGM=PROG05,상태=(심지어.,스텝 03) .... 

다음을 의미합니다.

  1. 달려.STEP01반환 코드를 수집합니다.
  2. 뛰지 마세요STEP02숫자 4가 보다 클 경우STEP01의 리턴 코드입니다.
  3. 뛰지 마세요STEP03숫자 8이 이전 리턴 코드보다 작거나 같은 경우.
  4. 달려.STEP04이 경우에만STEP01비정상적으로 종료되었습니다.
  5. 달려.STEP05,라 할지라도STEP03비정상적으로 종료되었습니다.

이것은, 다음의 의사 코드로 변환됩니다.

STEP01의 리턴 코드4 이상이면 STEP01을 실행하고, 이전 리턴 코드8 미만이면 STEP02 end를 실행하고, STEP01이 비정상적으로 종료되면 STEP04 end를 실행하고, STEP03이 비정상적으로 종료되면 STEP05 end를 실행하고, 그렇지 않으면 STEP05 end를 실행합니다.

다음을 포함하는 단계를 읽음으로써COND거꾸로 말하면 꽤 쉽게 이해할 수 있습니다.이것은 논리적인 전이의 입니다.그러나, IBM은 나중에 IF 조건을 JCL에 도입하여 프로그래머를 위한 코딩이 다소 쉬워지도록 하고, 동시에,COND파라미터(기존 JCL을 변경하지 않도록 하기 위해)COND parm사용되고 있습니다).

COND파라미터는 다음 명령어에서도 지정할 수 있습니다.JOB진술.이 경우 시스템은 "작업의 모든 단계에 대해 동일한 리턴 코드 테스트를 수행합니다.JOB 문의 리턴 코드 테스트가 충족되면 작업이 종료됩니다."[28]

유틸리티

작업은 여러 IBM 유틸리티 프로그램을 사용하여 데이터 처리를 지원합니다.유틸리티는 배치 처리에 가장 유용합니다.유틸리티는 3개의 세트로 그룹화할 수 있습니다.

  • 데이터 세트 유틸리티 - 데이터 세트를 생성, 인쇄, 복사, 이동 및 삭제합니다.
  • 시스템 유틸리티 - 카탈로그 및 기타 시스템 정보를 유지 및 관리합니다.
  • 액세스 방법 서비스 - 가상 스토리지 액세스 방법(VSAM) 및 비VSAM 데이터 세트를 처리합니다.

사용의 어려움

OS JCL은 부정할 수 없을 정도로[29] 복잡하며 "사용자 적대적"[30][31]으로 묘사되어 왔습니다.JCL에 관한 한 지침서에서 "왜 고급 프로그래머도 직무 제어 언어에 관해 주저하는가?"라고 묻습니다.[32]이 책은 많은 프로그래머들이 자신들이 한 일을 제대로 이해하지 못한 채 컨트롤 카드를 복사했거나, "JCL이 끔찍하다는 소문이 널리 퍼졌고, 오직 '다이하드' 컴퓨터 유형만이 그것을 이해했다"며,[32] JCL의 문구를 알아내는 작업을 다른 사람에게 넘겼다고 진술했다.이러한 태도는 프로그래밍 언어 교과서에서 찾아볼 수 있는데, 프로그래밍 언어 교과서는 언어 자체의 프로그램이 어떻게 운영되는지가 아니라 언어 자체에 초점을 맞추는 것을 선호한다.WATFOR 컴파일러의 오류 메시지를 나열할 때 한 Fortran IV 교과서에서 말했듯이, "자신의 'DD' 시스템 제어 카드를 쓰려고 할 정도로 어리석었습니까?당장 그만두고, 뛰어가라,[33] 걷지 말고, 도움을 청하라.

그럼에도 불구하고 JCL에 대한 자세한 내용은 JCL을 학습한 일부 책에 따르면 JCL을 최소한 어느 정도 익히면 설치 전반에 걸친 기본값에서 벗어나 IBM 시스템이 작업 [32][29]부하를 처리하는 방법을 훨씬 더 잘 제어할 수 있다고 강조했습니다.또 다른 책은 복잡성에 대해 언급했지만 "힘내세요.[앞의 장]에서 얻을 수 있는 JCL 기능은 대부분의 프로그래머가 [29]필요로 하는 모든 것입니다."

작업 항목 제어 언어

IBM 메인프레임 시스템에서 JECL(Job Entry Control Language)은 z/OSJES2 또는 JES3 또는 z/VSE의 VSE/POWER와 같은 스풀링 하위 시스템에 대한 정보를 제공하는 명령어 제어 문 집합입니다. JECL 문은 "작업을 실행할 네트워크 컴퓨터에서 언제 실행할 것인지,[27] 그리고 그 결과를 어디로 보낼 것인지 지정할 수 있습니다."

JECL은 운영 체제에 작업 실행 방법을 지시하는 JCL(Job Control Language)과는 다릅니다.

JECL에는 3가지 환경에 대해 다른 버전이 있습니다.

OS/360

OS/360 Remote Job Entry용 Job Entry Control Language의 초기 버전(프로그램 번호 360S-RC-536)에서는 식별자가 사용되었습니다...입력 기록의 1 ~ 2열에 포함되며 단일 제어문으로 구성됩니다.JED(작업 항목 정의).다음과 같은 "워크스테이션 명령어"LOGON,LOGOFF,그리고.STATUS로도 시작되었다...를 클릭합니다.[34]

JES JECL 이전

이 용어는 아직 개발되지 않았지만, HASPJES의 JECL이 되는 것과 유사한 기능을 가지고 있었습니다./*구문을 사용합니다.

z/OS

JES2 JECL 문의 경우,/*, JES3의 경우 첫 번째가//*(리모트 제외)/*SIGNON그리고./*SIGNOFF명령어를 지정합니다.두 시스템의 명령어는 완전히 다릅니다.

JES2 JECL

다음 JES2 JECL 문은 z/OS 1.2.[35]0에서 사용됩니다.

JECL 스테이트먼트 기능.
/*$command 연산자(콘솔) 명령어를 입력합니다. /*$S PRINTER3[36]
/*JOBPARM 작업 관련 매개 변수의 값을 지정합니다. /*JOBPARM TIME=10
/*MESSAGE 오퍼레이터 콘솔에 메시지를 보냅니다. /*MESSAGE CALL JOE AT HOME IF JOB ABENDS
/*NETACCT 네트워크 작업의 계정 번호를 지정합니다. /*NETACCT 12345
/*NOTIFY 통지 메시지의 수신처를 지정합니다. /*NOTIFY SAM
/*OUTPUT SYSOUT 데이터 세트 옵션을 지정합니다. /*OUTPUT FORMS=BILL
/*PRIORITY 작업 선택 우선 순위 설정 /*PRIORITY 15
/*ROUTE 출력처 또는 실행 노드를 지정합니다. /*ROUTE PRT RMT5
/*SETUP 볼륨 마운트 또는 기타 오프라인 작업 요청 /*SETUP TAPE01,TAPE02
/*SIGNOFF 원격 세션을 종료합니다. /*SIGNOFF
/*SIGNON 원격 세션을 시작합니다. /*SIGNON REMOTE5 password
/*XEQ 실행 노드를 지정합니다. /*XEQ DENVER
/*XMIT 작업 또는 데이터 세트를 다른 네트워크 노드로 전송함을 나타냅니다. /*XMIT NYC

JES3 JECL

다음 JES3 JECL 문은 z/OS 1.2.0에서[37] 사용됩니다.

JECL 스테이트먼트 기능.
//**command JES3 연산자(콘솔) 명령어를 입력합니다.
//*DATASET 인스트림 데이터 세트의 시작을 표시합니다.
//*ENDDATASET 인스트림 데이터 세트의 끝을 표시합니다.
//*ENDPROCESS 시리즈가 종료됩니다.//*PROCESS진술들
//*FORMAT 지정하다SYSOUT데이터 세트 옵션
//*MAIN 작업 관련 매개 변수의 값을 지정합니다.
//*NET JES3 종속 작업 제어를 사용하여 작업 간의 관계를 식별합니다.
//*NETACCT 네트워크 작업의 계정 번호를 지정합니다.
//*OPERATOR 오퍼레이터 콘솔에 메시지를 보냅니다.
//*PAUSE 입력 판독기를 정지합니다.
//*PROCESS 비표준 작업을 식별합니다.
//*ROUTE 작업의 실행 노드를 지정합니다.
/*SIGNOFF 원격 세션을 종료합니다. /*SIGNOFF
/*SIGNON 원격 세션을 시작합니다.

z/VSE

VSE JECL 스테이트먼트의 경우는, 「」로 시작합니다.* $(단일 공백에 주의해 주세요.Job Entry Control Language는 JCL 작업의 시작 및 끝 줄을 정의합니다.VSE/POWER에게 이 작업의 처리 방법을 알려줍니다.JECL 문은 작업 이름(VSE/POWER에서 사용), 작업이 처리되는 클래스 및 작업의 배치(즉,D,L,K,H).

JECL[38] 스테이트먼트 기능.
* $ CTL 기본 입력 클래스를 설정합니다. * $ CTL CLASS=A
* $ JOB 작업의 속성을 지정합니다. * $ JOB JNM=PYRL,PRI=9
* $ EOJ 작업의 종료를 표시합니다. * $ EOJ
* $ RDR 3540 디스켓의 파일을 입력 스트림에 삽입합니다. * $ RDR SYS005,'fname',2
* $ PRT 스풀된 인쇄 파일의 특성을 지정합니다.
"LST"는 "PRT"의 동의어입니다.
* $ PRT FNO=STD,COPY=2
* $ PUN 스풀링된 펀치 파일의 특성을 지정합니다. * $ PUN DISP=T,TADDR=280
* $ SLI 소스 문 라이브러리의 데이터("book")를 입력 스트림에 삽입합니다. * $ SLI A.JCL1
* $ DATA 카드 리더의 데이터를 소스 스테이트먼트 라이브러리에서 검색된 장부에 삽입합니다. * $ DATA INPUT1

예:

* $ JOB JNM=NAME,DISP=K,CLASS=2  [여기 JCL 스테이트먼트]  * $ EOJ 

기타 시스템

다른 메인프레임 배치 시스템은 작업 제어 언어의 형태를 가지고 있었습니다. 구문은 IBM 버전과 완전히 달랐지만 대개 유사한 기능을 제공했습니다.인터랙티브 시스템에는 "명령어"가 포함되어 있습니다.명령어 파일(PCDOS ".bat" 파일 등)은 인터랙티브하게 실행할 수 있지만 일반적으로 JCL만큼 강력한 무인 작업 실행 환경을 제공하지 않습니다.일부 컴퓨터 시스템에서는 작업 제어 언어와 대화형 명령어가 다를 수 있습니다.예를 들어, z/OS 시스템의 TSO는 배치 작업을 위해 JCL과 함께 CLIST 또는 Rexx를 명령 언어로 사용합니다.다른 시스템에서도 같은 경우가 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "실행을 위해 제출된 모든 작업에는 JCL 문이 포함되어야 합니다." -- ibm.com
  2. ^ 파일 유지 또는 삭제 여부, 확장할 수 있는 최대 디스크 공간, 프리마운트되는 테이프 이름 등 더 복잡한 세부 사항도 있습니다.
  3. ^ Ashley와 Fernandez, 직업 제어 언어, 페이지 1
  4. ^ 애슐리와 페르난데스, 직업 제어 언어, 5페이지
  5. ^ McQuillen, System/360–370 Assembler Language, 페이지 385–386.
  6. ^ a b McQuillen, System/360–370 Assembler Language, 페이지 288–289, 400.
  7. ^ McQuillen, System/360–370 Assembler Language, 페이지 22–24.
  8. ^ McQuillen, System/360–370 Assembler Language, 페이지 380–382.
  9. ^ 스턴과 스턴, 구조 코볼 프로그래밍, 페이지 528–529.
  10. ^ Stern and Stern, Structured COBOL Programming, 페이지 529, 531.
  11. ^ Stern and Stern, Structured COBOL Programming, 페이지 529, 537.
  12. ^ IBM에서 Green Cards가 나왔을 때의 지식을 사용하여 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,을 모델로 삼았으며, Manix는 IBM 카드 정렬기를 소유한 회사에서 근무했습니다.
  13. ^ "IBM Archives: System/360 Model 30". www-03.ibm.com. 2003-01-23. Retrieved 2016-04-25.
  14. ^ IBM PC
  15. ^ 2007년 8월 14일 웨이백 머신에 보관된 IBM 호환 컴퓨터의 PC 기록
  16. ^ Brown, Gary DeWard (2002). zOS JCL (fifth ed.). John Wiley & Sons. p. 248. ISBN 0471-236357.
  17. ^ 애슐리와 페르난데스, 직업 제어 언어, 페이지 8, 23.JCL 절차를 테스트하기 위해 PROC와 PEND라는 두 개의 추가 문도 있습니다.
  18. ^ 매개 변수화할 수 있는 "EXEC PGM=" 및 "DD" JCL 명령의 사전 수정 세트
  19. ^ Ashley와 Fernandez, Job Control Language, 페이지 12-16.
  20. ^ Ashley와 Fernandez, Job Control Language, 13-15페이지.
  21. ^ IBM Corporation (August 1978). OS/VS MVS Data Management Services Guide (PDF). Retrieved Oct 17, 2014.
  22. ^ IBM Corporation (June 1971). IBM System/360 Operating System: Job Control Language Reference (PDF). Retrieved June 25, 2019.
  23. ^ McQuillen, System/360–370 Assembler Language, 페이지 297, 406–407.
  24. ^ EXEC 문의 기본값은 PROC=입니다.
  25. ^ 애슐리와 페르난데스, 직업 제어 언어, 페이지 129–131.
  26. ^ "Data set names". Data set names must not exceed 44 characters, including all name segments and periods.
  27. ^ a b Brown, Gary DeWard (2002). zOS JCL. John Wiley & Sons. ISBN 9780471426738. Retrieved 2014-05-05.
  28. ^ IBM Corporation. "Relationship of the COND parameters on JOB and EXEC statements". IBM Knowledge Center. Retrieved Feb 21, 2018.
  29. ^ a b c McQuillen, System/360–370 Assembler Language, 페이지 406–407.
  30. ^ Charley, Alfred (1993). NetView: IBM's Network Management Product. New York: Van Nostrand Reinhold. p. 93. ISBN 0-442-01407-4.
  31. ^ 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...). {{cite web}}:외부 링크 quote=(도움말)
  32. ^ a b c Ashley와 Fernandez, Job Control Language, 페이지 7~8, 뒷표지.
  33. ^ 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.
  34. ^ IBM Corporation (1968). IBM System/360 Operating System Remote Job Entry (PDF). Retrieved 2014-05-05.
  35. ^ IBM Corporation. "Job Entry Subsystem 2 (JES2) Control Statements". z/OS V1R2.0 MVS JCL. Retrieved February 25, 2013.
  36. ^ 기타 예는 Houston Automatic Spooling Priority #Operator 명령에서 확인할 수 있습니다.
  37. ^ IBM Corporation. "Job Entry Subsystem 3 (JES3) Control Statements". z/OS V1R2.0 MVS JCL. Retrieved February 25, 2013.
  38. ^ IBM Corporation (1974). DOS/VS POWER/VS Installation and Operations (PDF).

원천