ИЭФБР14
IEFBR14 — это IBM для мэйнфреймов служебная программа . Он работает во всех IBM средах мэйнфреймов , производных от OS/360 , включая z/OS . Это заполнитель, который возвращает нулевой статус завершения , аналогично команде true в UNIX-подобных системах. [ 1 ]
Цель
[ редактировать ]Распределение (также называемое инициацией)
[ редактировать ]В OS/360 и производных системах мэйнфреймов большинство программ никогда не указывают файлы (обычно называемые наборами данных ) напрямую, а вместо этого ссылаются на них косвенно через операторы языка управления заданиями (JCL), которые вызывают программы. Эти определения данных (или " DD
") утверждения могут включать в себя "диспозицию" ( DISP=...
) параметр, указывающий, как следует управлять файлом — создавать ли новый файл или повторно использовать старый; и следует ли удалить файл после завершения или оставить его; и т. д .
IEFBR14 был создан потому, что хотя DD
операторы могут легко создавать или удалять файлы, но они не могут сделать это без запускаемой программы из-за определенной особенности системы управления заданиями, которая всегда требует, чтобы инициатор действительно выполнил программу, даже если эта программа фактически является нулевым оператором . [ 2 ] Программа, используемая в JCL, на самом деле не нуждается в использовании файлов для их создания или удаления. DD DISP=...
спецификация делает всю работу. Таким образом, для выполнения этой роли потребовалась очень простая программа, ничего не делающая.
Таким образом, IEFBR14 можно использовать для создания или удаления набора данных с помощью JCL.
Освобождение (также называемое завершением)
[ редактировать ]Дополнительной причиной запуска IEFBR14 было отключение устройств (обычно лент или дисков), которые были смонтированы после предыдущего задания, возможно, из-за ошибки в JCL этого задания или из-за того, что задание завершилось с ошибкой. В любом случае системным операторам часто приходится демонтировать устройства, а запущенная задача – DEALLOC
– часто предназначалось для этой цели.
Просто введя команду
S DEALLOC
на системной консоли запускалось запущенное задание, состоящее всего из одного шага . Однако из-за особенностей управления заданиями DEALLOC должен фактически существовать в системной библиотеке процедур SYS1.PROCLIB, чтобы команда запуска не завершилась неудачно.
Кроме того, все такие запущенные задачи должны быть одним шагом задания, поскольку модуль «Управление запущенными задачами» (STC) в компоненте «Управление заданиями» операционной системы принимает только одношаговые задания и отклоняет все без исключения многоэтапные задания.
//STEP01 EXEC PGM=IEFBR14
Парсинг и проверка
[ редактировать ]По крайней мере, в z/OS ответвление для выполнения другой программы приведет к тому, что вызывающая программа будет оцениваться на наличие синтаксических ошибок в этот момент. [ 1 ]
Мы
[ редактировать ]«IEF» происходит от соглашения, принятого на мэйнфреймах , согласно которому программы, поставляемые IBM, группируются по функциям или создателям и что каждая группа имеет трехбуквенный префикс. В OS/360 первая буква почти всегда была «I», а все программы, созданные группой управления заданиями (включая IEFBR14), использовали префикс «IEF». Другие распространенные префиксы включали «IEB» для служебных программ набора данных, «IEH» для системных служебных программ и «IEW» для связывания и загрузки программ. [ 3 ] Другими основными компонентами были (и остаются) «IEA» (супервизор операционной системы) и «IEC» ( супервизор ввода/вывода ).
Как поясняется ниже, «BR 14» была основной функцией программы — просто вернуться в операционную систему. Эта часть имени программы часто была мнемонической — например, IEBUPDTE была утилитой набора данных (IEB), которая применяла обновления (UPDTE) к файлам исходного кода, а IEHINITT была системной утилитой (IEH), которая инициализировала (INIT) метки на магнитной ленте ( Т).
Как поясняется далее в разделе «Использование» ниже, имя «BR14» происходит от инструкции языка ассемблера IBM « Перейти (по адресу) в 14 регистр » , которая по соглашению используется для «возврата из подпрограммы ». Большинство первых пользователей OS/360 были знакомы с языком IBM Assembler и сразу это поняли.
Использование
[ редактировать ]Пример JCL будет:
//IEFBR14 JOB ACCT,'DELETE DATASET',MSGCLASS=J,CLASS=A
//STEP0001 EXEC PGM=IEFBR14
//DELDD DD DSN=xxxxx.yyyyy.zzzzz,
// DISP=(MOD,DELETE,DELETE),UNIT=DASD
Чтобы создать секционированный набор данных:
//TZZZ84R JOB NOTIFY=&SYSUID,MSGCLASS=X
//STEP01 EXEC PGM=IEFBR14
//DD1 DD DSN=TKOL084.DEMO,DISP=(NEW,CATLG,DELETE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=80,DSORG=PO),
// SPACE=(TRK,(1,1,1),RLSE),
// UNIT=SYSDA
Выполнение
[ редактировать ]использовалась мнемоника Первоначально IEFBR14 состоял из одной инструкции «Переход для регистрации» 14. В IBM Assembler BR, отсюда и название: IEF BR 14 . BR 14 тождественно эквивалентен BCR 15,14 (всегда переходить [маска = 15 = всегда] к адресу, содержащемуся в регистре общего назначения 14). BR — это псевдоинструкция для BCR 15. Системный ассемблер принимает многие случаи таких псевдоинструкций как логические эквиваленты канонических инструкций System/360. Каноническим экземпляром BR 14 является BCR 15,14 .
Соглашение о связывании для OS/360 и его потомков требует, чтобы программа вызывалась с регистром 14, содержащим адрес для возврата управления после завершения, и регистром 15, содержащим адрес, по которому вызываемая программа загружается в память; по завершении программа загружает код возврата в регистр 15, а затем переходит к адресу, содержащемуся в регистре 14. Но изначально IEFBR14 не был закодирован с учетом этих характеристик, поскольку IEFBR14 изначально использовался как фиктивная секция управления, которая просто возвращается вызывающей стороне, а не как исполняемый модуль.
Исходная версия программы вообще не изменяла регистр 15, поскольку ее исходное применение было заполнителем в определенных загрузочных модулях, которые были созданы во время Sysgen (генерации системы), а не как исполняемая программа как таковая. Поскольку IEFBR14 всегда вызывался функциональным эквивалентом канонической инструкции BALR 14,15 , код возврата в регистре 15 всегда был ненулевым. Позже должна была быть добавлена вторая инструкция для очистки кода возврата, чтобы он завершался с определенным статусом, а именно нулевым. Изначально программисты не использовали все свойства языка управления заданиями, поэтому неопределенный код возврата не был проблемой. Однако впоследствии программисты действительно использовали эти свойства, поэтому определенный статус стал обязательным. Эта модификация IEFBR14 никоим образом не повлияла на его первоначальное использование в качестве заполнителя.
Машинный код модифицированной программы:
SR R15,R15 put zero completion code into register 15 BR R14 branch to the address in register 14 (which is actually an SVC 3 instruction in the Communications Vector Table)
Эквивалентный машинный код, исключающий BR для ясности:
SR R15,R15 put zero completion code into register 15 SVC 3 issue EXIT SVC to terminate the jobstep
Это имеет смысл, поскольку инициатор OS/360 изначально «прикрепляет» задачу шага задания с помощью макрокоманды ATTACH (SVC 42), а «раскручивание» эффекта этого макроса ATTACH (это инструкция SVC типа 2) должно быть дополнительной командой, а именно макросом EXIT (обязательно командой SVC типа 1, SVC 3).
См. также
[ редактировать ]- true — UNIX-эквивалентная программа «ничего не делать».
Ссылки
[ редактировать ]Тромбетта, Майкл и Финкельштейн Сью Кэролайн (1985). «ОС JCL и утилиты». Эддисон Уэсли. стр. 152.
- ^ Перейти обратно: а б «Центр знаний IBM» . www.ibm.com . Корпорация IBM. 2010 . Проверено 26 декабря 2016 г.
- ^ Шмидт, Себастьян (24 апреля 2004 г.). «Приложение «Коротко о правде: IEFBR14»» . www.miketaylor.org.uk . Майк Тейлор . Проверено 27 декабря 2016 г.
- ^ Бэгвелл, Дэвид (9 августа 2005 г.). «Коротко о правде, Приложение: IEFBR14: Разъяснение» . www.miketaylor.org.uk . Майк Тейлор . Проверено 27 декабря 2016 г.