Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
Московский государственный технический университет им.

Факультет «Информатика и системы управления»

Кафедра «Автоматизированные системы обработки информации и управления»

Курс                «Супер ЭВМ zSeries»

Лабораторная работа        № 2

« Создание кода программы на языке HLASM и JCL-скрипта

в среде z/OS »

Методическое указание

по выполнению лабораторной работы

Москва - 2012 год

Содержание

1.        Редактирование данных в режиме ISPF Editor  (кодирование на  HLASM)        4

2.        Создание JCL-скрипта и его выполнение        5

3.        Выход из операционной системы z/OS (z/OS Logoff)        9

4.        Контрольные вопросы        12

4.        Литература        12

Цель лабораторной работы:

       изучение интерфейса ISPF - редактора набора данных для создания кода пограммы;

       написание и отладка кода программы на языке HLASM в операционной системе z/OS:

       компиляция кода программы и исправление ошибок;

       запуск исполняемого модуля.



Редактирование данных в режиме ISPF Editor
(кодирование на языке HLASM)

Вызвать режим редактирования можно из основного экрана ISPF, введя «2».

НЕ нашли? Не то? Что вы ищете?

Давайте создадим программу на языке HLASM, используя редактор ISPF. В окне подпрограммы редактирования ISPF вы должны ввести имя файла-раздела (Member), который будет хранить исходный код программы. Исходный код программы будет храниться в библиотечном наборе данных xxx. IU5zzz. С. Раздел, в котором хранится код, должен иметь имя - назовем его ASM. Полное имя набора данных - xxx. U5zzz. С(ASM). Введите эти значения в соответствующих полях, как показано на рисунке 1 и нажмите Enter.


  Menu  RefList  RefMode  Utilities  Workstation  Help 

------------------------------------------------------------------------------ 

  Edit Entry Panel 

ISPF Library: 

  Project. . . GS0050 

  Group. . . . IU5TON  . . .  . . .  . . . 

  Type  . . . . C 

  Member  . . . ASM  (Blank or pattern for member selection list) 

Other Partitioned, Sequential or VSAM Data Set, or z/OS UNIX file: 

  Name. . . . .  + 

  Volume Serial  (If not cataloged) 

Workstation File: 

  File Name  . . 

  Options 

Initial Macro  . . . .  Confirm Cancel/Move/Replace 

Profile Name. . . . .  Mixed Mode 

Format Name  . . . . .  Edit on Workstation 

Data Set Password  . .  Preserve VB record length 

Record Length  . . . .  Edit ASCII data 

Command ===> 

  F1=Help  F2=Split  F3=Exit  F7=Backward  F8=Forward  F9=Swap 

F10=Actions  F12=Cancel 


Рис. 1 Окно входа в режим редактирования Edit Entry Panel

После того, как будет выделена память для нового набора данных, экран редактирования будет иметь вид, показанный на рисунке 2.


  File  Edit  Edit_Settings  Menu  Utilities  Compilers  Test  Help 

------------------------------------------------------------------------------- 

EDIT  GS0050.TEST. C(ASM) - 01.02  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. 

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 

Рис. 2 Пустое окно редактирования ISPF

Используйте цифробуквенные клавиши, чтобы ввести текст, и не пользуйтесь никакими управляющими клавишами, кроме клавиши Del. Курсор можно двигать клавишами со стрелками.


  File  Edit  Edit_Settings  Menu  Utilities  Compilers  Test  Help 

------------------------------------------------------------------------------- 

EDIT  GS0050.TEST. C(ASM) - 01.02  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 HELLO  CSECT 

000200  USING  *,15 

000300  WTO  'HELLO WORLD!' 

000410  BR  14 

000500  END 

****** **************************** 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 

Рис. 3 Окно подпрограммы редактирования ISPF с набранной программой на языке HLASM

Разберём подробнее код программы.

CSECT задаёт управляющую секцию – часть программы, определённую программистом как перемещаемый модуль.

