1. Лабораторная работа № 1
Для доступа к z/OS использовался эмулятор терминала IBM 3270 x3270 (http://x3270.bgp.nu/). Эта программа связывается с мейнфреймом поверх протокола Telnet, осуществляя перекодирование символов в локальной и удалённой кодировке и отображая коды управляющих клавиш локального терминала на удалённый. Кроме того, можно подключаться напрямую, используя программу telnet, однако в таком случае можно столкнуться с проблемами ввода управляющих символов (например, Del, Backspace, функциональные клавиши) и перекодировки (для русской локали используется достаточно редкая кодировка IBM dkoi8). Консоль при этом выглядит следующим образом:
В процессе лабораторной работы создаются три набора данных, которые затем используются при написании и выполнении программы на языке С. Поскольку в методических материалах приведены пошаговые инструкции по созданию первого набора данных, CL0XXXX.TEST.C (где xxxx — номер ID в списке учётных записей), здесь мы рассмотрим процесс создания третьего набора с записями неопределённого размера CL0XXXX.TEST.LOAD.
Все дальнейшие операции выполняются в подсистеме ISPF (Interactive System Productivity Facility). Для входа в него нужно после приглашения набрать tso (Time Sharing Option) и ввести учётные данные.
Для манипуляции с наборами данных нужно зайти в меню утилит (3) и выбрать пункт Data Set (2).
На следующем экране нужно ввести составное имя набора и выбрать необходимое действие (A — Allocate):
Menu RefList Utilities Help
──────────────────────────────────────────────────────────────────────────────
Data Set Utility
A Allocate new data set C Catalog data set
R Rename entire data set U Uncatalog data set
D Delete entire data set S Short data set information
blank Data set information V VSAM Utilities
ISPF Library:
Project . . CL01119 Enter "/" to select option
Group . . . TEST / Confirm Data Set Delete
Type . . . . LOAD
Other Partitioned, Sequential or VSAM Data Set:
Name . . . . . . .
Volume Serial . . . (If not cataloged, required for option "C")
Data Set Password . . (If password protected)
Option ===>
F1=Help F2=Split F3=Exit F7=Backward F8=Forward F9=Swap
F10=Actions F12=Cancel
4B TCP00044 013/019
После этого необходимо задать параметры. Необязательно задавать все параметры — некоторые система установит сама по умолчанию:
Menu RefList Utilities Help
──────────────────────────────────────────────────────────────────────────────
Allocate New Data Set
Data Set Name . . . : CL01119.TEST.LOAD
Management class . . . (Blank for default management class)
Storage class . . . . (Blank for default storage class)
Volume serial . . . . (Blank for system default volume) **
Device type . . . . . (Generic unit or device address) **
Data class . . . . . . (Blank for default data class)
Space units . . . . . megabyte (BLKS, TRKS, CYLS, KB, MB, BYTES
or RECORDS)
Average record unit (M, K, or U)
Primary quantity . . 2 (In above units)
Secondary quantity (In above units)
Directory blocks . . 5 (Zero for sequential data set) *
Record format . . . . u
Record length . . . .
Block size . . . . . 11440
Data set name type pds (LIBRARY, HFS, PDS, LARGE, BASIC, *
EXTREQ, EXTPREF or blank)
Expiration date . . . (YY/MM/DD, YYYY/MM/DD
Enter "/" to select option YY.DDD, YYYY.DDD in Julian form
Allocate Multiple Volumes DDDD for retention period in days
or blank)
( * Specifying LIBRARY may override zero directory block)
( ** Only one of these fields may be specified)
Command ===>
F1=Help F2=Split F3=Exit F7=Backward F8=Forward F9=Swap
F10=Actions F12=Cancel
4B TCP00044 041/027
Проверить созданные записи можно утилитой Dslist (4):
Menu Options View Utilities Compilers Help
──────────────────────────────────────────────────────────────────────────────
DSLIST - Data Sets Matching CL01119 Row 1 of 6
Command - Enter "/" to select action Message Volume
-------------------------------------------------------------------------------
CL01119.HFS DMTP11
CL01119.ISPF.ISPPROF DMTP12
CL01119.SPFLOG1.LIST DMTP10
CL01119.TEST.C DMTP12
CL01119.TEST.CNTL DMTP06
CL01119.TEST.LOAD DMTP05
***************************** End of Data Set list ****************************
Command ===> Scroll ===> PAGE
F1=Help F2=Split F3=Exit F5=Rfind F7=Up F8=Down F9=Swap
F10=Left F11=Right F12=Cancel
4B TCP00044 041/015
Из листинга следует, что первые три записи были созданы заранее.
2. Лабораторная работа № 2
Цель второй работы — написать, собрать и запустить тестовую программу на языке C. Её исходники и исполняемый файл будут размещаться в уже созданных наборах данных.
Текст программы нужно поместить в раздел V1 набора CL0XXXX.TEST.C. Набрать его можно в редакторе oedit(2) ISPF:
File Edit Edit_Settings Menu Utilities Compilers Test Help
───────────────────────────────────────────────────────────────────────────────
EDIT CL01119.TEST.C(V1) - 01.01 Columns 00001 00072
****** ***************************** Top of Data ******************************
==MSG> -Warning- The UNDO command is not available until you change
==MSG> your edit profile using the command RECOVERY ON.
000100 include
000200 int main(int argc,char**argv)
000300 {
000400 printf("Ya mainframeko");
000500 return 0;
000600 }
****** **************************** Bottom of Data ****************************
Command ===> Scroll ===> PAGE
F1=Help F2=Split F3=Exit F5=Rfind F6=Rchange F7=Up
F8=Down F9=Swap F10=Left F11=Right F12=Cancel
. . . . . . . . . . . . . . . . . . . . . . . . . . .
Menu Utilities Compil ┌───────────────────────┐
Option ===> │ Command is not active │
4B TCP00045 038/015
Сохранение происходит автоматически при выходе по нажатию F3.
Для сборки необходимо написать сценарий и разместить его в разделе CL0XXXX.TEST.CNTL(V1):
File Edit Edit_Settings Menu Utilities Compilers Test Help
───────────────────────────────────────────────────────────────────────────────
EDIT CL01119.TEST.CNTL(V1) - 01.00 Columns 00001 00072
****** ***************************** Top of Data ******************************
==MSG> -Warning- The UNDO command is not available until you change
==MSG> your edit profile using the command RECOVERY ON.
000100 //CL01119C JOB (),CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1),NOTIFY=&SYSUID,
000200 // TIME=1440
000300 //PROCLIB JCLLIB ORDER=CBC.SCCNPRC
000400 //CCL EXEC PROC=EDCCLG,
000500 // INFILE='CL01119.TEST.C(V1)',
000600 // OUTFILE='CL01119.TEST.LOAD(V1),DISP=SHR'
****** **************************** Bottom of Data ****************************
Command ===> Scroll ===> PAGE
F1=Help F2=Split F3=Exit F5=Rfind F6=Rchange F7=Up
F8=Down F9=Swap F10=Left F11=Right F12=Cancel
. . . . . . . . . . . . . . . . . . . . . . . . . . .
Menu Utilities Compil ┌───────────────────────┐
Option ===> │ Command is not active │
4B TCP00045 013/009
После сохранения сценария осталось только добавить его в очередь заданий z/OS. Это производится командой SUB (submit):
IKJ56250I JOB CL01119C(JOB02095) SUBMITTED
***
13.38.58 JOB02095 $HASP165 CL01119C ENDED AT TSTMVS01 MAXCC=12 CN(INTERNAL)
***
Как видно, сборка завершилась неудачей (значение MAXCC не равно 0). Лог можно посмотреть утилитой Outlist (развёртка нескольких экранов):
Menu Utilities Compilers Help
───────────────────────────────────────────────────────────────────────────────
BROWSE CL01119.SPF101.OUTLIST Line 00000000 Col 001 080
********************************* Top of Data **********************************
1 J E S 2 J O B L O G -- S Y S T E M M V S T -- N O D E
0
13.34.02 JOB02093 ---- FRIDAY, 17 OCT 2008 ----
13.34.02 JOB02093 IRR010I USERID CL01119 IS ASSIGNED TO THIS JOB.
13.34.03 JOB02093 ICH70001I CL01119 LAST ACCESS AT 13:33:48 ON FRIDAY, OCTOBE
13.34.03 JOB02093 $HASP373 CL01119C STARTED - INIT 1 - CLASS A - SYS MVST
13.34.04 JOB02093 - --TIMINGS (MINS.)-
13.34.04 JOB02093 -JOBNAME STEPNAME PROCSTEP RC EXCP CPU SRB CLOC
13.34.04 JOB02093 -CL01119C CCL COMPILE 12 3923 .00 .00 .0
13.34.04 JOB02093 -CL01119C CCL LKED FLUSH 0 .00 .00 .0
13.34.04 JOB02093 -CL01119C CCL GO FLUSH 0 .00 .00 .0
13.34.04 JOB02093 -CL01119C ENDED. NAME- TOTAL CPU TIME=
13.34.04 JOB02093 $HASP395 CL01119C ENDED
0------ JES2 JOB STATISTICS ------
- 17 OCT 2008 JOB EXECUTION DATE
- 6 CARDS READ
- 250 SYSOUT PRINT RECORDS
- 0 SYSOUT PUNCH RECORDS
- 16 SYSOUT SPOOL KBYTES
- 0.02 MINUTES EXECUTION TIME
1 //CL01119C JOB (),CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1),NOTIFY=&SYSUID,
// TIME=1440
IEFC653I SUBSTITUTION JCL - (),CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1),NOTIF
2 //PROCLIB JCLLIB ORDER=CBC.SCCNPRC
3 //CCL EXEC PROC=EDCCLG,
// INFILE='CL01119.TEST.C(V1)',
// OUTFILE='CL01119.TEST.LOAD(V1),DISP=SHR'
XX********************************************************************
XX* LICENSED MATERIALS - PROPERTY OF IBM. *
XX* 5694-A01 *
XX* COPYRIGHT IBM CORP. 1988, 2005 *
XX* *
XX********************************************************************
XX* *
XX* COMPILE, LINK EDIT AND RUN A C PROGRAM *
XX* *
XX* NOTE: - CANNOT BE USED WITH THE GOFF, LONGNAME, RENT OR XPLINK *
XX* COMPILE OPTIONS *
XX* - THE RUNTIME OPTION TRAP(OFF) SHOULD NEVER BE SPECIFIED *
XX* ON THE CRUN VARIABLE. THE COMPILER IS NOT SUPPORTED *
XX* WHEN THIS RUNTIME OPTION IS USED. *
XX* *
XX* z/OS XL C/C++ *
XX* *
XX********************************************************************
XX*
4 XXEDCCLG PROC INFILE=, < INPUT ... REQUIRED
XX CREGSIZ='148M', < COMPILER REGION SIZE
XX CRUN=, < COMPILER RUNTIME OPTIONS
XX CPARM=, < COMPILER OPTIONS
XX CPARM2=, < COMPILER OPTIONS
XX CPARM3=, < COMPILER OPTIONS
XX SYSLBLK='3200', < BLOCKSIZE FOR &&LOADSET
XX LIBPRFX='CEE', < PREFIX FOR LIBRARY DSN
XX LNGPRFX='CBC', < PREFIX FOR LANGUAGE DSN
XX CLANG='EDCMSGE', < NOT USED IN THIS RELEASE. KEPT FOR COMPATIBILIT
XX LREGSIZ='1024K', < LINK EDIT REGION SIZE
XX LPARM='AMODE=31,MAP', < LINK EDIT OPTIONS
XX GREGSIZ='2048K', < EXECUTION REGION SIZE
XX GPARM=, < EXECUTION OPTIONS
XX DCB80='(RECFM=FB,LRECL=80,BLKSIZE=3200)',
XX DCB3200='(RECFM=FB,LRECL=3200,BLKSIZE=12800)',
XX OUTFILE='&&GSET(GO),DISP=(NEW,PASS),SPACE=(TRK,(7,7,1)),UNIT=SYSALL
XX A',
XX TUNIT='SYSALLDA', < UNIT FOR TEMPORARY FILES
XX TSPACE='(32000,(30,30))' < SIZE FOR TEMPORARY FILES
XX*
XX*-------------------------------------------------------------------
XX* COMPILE STEP:
XX*-------------------------------------------------------------------
5 XXCOMPILE EXEC PGM=CCNDRVR,REGION=&CREGSIZ,
XX PARM=('&CRUN/&CPARM &CPARM2 &CPARM3')
IEFC653I SUBSTITUTION JCL - PGM=CCNDRVR,REGION=148M,PARM=('/ ')
6 XXSTEPLIB DD DSNAME=&LIBPRFX..SCEERUN2,DISP=SHR
IEFC653I SUBSTITUTION JCL - DSNAME=CEE.SCEERUN2,DISP=SHR
7 XX DD DSNAME=&LNGPRFX..SCCNCMP,DISP=SHR
IEFC653I SUBSTITUTION JCL - DSNAME=CBC.SCCNCMP,DISP=SHR
8 XX DD DSNAME=&LIBPRFX..SCEERUN,DISP=SHR
IEFC653I SUBSTITUTION JCL - DSNAME=CEE.SCEERUN,DISP=SHR
9 XXSYSMSGS DD DUMMY,DSN=&LNGPRFX..SCBC3MSG(&CLANG),DISP=SHR
IEFC653I SUBSTITUTION JCL - DUMMY,DSN=CBC.SCBC3MSG(EDCMSGE),DISP=SHR
10 XXSYSIN DD DSNAME=&INFILE,DISP=SHR
IEFC653I SUBSTITUTION JCL - DSNAME=CL01119.TEST.C(V1),DISP=SHR
11 XXSYSLIB DD DSNAME=&LIBPRFX..SCEEH.H,DISP=SHR
IEFC653I SUBSTITUTION JCL - DSNAME=CEE.SCEEH.H,DISP=SHR
12 XX DD DSNAME=&LIBPRFX..SCEEH.SYS.H,DISP=SHR
IEFC653I SUBSTITUTION JCL - DSNAME=CEE.SCEEH.SYS.H,DISP=SHR
13 XXSYSLIN DD DSNAME=&&LOADSET,UNIT=&TUNIT.,
XX DISP=(MOD,PASS),SPACE=(CYL,(3,3)),
XX DCB=(RECFM=FB,LRECL=80,BLKSIZE=&SYSLBLK)
IEFC653I SUBSTITUTION JCL - DSNAME=&&LOADSET,UNIT=SYSALLDA,DISP=(MOD,P
LRECL=80,BLKSIZE=3200)
14 XXSYSPRINT DD SYSOUT=*
15 XXSYSOUT DD SYSOUT=*
16 XXSYSCPRT DD SYSOUT=*
17 XXSYSUT1 DD UNIT=&TUNIT.,SPACE=&TSPACE.,DCB=&DCB80
IEFC653I SUBSTITUTION JCL - UNIT=SYSALLDA,SPACE=(32000,(30,30)),DCB=(R
18 XXSYSUT5 DD UNIT=&TUNIT.,SPACE=&TSPACE.,DCB=&DCB3200
IEFC653I SUBSTITUTION JCL - UNIT=SYSALLDA,SPACE=(32000,(30,30)),DCB=(R
19 XXSYSUT6 DD UNIT=&TUNIT.,SPACE=&TSPACE.,DCB=&DCB3200
IEFC653I SUBSTITUTION JCL - UNIT=SYSALLDA,SPACE=(32000,(30,30)),DCB=(R
20 XXSYSUT7 DD UNIT=&TUNIT.,SPACE=&TSPACE.,DCB=&DCB3200
IEFC653I SUBSTITUTION JCL - UNIT=SYSALLDA,SPACE=(32000,(30,30)),DCB=(R
21 XXSYSUT8 DD UNIT=&TUNIT.,SPACE=&TSPACE.,DCB=&DCB3200
IEFC653I SUBSTITUTION JCL - UNIT=SYSALLDA,SPACE=(32000,(30,30)),DCB=(R
22 XXSYSUT9 DD UNIT=&TUNIT.,SPACE=&TSPACE.,
XX DCB=(RECFM=VB,LRECL=137,BLKSIZE=882)
IEFC653I SUBSTITUTION JCL - UNIT=SYSALLDA,SPACE=(32000,(30,30)),DCB=(R
23 XXSYSUT10 DD SYSOUT=*
24 XXSYSUT14 DD UNIT=&TUNIT.,SPACE=&TSPACE.,
...
IGD105I SYS08291.T133403.RA000.CL01119C.R0103953 DELETED, DDNAME=SYSUT1
IGD105I SYS08291.T133403.RA000.CL01119C.R0103954 DELETED, DDNAME=SYSUT5
IGD105I SYS08291.T133403.RA000.CL01119C.R0103955 DELETED, DDNAME=SYSUT6
IGD105I SYS08291.T133403.RA000.CL01119C.R0103956 DELETED, DDNAME=SYSUT7
IGD105I SYS08291.T133403.RA000.CL01119C.R0103957 DELETED, DDNAME=SYSUT8
IGD105I SYS08291.T133403.RA000.CL01119C.R0103958 DELETED, DDNAME=SYSUT9
IEF285I CL01119.CL01119C.JOB02093.D0000104.? SYSOUT
IGD105I SYS08291.T133403.RA000.CL01119C.R0103959 DELETED, DDNAME=SYSUT14
IGD105I SYS08291.T133403.RA000.CL01119C.R0103960 DELETED, DDNAME=SYSUT16
IGD105I SYS08291.T133403.RA000.CL01119C.R0103961 DELETED, DDNAME=SYSUT17
IEF373I STEP/COMPILE /START 2008291.1334
IEF374I STEP/COMPILE /STOP 2008291.1334 CPU 0MIN 00.33SEC SRB 0MIN 00.00
IEF202I CL01119C LKED CCL - STEP WAS NOT RUN BECAUSE OF CONDITION CODES
IEF272I CL01119C LKED CCL - STEP WAS NOT EXECUTED.
IEF373I STEP/LKED /START 2008291.1334
IEF374I STEP/LKED /STOP 2008291.1334 CPU 0MIN 00.00SEC SRB 0MIN 00.00
IEF202I CL01119C GO CCL - STEP WAS NOT RUN BECAUSE OF CONDITION CODES
IEF272I CL01119C GO CCL - STEP WAS NOT EXECUTED.
IEF373I STEP/GO /START 2008291.1334
IEF374I STEP/GO /STOP 2008291.1334 CPU 0MIN 00.00SEC SRB 0MIN 00.00
IEF237I 0225 ALLOCATED TO SYS00002
IEF285I SYS08291.T133404.RA000.CL01119C.R0103965 KEPT
IEF285I VOL SER NOS= DMTOS4.
IGD105I SYS08291.T133403.RA000.CL01119C.LOADSET.H01 DELETED, DDNAME=SYSLIN
IEF375I JOB/CL01119C/START 2008291.1334
IEF376I JOB/CL01119C/STOP 2008291.1334 CPU 0MIN 00.33SEC SRB 0MIN 00.00
ERROR CCN3166 CL01119.TEST.C(V1):1 Definition of function include requires
ERROR CCN3276 CL01119.TEST.C(V1):1 Syntax error: possible missing '{'?
CCN0793(I) Compilation failed for file //'CL01119.TEST.C(V1)'. Object file not
******************************** Bottom of Data ********************************
Command ===> Scroll ===> PAGE
F1=Help F2=Split F3=Exit F5=Rfind F7=Up F8=Down F9=Swap
F10=Left F11=Right F12=Cancel
4B TCP00045 041/015
Была допущена ошибка в исходниках, пропущен «#» перед include. После исправления и добавления обновлённого задания в очередь оно выполняется успешно и можно запускать исполняемый модуль. Вот его вывод:
Command ===> tso call 'cl01119.test.load(v1)' Scroll ===> PAGE
Ya mainframeko
***
Лабораторная работа № 3
В рамках z/OS можно получить доступ к z/OS UNIX, которая представляет собой привычную Unix-подобную среду. Однако работа в этой подсистеме осуществляется внутри адресного пространства MVS.
Для входа в оболочку USS необходимо на экране приветствия ввести команду omvs. Команды локального терминала передаются оболочке, которая передаёт их оболочке Unix. Вот некоторые сведения о подсистеме Unix, которые удалось выяснить:
CL01119:/: >uname -a
OS/390 TESTMVS 19.00 03 2096
CL01119:/usr/bin: >date
Fri Oct 17 14:53:34 CDT 2008
CL01119:/u/cl01119: >c89 ./test.c
CEE3608I The following messages pertain to the invocation command run-time optio
ns.
CEE3633W The total length of the combined ENVAR strings exceeded 250 characters.
CCN0008(S) Source file //DD:SYSIN cannot be opened.
CCN0703(I) An error was encountered in a call to fopen() while processing //DD:S
YSIN.
fopen(): EDC5037I The specified ddname was not found. (errno2=0xC00B05B1)
FSUM3065 The COMPILE step ended with return code 16.
FSUM3017 Could not compile ./test.c. Correct the errors and try again.
CL01119:/u/cl01119: >
===>
RUNNING
ESC=¢ 1=Help 2=SubCmd 3=HlpRetrn 4=Top 5=Bottom 6=TSO
7=BackScr 8=Scroll 9=NextSess 10=Refresh 11=FwdRetr 12=Retrieve
Работа с подсистемой на базовом уровне практически ничем не отличается от работы с любой оболочкой Unix, с немногими отличиями в существенно ограниченных правах и периодически «всплывающими» особенностями управления процессами встроенного ядра. Так, при попытке скомпилировать программу на листинге выше появилось сообщение об ошибке системного вызова fopen().
Заключение
Рассмотренные примеры демонстрируют основы взаимодействия с z/OS на более низком, при подключении по протоколу IBM 3270 и работе в среде утилит и редактора z/OS, и более высоком, при использовании оболочки подсистемы z/OS UNIX, уровнях. Уделено внимание особой логической структуре хранения данных с помощью наборов данных, и планированию процессов.
Поделитесь с Вашими друзьями: |