STXIT es una instrucción macro para el sistema operativo DOS/360 de la serie de ordenadores centrales IBM System/360 y sus sucesores en series de ordenadores centrales posteriores, y también estaba disponible para los ordenadores centrales UNIVAC Serie 90 que ejecutaban su sistema operativo TOS/DOS y, posteriormente, su sistema operativo VS/9 .
Fondo
La macro era una abreviatura del término "Set Exit" y era utilizada por programas escritos en lenguaje ensamblador . Se utiliza para crear una rutina de recuperación en caso de errores del programa, similar a los manejadores de señales en C y los bloques Try/Finally en C++ , lenguajes Java que admiten el manejo de excepciones .
La macro STXIT proporcionaría una dirección de recuperación de errores para varios tipos importantes de errores y ciertas señales del operador. Los errores cubiertos dependían del sistema operativo. En general, los errores para los que proporcionaba recuperación incluían:
- Violación de la protección de direcciones (acceso a memoria que no pertenece a la aplicación)
- Violación de privilegios (intentos de ejecutar instrucciones privilegiadas)
- comprobación de división ( división por cero )
- Verificación de punto flotante ( desbordamiento o subdesbordamiento de punto flotante )
- Agotamiento del temporizador (cuando un temporizador configurado por el programa ha expirado): esta interrupción en particular no es realmente un error, sino la forma en que un programa responde a un temporizador de vigilancia.
- La reanudación tras interrupción es una función de la serie UNIVAC 90 que permite a un usuario interactivo interrumpir un programa para pasar al modo de comandos y, posteriormente, ejecutar el comando INTR para reanudar la ejecución desde el punto INTR. Si el programa no ha especificado una dirección de reanudación INTR, el comando INTR se rechaza. Esto es similar al comando REENTER del sistema operativo RT-11 de los ordenadores Digital.
La interrupción del temporizador STXIT proporcionaba un mecanismo para muestrear la ejecución del programa y era utilizada por varios analizadores de rendimiento antiguos. Básicamente, se recopilaba un PSW para cada intervalo de tiempo y se utilizaba para un análisis posterior con el fin de determinar los puntos críticos .
La comprobación del programa STXIT proporcionaba un mecanismo para la animación del programa mediante la introducción deliberada de códigos de operación no válidos (sobre la marcha) en ubicaciones de los programas objetivo. Una vez que se activaba la recuperación de salida, se restauraba el código de operación original, listo para su posterior reanudación y la asignación de una nueva ubicación.
Formato macro
El formato de la llamada a la macro dependía del sistema en el que se utilizaba.
IBM DOS/VSE
Para DOS/VSE existían dos formas: la llamada a la macro para establecer (crear) una rutina STXIT que manejara el evento correspondiente, o la llamada a la macro para desestablecer (dejar de manejar) el evento. [ 1 ] Para establecer una rutina STXIT, se codificaría:
[ etiqueta ] STXIT {AB|IT|PC|OC|TT}, Dirección de rutina , GuardarArea [,OPCIÓN= {DUMP|NODUMP}] comentarioDónde
label- la etiqueta opcional para esta declaración.- Primer argumento: Debe utilizarse uno de los siguientes códigos: AB , IT , PC , OC o TT . Estos indican qué evento se está manejando para esa llamada STXIT en particular. Excepto para el manejador AB, una rutina de manejador STXIT se completa mediante el uso de la macro EXIT. Para manejar más de un evento, deben utilizarse varias invocaciones de la macro, cada una especificando un único evento. Estos códigos indican:
- AB - Terminación anormal de tarea. Una tarea se termina por una causa distinta a la emisión de una macro CANCEL, DETACH, DUMP o EOJ. El parámetro OPTION= solo se utiliza con este tipo de rutina. Esto determina si se emite un volcado de programa una vez que la rutina STXIT finaliza. Si se produce una terminación anormal de tarea sin una rutina STXIT que la gestione, el programa finaliza con un error. AB también se utiliza si hay un evento de comprobación de programa durante cualquier otra rutina STXIT. Una rutina AB no puede salir para volver al programa que falla; la rutina debe finalizar con una solicitud para terminar el programa mediante una macro EOJ, CANCEL, DETACH o DUMP.
- IT - Temporizador de intervalo. El programa creó un temporizador de intervalo y el tiempo de medición ha expirado. Un evento de temporizador de intervalo se ignora si no existe una rutina STXIT para gestionarlo. Si se producen eventos de temporizador de intervalo adicionales mientras se está atendiendo uno, se retrasan hasta que finaliza la rutina. El retorno de la rutina corresponde a la instrucción que se habría ejecutado.
- PC - Verificación del programa. El programa ha ejecutado una instrucción ilegal, ha utilizado datos de forma no permitida o ha sufrido algún otro error de programación. La rutina STXIT permite una recuperación limpia del programa en estos casos. Si se produce un evento de Verificación del programa sin que se haya proporcionado ninguna rutina, el programa finaliza con un error. Si se produce un evento de Verificación del programa durante una rutina STXIT (que no sea AB), se invoca la rutina AB. El retorno de la rutina PC implica la ejecución de la siguiente instrucción tras la que falló, a menos que la rutina STXIT finalice el programa.
- OC - Comunicación del operador. El operador ha pulsado la tecla de solicitud y ha emitido un comando MSG. Este comando se ignora si no existe una rutina STXIT para procesarlo. El retorno de la rutina corresponde a la instrucción que se habría ejecutado.
- TT - Agotamiento del temporizador de tarea. Si se habilita un temporizador de tarea mediante la macro SETT, esta rutina se utiliza para gestionarlo. Si se produce un evento de temporizador de tarea y no existe ninguna rutina STXIT para gestionarlo, el temporizador se ignora. Si se produce un evento de temporizador de tarea posterior mientras se está en una rutina de gestión de temporizador de tarea, el evento se ignora. La rutina devuelve la instrucción que se habría ejecutado.
RoutineAddress- la etiqueta de la rutina para manejar este eventoSaveArea- Un área de 72 bytes para guardar el contenido de los registros generales, con la estructura estándar de área de guardado (las dos primeras palabras son punteros hacia atrás y hacia adelante, y las palabras restantes se utilizan para guardar los registros 14, 15 y del 0 al 12). Cada rutina STXIT debe tener su propia área de guardado, ya que es posible que una rutina STXIT sea interrumpida por otra; por ejemplo, el temporizador de intervalo podría activarse mientras se gestiona un temporizador de tarea. Los registros de las rutinas STXIT se guardan automáticamente allí cuando se invoca la rutina y se restauran automáticamente cuando se ejecuta la macro EXIT.- Todo lo que comienza un espacio después del último parámetro es un comentario.
Cuando una rutina STXIT finaliza, regresa al punto donde fue invocada a través de la macro EXIT para volver al punto apropiado donde fue llamada, a menos que sea una rutina AB, en cuyo caso no se le permite regresar y debe emitir una macro de terminación (EOJ, CANCEL, DETACH o DUMP).
Para desactivar o cancelar una rutina STXIT, se debe codificar:
etiqueta STXIT {AB|IT|PC|OC|TT} comentariopara cancelar la rutina para ese evento. Todo lo que comienza un espacio después del parámetro es un comentario.
IBM z/VSE
Para z/System VSE, todas las funciones STXIT proporcionadas anteriormente por IBM DOS/VSE siguen siendo compatibles. Además, está disponible una nueva función macro STXIT 'Disabled Timer Appendage (DIE)', pero solo para su uso en modo supervisor (tecla 0, bit de privilegio PSW = 1). [ 2 ] El formato es:
etiqueta STXIT DIE, rtnaddr |(1)
Donde DIE significa que la rutina debe manejar un "Evento de temporizador de intervalo deshabilitado", y rtnaddr es la dirección para manejar la expiración de un temporizador de intervalo cuando se codifica un evento Set TOD. La dirección también puede especificarse como (1) , lo que significa que la dirección está almacenada en el registro 1. La rutina está sujeta a restricciones estrictas, incluyendo no modificar el contenido de ningún registro ni utilizar la mayoría de los SVC.
Univac VS/9
Para Univac VS/9 [ 3 ] fue
[ etiqueta ] STXIT R,[ abend ][,[ progcheck ][,[ intr ][,[ setic ][,[ tiempo ][,[ shutdown ]]]] comentario
Dónde
labelera la etiqueta de rama opcional utilizada para la instrucción- STXIT es el nombre de la macro a la que se llama
- La letra R se utiliza para indicar la clase de llamada STXIT que se va a realizar (posteriormente se crearon otros formatos).
abendes la etiqueta de una rutina opcional utilizada para manejar la terminación anormal, que es cualquier terminación del programa que no sea la macro TERM, EXEC o EOJ. El programa tiene 30 segundos de tiempo de CPU o 5 minutos de tiempo real para recuperarse y terminarse a sí mismo o solicitar la ejecución de un nuevo programa, o el programa se termina automáticamente. La falta de unaabendrutina hace que el programa se termine con un error E079. Elabendmanejador no puede regresar al programa, debe terminar con TERM o EOJ (o ejecutar otro programa con EXEC) cuando se complete. Elabendmanejador también se llama siprogcheckocurre un en laprogcheckrutina STXIT; unprogcheckdurante una rutina de terminación anormal termina el programa inmediatamente con un error EO79, lo que permite al usuario solicitar un PDUMP si lo desea, a menos que esté en curso un apagado en el que se muestra el error EO79 y el programa se cancela sin permitir que el usuario solicite un PDUMP, y el usuario cierra sesión automáticamente.progcheckes la etiqueta de una rutina opcional utilizada para manejar comprobaciones del programa, que son cualquier error en el programa. Si unaprogcheckrutina no está presente,abendse invoca la rutina; si noabendexiste ninguna rutina, el programa termina con un error EO79 y el usuario tiene la opción de solicitar un PDUMP. El retorno es a la instrucción después de la que falló a menos que esta rutina especifique una nueva dirección. Unprogcheckque ocurre en cualquier rutina STXIT exceptoprogcheckyabendse pasa aquí; una comprobación del programa durante el manejador de comprobación del programa hace que se invoque laabendrutina. Una comprobación del programa durante el manejador ABEND hace que el programa termine.intres la etiqueta de una rutina opcional que se utiliza para gestionar el comando INTR desde la terminal del usuario después de que este pulse la tecla break en el teclado. Si no existe ninguna rutina INTR, el comando INTR del usuario se rechaza, pero el usuario puede emitir el comando R para reanudar la ejecución desde el punto de interrupción. El retorno corresponde a la instrucción que se estaba ejecutando cuando el usuario emitió un break, a menos que esta rutina especifique una nueva dirección.setices la etiqueta de una rutina opcional que se usa si el programa emitió la macro SETIC para crear un temporizador de condición de interrupción. El temporizador IC se ignora si no existe una rutina controladora para él. El retorno es a la instrucción después de que ocurre la interrupción, a menos que esta rutina especifique una nueva dirección.timees la etiqueta de una rutina opcional que se utiliza si el usuario especificó el parámetro TIME= al ejecutar el programa para indicar que este debe interrumpirse cuando se haya consumido la cantidad de tiempo de CPU especificada. Cuando la rutina finaliza, el programa se detiene y el usuario puede usar el comando INTR para invocar la rutina INTR o el comando R para reanudar el programa cuando se haya interrumpido el tiempo. Si notimeexiste ninguna rutina, la interrupción se produce normalmente.shutdownEsta es la etiqueta de una rutina opcional que se utiliza si el operador de la consola del sistema ha solicitado el cierre del servicio de tiempo compartido. El programa dispone de un breve periodo para limpiar las funciones necesarias y finalizar. Al completarse la rutina, el programa se cierra y el usuario cierra sesión automáticamente. Si no existe ninguna rutina de cierre, el programa se cancela sin previo aviso y el usuario cierra sesión automáticamente.- Todo lo que empieza un espacio después del último parámetro es un comentario.
Como la macro STXIT en VS/9 se basaba en parámetros, las entradas faltantes debían ingresarse con comas, por ejemplo, si solo se estaba manejando el tercer elemento, el formato sería
STXIT R,,,RTN1
Para eliminar uno o más manejadores, se vuelve a invocar la macro STXIT con una entrada en blanco para los manejadores que se van a eliminar. Solo una llamada a la macro STXIT puede estar activa a la vez.
Si una clase de evento no se está manejando, se omite y se indica con dos (o más) comas seguidas. Una clase de evento no manejada hace que el error sea manejado por el manejador "predeterminado" del sistema operativo. Para eventos que representan errores críticos (abend y progcheck), el programa se termina con un error EO79 y el usuario tiene la opción de solicitar un PDUMP; para eventos no críticos, el evento se ignora.
Desarrollos posteriores
Los sistemas de recuperación de errores posteriores permitirían especificar los errores de forma explícita, en lugar de hacerlo mediante la posición del parámetro en la macro STXIT.
El sistema operativo VS/9 de Univac continuó siendo compatible con STXIT, pero también añadió la macro CRTN ("Rutina de Contingencia") para ofrecer una recuperación de errores aún más potente, así como la recuperación de algunos errores que STXIT no detectaba. Originalmente, CRTN y STXIT no podían utilizarse conjuntamente. Las versiones posteriores del sistema operativo permitieron su uso si se utilizaban tanto una macro CRTN como una STXIT, la CRTN gestionaba los eventos no cubiertos por STXIT; si se utilizaban ambas para cubrir un evento, la rutina STXIT lo gestionaba y la rutina CRTN no se ejecutaba.
Referencias
- ↑ Referencia de macros DOS/VSE , Doc. No. GC24-5140-0, International Business Machines Corporation, Endicott, Nueva York, 1979.
- ↑ IBM z/VSE VSE Central Functions Supervisor Calls and Internal Macros , International Business Machines Corporation, White Plains, NY, 1985, 2007
- ↑ Manual del programador Univac VS/9 , Sperry Univac, Cinnaminson, NJ, 1974
- Sistemas operativos para mainframes de IBM