USING используется для указания базового регистра, содержащего адрес операнда для последующих операций. В отличие от ассемблера Intel, в S/360, S/370, S/390 в качестве базового может быть использован любой регистр общего назначения. Первым операндом этой директивы содержится адрес, но чаще всего там указывается *, это означает, что в регистре содержится адрес первой команды, следующей за директивой USING.

Макрос WTO служит для вывода сообщения оператору.

BR 14 служит для выхода из программы. Команда BR осуществляет переход по адресу, находящемуся в регистре. А в 14 регистре хранится адрес возврата.

Чтобы вставить строку, поставьте курсор в левое поле (область номеров строк), в месте, в которое вы хотите вставить пустую строку, и введите команду Ixx (Insert), где xx – количество строк, которые нужно вставить. Если понадобится удалить строку, введите в левом поле D (Delete) и нажмите Enter. Нажав клавишу F3, вы выйдете из редактора с сохранением файла. Наберите программу, как показано на рис. 19. Разместите символы точно, как показано. Наша программа предназначена для вывода текстовой строки на экран. Затем нажмите F3 для возврата в главное окно. Программа будет автоматически сохранена.

Внимание: Все ключевые слова в коде программы должны быть написаны строчными буквами. Может так случиться, что редактор ISPF автоматически конвертирует эти буквы в заглавные. Если это произойдет, введите в командной строке экрана, показанного на рис. 18, команду TSO «CAPS OFF», затем нажмите Enter. В правом верхнем углу на экране в окне входа в подпрограмму редактирования ISPF после написания исходных кодов появится надпись о том, что наш файл был сохранен.

Создание JCL-скрипта и его выполнение

Пользователь z/OS может запросить у системы выполнение какой-либо работы (конечно, связанной с запуском определенных приложений) с помощью специальным образом записанного и переданного системе текста. Этот текст - задание. Задания составляются на языке управления заданиями JCL (Job Control Language) и направляются в систему пользователями через входные устройства и сетевые коммуникации, а также через ранее запущенные приложения. В задании указано, какие программы, в какой последовательности и с какими данными должны быть исполнены, а также в какой форме и куда должны быть направлены результаты выполнения программ.

Обычно текст задания создается в некотором наборе данных с помощью текстового редактора, откуда специальными средствами пользовательского интерфейса его можно направить на обработку в подсистему JES2. Система z/OS требует, чтобы для  представления заданий использовались только последовательные и библиотечные наборы данных с параметрами FB и длиной записи 80. Создадим задание, отправляющее нашу программу на компиляцию, как файл-раздел (member) в наборе данных формата PDS (Partitioned Data Set) xxx. IU5zzz. СNTL(ASM). Для этого введите «CNTL» в поле «Type» и «ASM» в поле «Member». Нажмите Enter. Вы попадете в окно редактора ISPF. Введите текст скрипта:

//GS0050C  JOB (),CLASS=A, MSGCLASS=H, MSGLEVEL=(1,1),NOTIFY=&SYSUID 

//CCL  EXEC PROC=ASMACL 

//C. SYSIN  DD  DSNAME=GS0050.IU5TON. C(ASM),DISP=OLD 

//L. SYSLMOD DD  DSNAME=GS0050.IU5TON. LOAD(ASM),DISP=OLD 

Замените UserID, который приведен в тексте скрипта на свой. Символ «С» в первой строке скрипта, идущий после UserID без пробела, должен следовать и за вашим UserID, он необходим для идентификации типа работы в планировщике z/OS.

Важно соблюдать расстояния между словами так, как это показано в примере на рисунке 20, т. к. у редактора есть свои «зоны» распознавания исходного текста.

Немного слов о структуре скрипта. Задание состоит из последовательности управляющих предложений JCL. Каждое предложение имеет следующую структуру:

// ИМЯ  ОПЕРАТОР  ОПЕРАНДЫ  КОММЕНТАРИЙ

