STXIT es una instrucción macro para el sistema operativo DOS / 360 para la serie IBM System / 360 de computadoras mainframe y sus sucesores en series posteriores de mainframe, y también estaba disponible para las mainframes UNIVAC Serie 90 que ejecutan su sistema operativo TOS / DOS y posteriores. en su sistema operativo VS / 9 .
Fondo
La macro era una abreviatura del término "Establecer salida" y fue 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 / Finalmente en C ++ , Java y otros lenguajes orientados a objetos.
La macro STXIT proporcionaría una dirección de recuperación de errores para varios tipos importantes de errores y ciertas señales de operador. Los errores cubiertos dependían del sistema operativo. En general, los errores que proporcionó recuperación incluyeron
- violación de la protección de dirección (acceso a memoria que no es propiedad de la aplicación)
- violación de privilegios (intentos de ejecutar instrucciones privilegiadas)
- dividir cheque ( división por cero )
- comprobación de punto flotante ( subdesbordamiento o desbordamiento de punto flotante )
- ejecución del temporizador (donde un temporizador establecido por el programa ha expirado) esta interrupción en particular no es en realidad un error, es la forma en que un programa responde a un temporizador de vigilancia
- Interrumpir reanudación, una función en el UNIVAC Serie 90 en la que un usuario interactivo ha emitido una interrupción a un programa para ir al modo de comando, y emitió un comando INTR para hacer que el programa se reanude en el punto INTR. Si el programa no ha especificado una dirección de reanudación INTR, se rechaza el comando INTR. Esto es similar al comando REENTER en el sistema operativo RT-11 en computadoras digitales.
La interrupción del temporizador STXIT proporcionó un mecanismo para muestrear la ejecución del programa y fue utilizada por varios analizadores de rendimiento heredados. Esencialmente, se recopiló un PSW para cada intervalo de tiempo y se usó para un análisis posterior para determinar los puntos calientes .
La verificación de programas STXIT proporcionó un mecanismo para la animación de programas mediante la introducción deliberada de códigos de operación no válidos (sobre la marcha) en ubicaciones en los programas de destino. Una vez que se ingresó la recuperación de salida, el código de operación original se restauraría y estaría listo para su posterior reanudación y se establecería una nueva ubicación.
Formato macro
El formato de la llamada de macro dependía del sistema en el que se utilizaba.
IBM DOS / VSE
Para DOS / VSE era una de dos formas, o la llamada de macro para establecer (crear) una rutina STXIT para manejar el evento apropiado, o una llamada de macro para desestablecer (ya no manejar) el evento. [1] Para establecer una rutina STXIT, codificaría:
[ etiqueta ] STXIT {AB | IT | PC | OC | TT}, RoutineAddress , SaveArea [, OPTION = {DUMP | NODUMP}] comentario
Dónde
- etiqueta : la etiqueta opcional para esta declaración.
- Primer argumento: uno de AB , TI , PC , OC , o Se debe utilizar TT . Estos indicaron qué evento estaba manejando para esa llamada STXIT en particular. Excepto por el manejador AB, una rutina del manejador STXIT se completa mediante el uso de la macro EXIT. Para manejar más de un evento, se deben usar múltiples invocaciones de la macro, cada una especificando un solo evento. Estos códigos indican:
- AB: terminación anormal de la tarea. Se finaliza una tarea que no sea debido a la emisión de una macro CANCEL, DETACH, DUMP o EOJ. El parámetro OPCIÓN = solo se utiliza con este tipo de rutina. Esto determina si se emite un volcado de programa una vez que se completa la rutina STXIT. Si ocurre una terminación anormal de la tarea sin una rutina STXIT para manejarla, el programa termina con un error. AB también se utiliza si hay un evento de PC durante cualquier otra rutina STXIT. Una rutina AB no puede salir para regresar al programa que falla, la rutina debe completarse con una solicitud para terminar el programa mediante una macro EOJ, CANCEL, DETACH o DUMP.
- IT - Temporizador de intervalos. El programa creó un temporizador de intervalos y la cantidad de tiempo para medir ha expirado. Un evento de temporizador de intervalo se ignora si no existe una rutina STXIT para manejarlo. Si se producen eventos adicionales de temporizador de intervalo mientras se está dando servicio a un evento de temporizador de intervalo, se retrasan hasta que finaliza la rutina. El retorno de la rutina es 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 tenido un error de programación. La rutina STXIT puede proporcionar una recuperación limpia del programa en tales casos. Si ocurre un evento de PC cuando no se proporciona una rutina, el programa finaliza con un error. Si ocurre una PC durante una rutina STXIT (distinta de AB), se invoca la rutina AB. El regreso de la rutina de la PC es a la siguiente instrucción después de la que falla, a menos que la rutina STXIT termine el programa.
- OC - Comunicación con el operador. El operador ha pulsado la tecla de solicitud y ha emitido un comando MSG. Esto se ignora si no existe una rutina STXIT para manejarlo. El retorno de la rutina es a la instrucción que se habría ejecutado.
- TT: tiempo de espera del temporizador de la tarea. Si un temporizador de tareas está habilitado a través de la macro SETT, esta rutina se usa para manejarlos. Si ocurre un evento de temporizador de tarea y no existe una rutina STXIT para manejarlo, el temporizador se ignora. Si se produce un temporizador de tarea posterior mientras se encuentra en una rutina del controlador del temporizador de tarea, el evento se ignora. El retorno de la rutina es a la instrucción que se habría ejecutado.
- RoutineAddress : la etiqueta de la rutina para manejar este evento
- SaveArea : un área de 72 bytes en la que se guardan los contenidos de los registros generales, con la construcción estándar savearea (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 0 a 12). La 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 puede dispararse mientras se maneja un temporizador de tarea. Los registros de rutinas STXIT se guardan automáticamente allí cuando se invoca la rutina. , y se restauran automáticamente cuando se emite la macro EXIT
- Todo lo que comience un espacio después del último parámetro es un comentario.
Cuando se completa una rutina STXIT, regresa al punto donde fue invocada a través de la macro EXIT para regresar al punto apropiado donde se llama, a menos que sea una rutina AB, en cuyo caso no se le permite regresar y debe emitir una macro de terminación. (EOJ, CANCELAR, SEPARAR o DUMP).
Para desestablecer o cancelar una rutina STXIT, codificaría:
etiqueta STXIT {AB | IT | PC | OC | TT} comentario
para 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 de macro STXIT 'Apéndice del temporizador desactivado (DIE)', pero solo para usar en el modo Supervisor (clave 0, bit de privilegio PSW = 1). [2] El formato es:
etiqueta STXIT DIE, rtnaddr | (1)
Donde DIE significa que la rutina es para 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. En cambio, la dirección puede especificarse como (1) , lo que significa que la dirección se almacena en el registro 1. La rutina está sujeta a restricciones estrictas que incluyen no cambiar el contenido del registro o utilizar la mayoría de los SVC.
Univac VS / 9
Para Univac VS / 9 [3] fue
[ label ] STXIT R, [ abend ] [, [ progcheck ] [, [ intr ] [, [ setic ] [, [ time ] [, [ shutdown ]]]] comment
Dónde
- etiqueta era la etiqueta de rama opcional utilizada para la instrucción
- STXIT es el nombre de la macro a la llamada
- R se usa para indicar la clase de llamada STXIT que se realizará (hubo otros formatos creados más tarde)
- abend es la etiqueta de una rutina opcional utilizada para manejar la terminación anormal, que es cualquier terminación de programa que no sea la macro TERM, EXEC o EOJ. El programa tiene 30 segundos de tiempo de CPU o 5 minutos de tiempo de reloj de pared para recuperarse y terminar por sí mismo o solicitar la ejecución de un nuevo programa, o el programa se termina automáticamente. No tener una rutina de finalización anormal hace que el programa finalice con un error E079. El manejador de finalización anormal no puede regresar al programa, debe terminar con TERM o EOJ (o ejecutar otro programa con EXEC) cuando finalice. También se llama al manejador de finalización anormal si se produce una comprobación de programa en la rutina STXIT de comprobación de programa; una verificación de progreso durante una rutina de finalización anormal termina el programa inmediatamente con un error EO79, lo que permite al usuario solicitar un PDUMP si lo desea, a menos que haya un apagado en curso, en cuyo caso se muestra el error EO79 y el programa se cancela sin permitir que el usuario solicitar un PDUMP, y el usuario se desconecta automáticamente.
- progcheck es la etiqueta de una rutina opcional que se usa para manejar las verificaciones del programa, que son cualquier error en el programa. Si no hay una rutina progcheck, se invoca la rutina de finalización anormal; si tampoco existe una rutina de finalización anormal, el programa finaliza con un error EO79 y el usuario tiene la opción de solicitar un PDUMP. El retorno es a la instrucción posterior a la que falla, a menos que esta rutina especifique una nueva dirección. Aquí se pasa un progcheck que ocurre en cualquier rutina STXIT excepto progcheck y abend; una verificación de programa durante el manejador de verificación de programa hace que se invoque la rutina de finalización anormal. Una verificación de programa durante el controlador ABEND hace que el programa finalice.
- intr es la etiqueta de una rutina opcional que se usa para manejar el comando INTR desde el terminal del usuario después de que el usuario presiona la tecla de interrupción en el teclado. Si no existe una rutina INTR, se rechaza un comando INTR del usuario, pero el usuario puede emitir el comando R para reanudar en el punto de interrupción. Retorno es a la instrucción que se está ejecutando cuando el usuario emitió una pausa a menos que esta rutina especifique una nueva dirección.
- setic es la etiqueta de una rotación opcional utilizada 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 de manejo 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.
- time es la etiqueta de una rutina opcional que se utiliza si el usuario emitió un parámetro TIME = al ejecutar el programa para indicar que debería interrumpirse cuando se haya consumido la cantidad de tiempo de CPU. Cuando finaliza la rutina, el programa se interrumpirá y el usuario puede emitir un comando INTR para invocar la rutina INTR, o emitir el comando R para reanudar el programa cuando se interrumpió el tiempo. Si no existe una rutina de tiempo, la ruptura ocurre normalmente.
- shutdown es la etiqueta de una rutina opcional que se usa si el operador de la consola del sistema ha solicitado cerrar el tiempo compartido. El programa tiene un período corto para permitirse limpiar las funciones necesarias y salir. Cuando se completa la rutina, el programa finaliza y el usuario cierra la sesión automáticamente. Si no existe una rutina de apagado, el programa se cancela sin previo aviso y el usuario cierra la sesión automáticamente.
- todo lo que comenzaba un espacio después del último parámetro era 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 manejaba el tercer elemento, el formato sería
STXIT R ,,, RTN1
Para eliminar uno o más controladores, la macro STXIT se vuelve a invocar con una entrada en blanco para eliminar los controladores. Solo una llamada de macro STXIT puede estar en efecto en cualquier momento.
Si no se está manejando una clase de evento, se omite y habría dos (o más) comas seguidas para indicar esto. Una clase de evento no controlada hace que ese error sea manejado por el controlador "predeterminado" del sistema operativo. Para eventos que representan errores críticos (finalización anormal y verificación de programa), el programa finaliza 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 errores explícitamente en contraposición a la posición del parámetro en la macro STXIT.
El VS / 9 de Univac continuó admitiendo STXIT, pero también agregó la macro CRTN ("Rutina de contingencia") para proporcionar una recuperación de errores aún más poderosa, así como la recuperación de algunos errores que STXIT no capturó. Originalmente, CRTN y STXIT no se podían usar juntos. Las versiones posteriores del sistema operativo proporcionaron ambos; si se usaron una macro CRTN y una STXIT, la CRTN manejó cualquier evento no cubierto por STXIT; si ambos se usaron para cubrir un evento, la rutina STXIT manejó el evento y no se invocó la rutina CRTN.
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 de Univac VS / 9 , Sperry Univac, Cinnaminson, Nueva Jersey, 1974