IEFBR14 es un programa de utilidad de mainframe de IBM . Se ejecuta en todos los entornos de mainframe de IBM derivados de OS / 360 , incluido z / OS . Es un marcador de posición que devuelve el estado de salida cero, similar al comando verdadero en sistemas similares a UNIX . [1]
Propósito
Asignación (también llamada Iniciación)
En OS / 360 y los sistemas mainframe derivados, la mayoría de los programas nunca especifican archivos (normalmente llamados conjuntos de datos ) directamente, sino que los referencian indirectamente a través de las sentencias Job Control Language (JCL) que invocan los programas. Estas DD
declaraciones de definición de datos (o " ") pueden incluir un DISP=...
parámetro de "disposición" ( ) que indica cómo se administrará el archivo, si se creará un archivo nuevo o si se reutilizará uno antiguo; y si el archivo debe eliminarse al finalizar o conservarse; etc .
IEFBR14 se creó porque si bien las DD
sentencias pueden crear o eliminar archivos fácilmente, no pueden hacerlo sin un programa que se ejecute debido a una cierta peculiaridad del sistema de administración de trabajos, que siempre requiere que el iniciador realmente ejecute un programa, incluso si ese programa es efectivamente una declaración nula . [2] El programa utilizado en el JCL en realidad no necesita utilizar los archivos para provocar su creación o eliminación; la DD DISP=...
especificación hace todo el trabajo. Por lo tanto, se necesitaba un programa muy simple de no hacer nada para cumplir ese papel.
Por tanto, IEFBR14 se puede utilizar para crear o eliminar un conjunto de datos utilizando JCL.
Desasignación (también llamada rescisión)
Una razón secundaria para ejecutar IEFBR14 fue desmontar dispositivos (generalmente cintas o discos) que se habían dejado montados de un trabajo anterior, quizás debido a un error en el JCL de ese trabajo o porque el trabajo terminó con un error. En cualquier caso, los operadores del sistema a menudo necesitarían desmontar los dispositivos y, a DEALLOC
menudo, se proporcionaba una tarea iniciada para este propósito.
Simplemente ingresando el comando
S DEALLOC
en la consola del sistema se ejecutaba la tarea iniciada, que constaba de un solo paso . Sin embargo, debido al diseño de Gestión de trabajos, DEALLOC debe existir realmente en la biblioteca de procedimientos del sistema, SYS1.PROCLIB, para que no falle el comando de inicio.
Además, todas las tareas iniciadas deben ser un solo paso de trabajo, ya que el módulo "Control de tareas iniciadas " (STC) dentro del componente Gestión de trabajos del sistema operativo solo acepta trabajos de un solo paso y falla en todos los trabajos de varios pasos, sin excepción.
// PASO01 EJECUTAR PGM = IEFBR14
Análisis y validación
Al menos en z / OS, la bifurcación para ejecutar otro programa provocaría que el programa de llamada sea evaluado en busca de errores de sintaxis en ese punto. [1]
Nombrar
El "IEF" se deriva de una convención en las computadoras mainframe de que los programas suministrados por IBM se agruparon por función o creador y que cada grupo compartía un prefijo de tres letras. En OS / 360, la primera letra era casi siempre "I", y todos los programas producidos por el grupo de gestión de trabajos (incluido IEFBR14) usaban el prefijo "IEF". Otros prefijos comunes incluían "IEB" para programas de utilidad de conjuntos de datos, "IEH" para programas de utilidad del sistema y "IEW" para vinculación y carga de programas. [3] Otros componentes importantes fueron (y siguen siendo) "IEA" (supervisor del sistema operativo) e "IEC" ( supervisor de entrada / salida ).
Como se explica a continuación, "BR 14" era la función esencial del programa, simplemente volver al sistema operativo. Esta parte del nombre de un programa solía ser nemotécnica; por ejemplo, IEBUPDTE era la utilidad de conjunto de datos (IEB) que aplicaba actualizaciones (UPDTE) a los archivos de código fuente, e IEHINITT era la utilidad del sistema (IEH) que inicializaba (INIT) etiquetas de cinta magnética ( T).
Como se explica más adelante en "Uso", el nombre "BR14" proviene de la instrucción en lenguaje ensamblador de IBM " B ranch (a la dirección en) R egister 14 ", que por convención se usa para "regresar de una subrutina ". La mayoría de los primeros usuarios de OS / 360 estaban familiarizados con IBM Assembler Language y lo habrían reconocido de inmediato.
Uso
Ejemplo de JCL sería:
// IEFBR14 JOB ACCT , 'CONJUNTO DE DATOS DELETE' , MSGCLASS = J , CLASE = A // STEP0001 EXEC PGM = IEFBR14 // DELDD DD DSN = xxxxx . aaaa . zzzzz , // DISP = ( MOD , BORRAR , BORRAR ), UNIDAD = DASD
Para crear un conjunto de datos particionado:
// TZZZ84R NOTIFICACIÓN DE TRABAJO = & SYSUID , MSGCLASS = X // PASO01 EXEC PGM = IEFBR14 // DD1 DD DSN = TKOL084 . DEMO , DISP = ( NUEVO , CATLG , DELETE ), // DCB = ( RECFM = FB , LRECL = 80 , BLKSIZE = 80 , DSORG = PO ), // SPACE = ( TRK , ( 1 , 1 , 1 ), RLSE ), // UNIDAD = SYSDA
Implementación
IEFBR14 consistía inicialmente en una sola instrucción, una "Rama para registrar" 14. El mnemónico utilizado en IBM Assembler era BR y de ahí el nombre: IEF BR 14 . BR 14 es idénticamente equivalente a BCR 15,14 (Branch Always [máscara = 15 = siempre] a la dirección contenida en el registro de propósito general 14). BR es una pseudoinstrucción para BCR 15. El ensamblador del sistema acepta muchos casos de tales pseudoinstrucciones, como equivalentes lógicos de las instrucciones canónicas System / 360. La instancia canónica de BR 14 es BCR 15,14 .
La convención de enlace para OS / 360 y sus descendientes requiere que se invoque un programa con el registro 14 que contiene la dirección a la que devolver el control cuando está completo, y el registro 15 que contiene la dirección en la que el programa llamado se carga en la memoria; al finalizar, el programa carga un código de retorno en el registro 15, y luego se bifurca a la dirección contenida en el registro 14. Pero, inicialmente IEFBR14 no se codificó con estas características en mente, ya que IEFBR14 se usó inicialmente como una sección de control ficticia, una que simplemente devuelto a la persona que llama, no como un módulo ejecutable.
La versión original del programa no alteró el registro 15 en absoluto, ya que su aplicación original era un marcador de posición en ciertos módulos de carga que se generaban durante Sysgen (generación del sistema), no como un programa ejecutable, per se. Dado que IEFBR14 siempre fue invocado por el equivalente funcional de la instrucción canónica BALR 14,15 , el código de retorno en el registro 15 siempre fue distinto de cero. Más tarde, se agregaría una segunda instrucción para borrar el código de retorno para que saliera con un estado determinado, es decir, cero. Inicialmente, los programadores no usaban todas las propiedades del lenguaje de control de trabajos, de todos modos, por lo que un código de retorno indeterminado no era un problema. Sin embargo, posteriormente, los programadores utilizaron estas propiedades, por lo que un estado determinado se volvió obligatorio. Esta modificación a IEFBR14 no afectó de ninguna manera su uso original como marcador de posición.
El código de máquina para el programa modificado es:
SR R15, R15 ponen el código de finalización cero en el registro 15 BR R14 se bifurca a la dirección en el registro 14 (que en realidad es una instrucción SVC 3 en la tabla de vectores de comunicaciones)
El código de máquina equivalente, eliminando el BR para mayor claridad, es:
SR R15, R15 ponen el código de finalización cero en el registro 15 SVC 3 emite EXIT SVC para finalizar el paso de trabajo
Esto tiene mucho sentido ya que los / 360 Iniciador inicialmente "agregados" OS la tarea de trabajo a paso utilizando el ATTACH macro-instrucción (SVC 42), y "desenrollar" el efecto de esta ATTACH macro (que es un SVC enseñanza Tipo 2) mosto ser una instrucción complementaria, es decir, una macro EXIT (necesariamente una instrucción SVC de Tipo 1, SVC 3).
Ver también
- / bin / true - el programa "no hacer nada" equivalente a UNIX
Referencias
Trombetta, Michael y Finkelstein Sue Carolyn (1985). "OS JCL y utilidades". Addison Wesley. página 152.
- ^ a b "Centro de conocimiento de IBM" . www.ibm.com . IBM Corporation . Consultado el 26 de diciembre de 2016 .
- ^ Schmidt, Sebastian (24 de abril de 2004). "Apéndice Verdadero en pocas palabras: IEFBR14" . www.miketaylor.org.uk . Mike Taylor . Consultado el 27 de diciembre de 2016 .
- ^ Bagwell, David (9 de agosto de 2005). "Verdadero en un apéndice de la cáscara de nuez: IEFBR14: Aclaración" . www.miketaylor.org.uk . Mike Taylor . Consultado el 27 de diciembre de 2016 .