Московский государственный университет путей сообщения
Опубликован: 13.04.2006 | Доступ: свободный | Студентов: 868 / 87 | Оценка: 4.41 / 3.73 | Длительность: 24:53:00
Лекция 5:

Управление заданиями и язык JCL

Оператор DD

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

Оператор DD может содержать один позиционный и около 60 ключевых параметров. Познакомимся с некоторыми наиболее важными из них, исключив из рассмотрения параметры, используемые для описания SMS и VSAM наборов данных.

Формат оператора DD:

//имя DD [позиционный параметр][,ключевые параметры]
    Позиционный параметр:
* | DATA | DUMMY
    Ключевые параметры:
[,DSN[AME] = имя_набора_данных]
[,DCB = (список подпараметров)]
[,UNIT = устройство]
[,VOL[UME] =(список подпараметров)]    
[,SPACE = (список подпараметров)]
[,DISP = (список подпараметров)]
[,SYSOUT = (список подпараметров)]
[,LABEL = (список подпараметров)]
...

Важнейшим атрибутом оператора DD является имя, связывающее описываемый набор данных с кодом вызываемой программы. Как отмечалось в п.5.1.3, в программе для каждого используемого набора данных с помощью макровызова DCB устанавливается так называемое dd-имя (ddname). Если в шаге задания указать оператор DD с таким же именем, то появляется возможность определить или изменить ряд параметров указанного набора данных через оператор DD задания, то есть в момент запуска программы. Таким образом, при выполнении любой программы пользователь должен в первую очередь выяснить, какие dd-имена следует применять для описания данных и устройств, необходимых для ее работы. Это можно сделать с помощью соответствующей документации и руководств. Например, для программы-компилятора языка ассемблера установлены следующие dd-имена:

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

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

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

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

Некоторые имена операторов DD зарезервированы системой для специальных целей. К ним относятся, например, следующие имена:

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

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

SYSABEND - для выходного набора данных, в который может быть записан дамп системного ядра и области памяти обрабатывающей программы, если шаг задания завершился аварийно;

SYSUDUMP - для выходного набора данных, в который может быть записан дамп области памяти обрабатывающей программы, если шаг задания завершился аварийно;

SYSCHK - для выходного набора данных контрольной точки;

SYSIN - для входного набора данных ввода заданий;

SYSPRINT - для набора данных, выводимого на печатающее устройство;

При использовании процедур могут применяться составные имена операторов DD, о чем речь пойдет немного ниже.

Только в одном случае у оператора DD может отсутствовать имя: при описании сцепленных наборов данных, рассматриваемых системой как единый набор данных:

//SCHETA  DD ...
//        DD ...
//        DD ...

Система требует, чтобы у таких наборов данных были согласованы основные характеристики логических записей, такие как формат, длина и размер блока.

В языке управления заданиями имеется возможность определять значения некоторых параметров одного оператора DD посредством ссылки на значение этого же параметра другого оператора DD. В общем виде ссылку можно представить в следующих форматах:

*.имя_DD

или

*.имя_шага_задания.имя_DD

Первый формат используется при ссылке внутри шага задания, а второй формат применяется при ссылке на один из предшествующих шагов задания. Например:

//PR  JOB SECT
//ST1 EXEC PGM=SUN1
//UT1 DD DSNAME=LIB1,DCB=(RECFM=FB,LRECL=80,BLKSIZE=400)
//UT2 DD DSNAME=LIB2,DCB=*.UT1
//ST2 EXEC PGM=SUN2
//GO  DD DSNAME=LIB3,DCB=*.ST1.UT1

Теперь рассмотрим позиционный параметр оператора DD, который может принимать одно из трех взаимоисключающих значений:

* | DATA | DUMMY

Первое значение (*) служит для описания данных, размещаемых во входном потоке, то есть непосредственно в тексте задания вслед за оператором DD. Данные могут занимать одну или несколько строк задания и завершаться ограничительным оператором /*. В некоторых случаях ограничительный оператор может быть опущен. Признаком конца набора данных является в этом случае первый встретившийся управляющий оператор JCL с символами // в первых двух позициях строки.

Пример:

//SYSIN DD *
1 ИВАНОВ 12345 7.9
2 ПЕТРОВ 67890 3.8
3 СИДОРОВ 73452 9.0
/*

Если же входные данные включают управляющие операторы JCL, то есть строки, содержащие в первых двух позициях //, то необходимо вместо * использовать параметр DATA. В приведенном ниже примере в качестве входных данных определены две строки, содержащие предложения JOB и EXEC:

//MYJCL DD DATA
//USER1A JOB ,BOB,MSGLEVEL=1
//ST1 EXEC IEFBR14
/*

Если во вводимых во входном потоке данных должны содержаться строки, начинающиеся с символов /*, то в этом случае можно определить другой ограничитель с помощью параметра DLM. В частности, при компиляции C/C++ приложений можно использовать этот прием следующим образом:

//PR     JOB SECT
//ST1 EXEC PGM=CCNDRVR
//COMPILE DD *,DLM=<>
# include <stdio.h>
/*комментарий*/
main();
...
<>

Здесь двухсимвольное значение <> в первых двух позициях строки служит для ограничения входного набора данных подобно /*.

Следует обратить внимание, что по умолчанию JES принимает для вводимого таким образом набора данных значения LRECL=BLKSIZE=80.

Значение позиционного параметра DUMMY применяется, чтобы объявить некоторый набор данных как фиктивный. В этом случае система не производит никаких действий над набором данных. Например, предложение

//SYSPRINT DD DUMMY

обеспечивает подавление вывода сообщений, направляемых программой в набор данных с dd-именем SYSPRINT.