В первых двух позициях всегда указываются две косые черты, которые являются главным отличительным признаком предложений JCL. Поле «имя» начинается с третьей позиции и служит для идентификации представленного в предложении оператора. В нашем примере такие идентификаторы – GS0050С, CCL. Фактически это метки, на которые можно ссылаться из различных предложений задания или других заданий. Имя может содержать не более восьми символов, включающих латинские буквы, цифры и специальные знаки ($ # @) и должно начинаться с буквы или специального знака.

Оператор JOB задает начало задания и режим выполнения задания. Параметр CLASS (класс) относит задание к определенному классу выполнения заданий и задается символами AZ, 0-9. Параметр MSGCLASS (класс сообщений) определяет выходной класс для системных сообщений, формируемых в процессе выполнения задания. Класс задается символами A-Z, 0-9. Параметр MSGCLASS дает возможность выводить все системные сообщения и выходные наборы данных, формируемые в шагах задания, в один и тот же класс или в разные классы. Такое разделение иногда может оказаться полезным. Параметр MSGLEVEL (уровень полноты сообщений) определяет, какую информацию необходимо выдать в отчет о выполнении задания. MSGLEVEL=(1,1) означает максимально подробный вывод отчета. Параметр TIME (время) устанавливает максимальную продолжительность выполнения задания в минутах.

Оператор EXEC указывает выполняемую программу или процедуру и ее параметры. В нашем примере вызывается процедура компиляции программы на языке HLASM – ASMACL. В ее параметрах – входной набор данных, содержащий текст программы на HLASM и выходной набор данных, в котором будет содержаться полученная программа.

Оператор описания данных DD (data definition) - это оператор определения данных и устройств, используемых в задании и его отдельных шагах. Операторы DD, относящиеся к определенному шагу задания, следуют за оператором EXEC этого шага задания. Важнейшим атрибутом оператора DD является имя, связывающее описываемый набор данных с кодом вызываемой программы. Для программы-компилятора языка ассемблера установлены следующие dd-имена:

SYSIN - для описания исходного модуля;

SYSPRINT - для вывода сообщений компилятора;

SYSLIN - для описания объектного модуля;

SYSUT1 - промежуточный набор данных.

Параметр DISP (диспозиция) определяет исходное состояние набора данных, а также действия, которые необходимо произвести с набором данных после завершения шага задания или всего задания: сохранить, уничтожить, каталогизировать и др. Формат записи параметра DISP включает три позиционных подпараметра:

DISP=([статус][,дисп_НЗ][,дисп_АЗ])

где статус - исходное (текущее) состояние набора данных, дисп_НЗ - действие при нормальном завершении шага задания, дисп_АЗ - действие, которое надлежит выполнить при аварийном завершении шага задания.

Подпараметр статус может принимать следующие значения:

NEW - в указанном шаге задания создается новый набор данных;

OLD - набор данных существует (создан ранее);

SHR - набор данных существует и может быть использован одновременно другим заданием, т. е. разделяется различными заданиями в режиме чтения;

MOD - набор данных существует и будет модифицироваться в указанном шаге задания (используется только для последовательных наборов данных).

Подпараметры диспозиции дисп_НЗ и дисп_АЗ могут принимать следующие значения:

DELETE - набор данных следует уничтожить;

KEEP - набор данных следует сохранить;

CATLG - набор данных следует сохранить и каталогизировать;

UNCATLG - набор данных нужно сохранить, но при этом исключить из системного каталога.

PASS - набор данных следует передать для использования в последующем шаге того же задания.

Последнее значение (PASS) может быть использовано только для подпараметра дисп_НЗ.

  File  Edit  Edit_Settings  Menu  Utilities  Compilers  Test  Help 

------------------------------------------------------------------------------- 

VIEW  GS0050.IU5TON. CNTL(ASM) - 01.04  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 //GS0050C  JOB (),CLASS=A, MSGCLASS=H, MSGLEVEL=(1,1),NOTIFY=&SYSUID 

000200 //CCL  EXEC PROC=ASMACL 

000300 //C. SYSIN  DD  DSNAME=GS0050.IU5TON. C(ASM),DISP=OLD 

000400 //L. SYSLMOD DD  DSNAME=GS0050.IU5TON. LOAD(ASM),DISP=OLD 

****** **************************** 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 

Рис.4 Окно подпрограммы редактирования ISPF с набранным скриптом JCL

При изменении и корректировке файла не забывайте сохранять изменения клавишей F3 (по ее нажатию вы выйдете из редактора, вам нужно будет зайти еще раз).

Теперь необходимо отправить задание на исполнение. Задания, поступающие в систему от различных источников, принимаются и обрабатываются специальным компонентом z/OS, который называется подсистемой управления заданиями JES (Job Entry Subsystem). JES принимает задания, поступающие с входных устройств, регистрирует их, осуществляет анализ и формирует очереди заданий, а затем передает задания на выполнение базовой управляющей программе BCP. После завершения выполнения задания и получения результатов от BCP, JES формирует отчет по заданию (листинг), передает его пользователю или выводит на указанные устройства.

Для запуска задания на выполнение, находясь в редакторе скрипта, в поле Command введите команду SUB или SUBMIT.

Вы должны увидеть сообщение об отправке задания. Знак «***» - значит, что для просмотра остатка сообщения необходимо нажать кнопку Enter. Если скрипт и программа ошибок не содержит, то Вы получите сообщение об успехе (MAXCC равен 0).

15.27.18 JOB06440 $HASP165 GS0050C ENDED AT Z0SKCTR MAXCC=0 CN(INTERNAL)

*** 

В противном случае вам придется искать ошибку в скрипте или программе. Для того, чтобы посмотреть отчет об ошибке, можно просмотреть журнал заданий через утилиту SDSF.  Для этого необходимо знать имя задания и UserID. Утилита SDSF выведет список последних запущенных заданий. Установив фильтр, можно быстро найти интересующее нас задание.

Также можно воспользоваться функцией Outlist в ISPF, для этого нужно знать имя задания и идентификационный номер задания. Имя задания задается в первой строке скрипта JCL. Зачастую это UserID и постфикс, в нашем случае - «С», означающий compile – компиляция. Идентификационный номер задания – JobID – можно видеть в отчете об отправке задания, сразу после ввода команды Submit.

Теперь после компиляции двоичный код нашей программы содержится в файле

xxx. IU5zzz. LOAD(ASM). Давайте запустим программу. Для этого нам необходимо ввести в поле Command:

TSO CALL 'GS0050. IU5zzz. LOAD(ASM)'

Вместо GS0050 введите свой UserID. После этого вы должны видеть результат работы вашей программы на экране.

Выход из операционной системы z/OS (z/OS Logoff)

Нажмите несколько раз клавишу F3, чтобы вернуться в основное окно ISPF. Очередное нажатие клавиши F3 приведет вас в окно «Specify Disposition of Data Set». Система хочет знать, что вы собираетесь сделать с наборами данных лог-файла, которые вы создали, и предоставляет Вам на выбор список действий (Рис.21). Выберите «3».

  Specify Disposition of Log Data Set 

Log Data Set (GS0050.SPFLOG1.LIST) Disposition: 

Process Option. . . .  1. Print data set and delete 

  2. Delete data set without printing 

  3. Keep data set - Same 

  (allocate same data set in next session) 

  4. Keep data set - New 

  (allocate new data set in next session) 

Batch SYSOUT class. . 

Local printer ID or 

writer-name  . . . . . 

Local SYSOUT class. . 

List Data Set Options not available 

Press ENTER key to complete ISPF termination. 

Enter END command to return to the primary option menu. 

Job statement information:  (Required for system printer) 

  ===> 

  ===> 

  ===> 

  ===> 

Command ===> 

  F1=Help  F2=Split  F3=Exit  F7=Backward  F8=Forward  F9=Swap 

F12=Cancel 

Рис.5 Окно Specify Disposition of Data Set

Сообщение TSO о том, что созданный набор данных будет доступен для работы при

следующем вашем обращении к системе. При этом набор данных xxx. SPFLOG1.LIST, на который ссылается система, был создан ею автоматически.

GS0050.SPFLOG1.LIST has been kept. 

READY 

Затем введите «LOGOFF» и нажмите Enter.


  DDDDDDDD  EEEEEEEE MMMM  MMMMM  OOOOOOO 

  DD  DD EE  MM MM MM MM OO  OO 

  DD  DD EE  MM  M M  MM OO  OO PPPPP  KK KK  GGGGGG 

  DD  DD EEEEEEEE MM  MMM  MM OO  OO PP  PP KK KK  GG 

  DD  DD EE  MM  M  MM OO  OO PPPPPP KKK  GG GGGG 

  DD  DD EE  MM  MM OO  OO PP  KK KK  GG  GG 

  DDDDDDDD  EEEEEEEE MM  MM  OOOOOOO  PP  KK  KK GGGGGG 

  WELCOME TO IBM 

  DEMOPKG 

  YOUR IP ADDRESS :  217.28.208.218 

  YOUR TELNET PORT : 29216 

  --------------------------------------------------------- 

  |  APPLICATIONS AVAILABLE  | 

  |-------------------------------------------------------| 

  |  TSO  |  IMSB  |  CICSA  |  CICSB  | 

  |  IMSA  |  NETVIEW  |  AOF  |  MFN  | 

  |  IBMSM  |  OMVIEW  |  |  | 

  --------------------------------------------------------- 

Рис. 6 Окно завершения работы в ISPF

Эмулятор TN3270 вывел вас опять в окно приветствия операционной системы z/OS, ожидающее команд. На этом вы можете закончить сессию связи с виртуальной средой супер ЭВМ MAINFRAME.

Контрольные вопросы

Перечислите способы подключения к виртуальной среде мэйнфрейма. Что такое эмулятор TN3270? В чем заключается основное предназначение TSO? Что такое набор данных? Какие типы наборов данных используются в z/OS? Почему используется PDS? Почему задается 80-байтовые записи фиксированной длины? Перечислите основные команды ISPF? Перечислите команды ISPF необходимые для создания контейнера наборы данных? Перечислите основные форматы набора данных и их различия? Перечислить параметры контейнера набора данных «C» Перечислить параметры контейнера набора данных «CNTL» Перечислить параметры контейнера набора данных «LOAD» Каким образом можно скомпилировать программу на языке HLASM в  z/OS Что такое JOB, JCL?

Литература

Архитектура и технологии *****@***zSeries. , , . М.: Интернет-Университет Информационных технологий.2005г. Введение в современные мэйфреймы: основы z/OS. Майк Эбберс, Уэйн О’Брайн, Билл Огден. М.: Корпорация IBM, 2007г. Информационная управляющая система МГТУ им.   «Электронный Университет»: Концепция и реализация / , , . М.: Издательство МГТУ им. , 2009г. Gabriel F. Garqulio. z/OSREXX with OS/2, TSO, & CMS Features Quick Reference Guide ISBN 978-6-1309-5285-3. 2010г./ Sue Sloan, Ann Kilty Hernandez, Susan Graziano Sloan,.DB2 Universal Database for OS/390. М:2008г. Галямова вычислительные машины и их место в современном мире// Межвузовский сборник научных трудов,. М.: МИРЭА. 2006. .Сьюзен Виссер, Билл Вонг Освой самостоятельно DB2 Universal Database. М.: 2004г. Учебные и методические материалы по суперЭВМ zSeries.

http://www. /