작업 제어 언어: 두 판 사이의 차이

내용 삭제됨 내용 추가됨
Metrobot (토론 | 기여)
잔글 ISBN 매직 링크 제거
편집 요약 없음
47번째 줄:
cp oldFile newFile
[[OS/360]] 계열에서는 다음과 같다
<source lang="jcl">
<code>
//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]]
</codesource>
시스템/360과 PC 환경의 차이는 다음과 같다:
* 저사양의 시스템/360 CPU는 1980년대 중반 PC보다 성능이 낮고 값은 더 비쌌다. [[OS/360]]은 최소 32 KB의 메모리가 장착된 시스템에 맞게 고안되었고 [[DOS/360]]의 경우 최소 16KB의 메모리가 장착된 시스템에 맞게 고안되었다. 360/30 CPU (1964년 시스템/360이 발표된 시기에는 저사양)는 초당 5K에서 13K 개의 명령을 처리하였다.<ref name="uarkMIPS">[http://listserv.uark.edu/scripts/wa.exe?A2=ind0404&L=vmesa-l&P=34608 CPU MIPS ratings]</ref> 최초의 [[IBM PC]] (1981년의 모델 [[IBM 5150|5150]])는 16KB 또는 64KB의 메모리를 갖추고 있었고 초당 약 330,000개의 명령을 처리했다.<ref name="vintageComputerIBMPC">[http://www.vintage-computer.com/ibm_pc.shtml IBM PC]</ref><ref name="iathVirginiaEduPCs">[http://www3.iath.virginia.edu/elab/hfl0108.html IBM-compatible computers] History of PCs</ref> 그 결과 JCL은 컴퓨터가 처리하기 쉬워야 했고 프로그래머들이 쉽게 사용할 수 있는지에 대한 우선 순위는 매우 낮았다. 이 시기에 프로그래머들에 들이는 비용은 컴퓨터 보다 값이 더 저렴했다.
65번째 줄:
== 도스 JCL ==
=== 위치 매개변수 ===
<source lang="jcl">
<code>
// TLBL TAPEFIL,'COPYTAPE.JOB',,,,2
// ASSGN SYS005,DISK,VOL=VOL01,SHR
// DLBL DISKFIL,'COPYTAPE.JOB',0,SD
// EXTENT SYS005,VOL01,1,0,800,1600
</codesource>
도스 JCL에서 매개변수들은 위치성을 지니므로 읽고 쓰기를 더 어렵게 만든다:
* 프로그래머는 어느 항목이 어느 위치로 어떠한 종류의 문으로 이동하는지 기억해야 한다.
124번째 줄:
 
=== 키워드 매개변수 ===
<source lang="jcl">
<code>
//NEWFILE DD DSN=MYFILE01,UNIT=DISK,SPACE=(TRK,80,10),
// DCB=(LRECL=100,BLKSIZE=1000),
// DISP=(NEW,CATLG,DELETE)
</codesource>
 
OS JCL의 모든 주요 매개변수들은 키워드로 식별되며 어떠한 순서로도 표현이 가능하다. 이 중 일부는 위의 예시처럼 SPACE(새로운 파일에 얼마나 많은 디스크 공간을 할당할 것인지), DCB(파일의 레이아웃의 자세한 사양)와 같은 둘 이상의 하부 매개변수를 포함할 수 있다. 하부 매개변수들은 SPACE에서처럼 가끔 위치성을 띄지만 DCB와 같은 가장 복잡한 매개변수들은 키워드 하부 매개변수가 있다.
139번째 줄:
=== 매개변수화된 프로시저 ===
OS JCL 프로시저는 처음부터 매개변수화되었으며 마치 [[어셈블리어|매크로]]나 단순 [[함수 (프로그래밍)|함수]]처럼 만들어준다. 이로써 재사용성을 다양한 환경에서 증대시킨다.
<source lang="jcl">
<code>
//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)
....
</codesource>
이 예제에서 &로 시작하는 모든 값들은 잡이 프로시저 사용을 요청할 때 지정될 매개변수들이다.
 
PROC 문은 프로시저에 이름을 줄 뿐만 아니라, 프로그래머가 각각의 매개변수에 대한 기본값을 지정할 수 있게 한다. 그래서 이 예제에서는 하나의 프로세서를 가지고 다양한 크기와 레이아웃의 파일들을 새로 만들어낸다. 이를테면:
<source lang="jcl">
<code>
//JOB01 JOB ..........
//STEP01 EXEC MYPROC FNAME=JOESFILE,SPTYPE=CYL,SPINIT=10,SPEXT=2,LR=100,BLK=2000
</source>
또는
<source lang="jcl">
//JOB02 JOB ..........
//STEP01 EXEC MYPROC FNAME=SUESFILE,SPTYPE=TRK,SPINIT=500,SPEXT=100,LR=100,BLK=5000
</code>
</source>
 
=== 오버라이드 기능 ===
OS는 프로그램들이 포함할 수 있는 파일 구조의 사양 중 일부를 JCL에 오버라이드할 수 있게 한다. 이 기능은 대개 새로운 파일들을 만드는데 사용된다. 이를테면:
<source lang="jcl">
<code>
//STEP01 EXEC PGM=MYPROG
//NEWFILE DD DSN=MYFILE01,UNIT=DISK,SPACE=(TRK,50,10),DCB=BLKSIZE=1000,
// DISP=(NEW,CATLG,DELETE)
</codesource>
프로그램 MYPROG 내의 코드가 블록 크기를 특정하더라도 새로운 파일이 1000 바이트의 [[블록 (컴퓨팅)|블록 크기]]를 가질 것이다. 그러므로 프로그램 MYPROG를 변경할 필요가 없다. 한편 이 예제는 DCB의 하부 매개변수 LRECL (레코드 길이)를 지정하지 않고 있으므로 레코드 길이는 MYPROG이 제시하는 바대로 결정된다.
 
=== 재조회 ===
멀티 스텝 잡에서 나중의 스텝은 초기 스텝에서 이미 지정한 파일을 통째로 지정하지 않고 재조회를 사용할 수 있다. 이를테면 이 프로시저에서
<source lang="jcl">
<code>
//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
</codesource>
스텝 MYPR02는 스텝 MYPR01의 NEWFILE로 식별된 파일을 사용한다 (DSN은 데이터셋 이름을 말하며 파일의 이름을 지정한다).
 
여러 잡에 특화된 JCL과 프로시저 호출이 포함된 잡에서 잡에 특화된 스텝은 프로시저에 온전히 지정된 파일을 재조회할 수 있다. 이를테면:
<source lang="jcl">
<code>
//MYJOB JOB ..........
//STEP01 EXEC MYPROC Using a procedure
//STEP02 EXEC PGM=......... Step which is specific to this job
//INPUT01 DD DSN=*.STEP01.MYPR01.NEWFILE
</codesource>
여기서 DSN=*.STEP01.MYPR01.NEWFILE은 "이 잡의 스텝 STEP01이 사용한 프로시저의 스텝 MYPR01의 NEWFILE로 식별된 파일을 사용하라"를 뜻한다. 프로시저의 이름이 아닌 프로시저를 호출한 스텝의 이름을 사용하면 프로그래머가 여러 번 동일한 잡 안에서 재조회에 사용된 프로시저의 인스턴스가 어느 것인지 혼동하지 않고 동일한 프로시저를 사용할 수 있다.
 
줄 192 ⟶ 194:
* JCL 문과 같은 줄에서. 72번째 열에 X라는 연속 문자를 배치시키고, 그 다음 줄의 열 1-3에 "//"가 오게 함으로써 확장할 수 있다.
* 주석만 담고 있는 줄. 지엽적인 세세한 부분이 아닌, JCL의 전반적 구조에 대한 주요 사항들을 설명하는데 종종 사용된다. 주석만 담고 있는 줄들은 기나긴, 복잡한 JCL 파일들을 여러 단락으로 나눌 때에도 쓰인다.
<source lang="jcl">
<code>
//MYJOB JOB ..........
//* Lines containing only comments.
//******** Often used to divide JCL listing into sections ********
//STEP01 EXEC MYPROC Comment 2 on same line as statement
//STEP02 EXEC PGM=......... Comment 3 has been extended and X
// overflows into another line.
//INPUT01 DD DSN=STEP01.MYPR01.NEWFILE
</codesource>
 
=== 입력 파일들의 연결 ===
줄 218 ⟶ 220:
OS JCL은 반환 코드를 COND (조건 코드)로 지시하며, 이를 이용하여 차기 단계들의 실행 여부를 결정한다.
 
<source lang="jcl">
<code>
//MYJOB 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)
....
</codesource>
# STEP01을 실행하고 반환 코드를 수집.
# 숫자 4가 STEP01의 반한 코드 보다 크면 STEP02를 실행하지 말 것.