Блокировки набора данных REXX / z/OS

Меня интересует одна вещь с REXX-языком, как он обрабатывает блокировки набора данных. Ситуация: - у меня в ISPF-редакторе открыт последовательный набор данных - запускаю REXX-программу, которая обновляет (вносит изменения) этот набор данных - работает нормально, но как это возможно? Обычно, если у вас есть набор данных, открытый в вашем редакторе, и вы пытаетесь использовать его из другой программы (например, если вы отправляете какое-то задание), вы получите сообщение «Набор данных используется». Почему это работает с REXX здесь. Может быть такое же адресное пространство или...? Кто-нибудь может мне сказать?


person Timo    schedule 25.08.2010    source источник


Ответы (1)


REXX не управляет блокировкой набора данных. REXX обращается к сервисным модулям для выделения наборов данных и выполнения для них операций ввода-вывода. Подпрограмма обслуживания ввода-вывода в TSO называется EXECIO. Прежде чем EXECIO сможет работать с набором данных, он должен быть выделен под TSO для некоторого DDName. Затем на это DDName ссылаются в запросе EXECIO.

Наборы данных могут быть выделены непосредственно из командной строки TSO или внутри вашего исполняемого файла REXX. Уровень блокировки набора данных определяется параметром DISPosition, который предоставляется во время выделения набора данных.

Важным моментом, который следует отметить в вашем конкретном примере, является то, что вы выполняете сеанс ISPF Edit и REXX exec под одним и тем же сеансом TSO. Выделения наборов данных в рамках одного сеанса TSO не блокируют друг друга. Параметр DISP указывает, как блокировать по отношению к другим процессам, а не к самому процессу. Следовательно, никогда не будет проблем с блокировкой набора данных между разными программами, работающими в рамках одного сеанса TSO.

Сообщение «Набор данных используется», отображаемое редактором ISPF, является функцией самого редактора, проверяющего предыдущие распределения в рамках того же сеанса TSO.

Попробуйте следующий эксперимент:

Повторите то, что вы описали: откройте сеанс редактирования ISPF для набора данных. Затем запустите процедуру REXX в том же сеансе TSO, чтобы обновить ее. Должен работать без нареканий.

Далее: Попросите друга открыть сеанс редактирования ISPF для набора данных. На этот раз ваш процесс REXX взорвется из-за «используемого набора данных». Вы можете сделать то же самое самостоятельно, отредактировав набор данных в TSO и отправив REXX exec в качестве пакетного задания под своей учетной записью. Интерактивный сеанс TSO — это один процесс, сеанс пакетного TSO — второй процесс, и между ними будет происходить блокировка набора данных (ваше пакетное задание либо взорвется, либо будет зависать до тех пор, пока сеанс редактирования TSO не будет прерван).

Конфликты доступа к набору данных проявляются только тогда, когда разные процессы пытаются выделить один и тот же набор данных с несовместимыми параметрами DISP.

person NealB    schedule 26.08.2010
comment
Благодаря NealB, распределения наборов данных в рамках одного сеанса TSO не блокируют друг друга. Это все объясняет! С уважением, Тимо - person Timo; 27.08.2010