Пт, 27.12.2024, 10:34
Приветствую Вас Гость | RSS
Главная | JCL - Форум | Регистрация | Вход
Форма входа
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
JCL
XOpenДата: Чт, 20.08.2009, 19:58 | Сообщение # 1
Генерал-майор
Группа: Администраторы
Сообщений: 325
Репутация: 4
Статус: Offline
Глупый вопросик: Что дает SHR в данном примере? Изменится ли что нибудь, если я поставлю OLD ?


//PGM EXEC PGM=MYPGM1
//IN DD DSN=FORMAT.FILE1,DISP=SHR
//DEL EXEC PGM=IEFBR14
//DELDD DD DISP=(MOD,DELETE,DELETE),SPACE=(CYL,(0)),
// DSN=FORMAT.FILE1


Худая корова еще не газель!

Сообщение отредактировал XOpen - Чт, 20.08.2009, 19:59
 
GregoryДата: Сб, 22.08.2009, 00:15 | Сообщение # 2
Генерал-майор
Группа: Доверенные
Сообщений: 482
Репутация: 22
Статус: Offline
Я считаю что:
- от замены SHR на OLD ничего не изменится
- этот вопросик вовсе не глупый
Инициатор выдает ENQ на все наборы данных, описанные во всем задании до иниицирования программы первого шага (MYPGM1). Поскольку во втором шаге DISP=MOD, набор FORMAT.FILE будет запрашиваться монопольно (exclusive), а не разделяемо (shared). Вот если бы второго шага не было, разница между SHR и OLD, естественно, была бы. Такая логика инициатора позволяет избежать deadlock:
//JOBA JOB
// EXEC PGM=IEFBR14
//A DD DSN=DATA1,DISP=OLD
// EXEC PGM=IEFBR14
//B DD DSN=DATA2,DISP=OLD

//JOBB JOB
// EXEC PGM=IEFBR14
//B DD DSN=DATA2,DISP=OLD
// EXEC PGM=IEFBR14
//A DD DSN=DATA1,DISP=OLD

Если бы ENQ для наборов делалось для каждого шага а не для всего задания сразу, одновременный запуск заданий JOBA и JOBB приводил бы к взаимоблокированию (deadlock).

Сообщение отредактировал Gregory - Сб, 22.08.2009, 00:21
 
XOpenДата: Пн, 24.08.2009, 12:32 | Сообщение # 3
Генерал-майор
Группа: Администраторы
Сообщений: 325
Репутация: 4
Статус: Offline
Это был вопрос с подвохом. smile Я пол дня потратил, пока догадался книжку перечитать. (а так уже и ENQ печатал, тоесть сам видел, что так и происходит) biggrin
Снимаю шляпу перед теми, кто это уже знал cool


Худая корова еще не газель!
 
GregoryДата: Вт, 17.09.2013, 16:30 | Сообщение # 4
Генерал-майор
Группа: Доверенные
Сообщений: 482
Репутация: 22
Статус: Offline
В свете последних событий:

Цитата
SYSDSN ENQ Downgrade in JCL

Description: MVS Device Allocation has the responsibility of ensuring the integrity of data sets and devices. For data sets, it does this using a GRS ENQ for each data set. When the JCL coder requests DISP=OLD, DISP=NEW or  DISP=MOD, Allocation requests an exclusive ENQ with major name SYSDSN and a minor name of the data set. If the JCL coder uses the other disposition, DISP=SHR, Allocation obtains the same ENQ, but with shared control. Once obtained, the ENQ is not released until the last step in which it is used. So, for a job with five steps, if the first step codes a data set with DISP=NEW and then uses the data set again in step 5 with DISP=SHR, the ENQ is held for all five steps. Further, the ENQ's level of control, initially exclusive in step 1, is never changed, even though step 5 only needs shared control. In this way, Allocation ensures that the data set integrity is not compromised in any way until the job that needed exclusive control gives up the data set or ends. This is the behavior without the new DSENQSHR function.
In the same example but using the new DSENQSHR function, the SYSDSN ENQ would be downgraded from exclusive control to shared control after step 1 since exclusive control is no longer needed for the data set. This allows other jobs which attempt to allocate the data set to have access earlier than the legacy behavior. This parallelism will reduce the IEF099I/IEF861I/IEF863I messages which indicate that a particular job is waiting the data set.

When change was introduced: z/OS V2R1.

Таким образом, в z/OS 2.1 с активированной функцией DSENQSHR задание вида
Код
//STEP1 EXEC PGM=MYPGM1
//DSN1 DSN=MYDSN,DISP=OLD
//STEP2 EXEC PGM=MYPGM2
//DSN2 DD DSN=MYDSN,DISP=SHR
//

будет захватывать набор данных MYDSN в монопольное управление только во время выполнения шага 1.

По-видимому, то же самое будет и в случае
Код
//STEP1 EXEC PGM=MYPGM1
//DSN1 DSN=MYDSN,DISP=OLD
//STEP2 EXEC PGM=MYPGM2
//

А вот что будет происходить в этом случае не совсем понятно:
Код
//STEP1 EXEC PGM=MYPGM1
//DSN DSN=MYDSN,DISP=OLD
//STEP2 EXEC PGM=MYPGM2
//DSN  DSN=MYDSN,DISP=SHR
//STEP3 EXEC PGM=MYPGM3
//DSN  DSN=MYDSN,DISP=OLD
//

во время выполнения шага 2 уровень ENQ будет понижен до разделяемого, а затем в шаге 3 вновь повышен до монопольного?


Сообщение отредактировал Gregory - Вт, 17.09.2013, 23:52
 
XOpenДата: Ср, 18.09.2013, 11:05 | Сообщение # 5
Генерал-майор
Группа: Администраторы
Сообщений: 325
Репутация: 4
Статус: Offline
Было бы логично держать до последнего OLD шага и отпустить для всех шагов после. Посмотрим...
 
  • Страница 1 из 1
  • 1
Поиск: