STXIT - STXIT - Wikipedia

STXIT это инструкция макроса для DOS / 360 Операционная система для IBM System / 360 серия мэйнфреймы, и его преемники на более поздних сериях мэйнфреймов, а также был доступен для UNIVAC серии 90 мейнфреймы под управлением операционной системы TOS / DOS, а затем VS / 9 Операционная система.

Фон

Макрос был аббревиатурой от термина "Установить выход" и использовался программами, написанными на язык ассемблера. Он используется для создания процедуры восстановления в случае ошибок программы, аналогично сигнал обработчики в C и Попробуйте / Наконец блоки в C ++, Ява и другие объектно-ориентированные языки.

Макрос STXIT предоставит адрес исправления ошибок для нескольких основных типов ошибок и определенных сигналов оператора. Описанные ошибки зависели от операционной системы. В общем, ошибки, которые он исправил, включали

  • нарушение защиты адреса (доступ к памяти, не принадлежащей приложению)
  • нарушение привилегий (попытки выполнить привилегированные инструкции)
  • разделить чек (деление на ноль )
  • проверка с плавающей запятой (с плавающей запятой переполнение или же переполнение )
  • истечение таймера (когда таймер, установленный программой, истек) этот конкретный прерывать на самом деле не ошибка, это то, как программа реагирует на сторожевой таймер
  • Прерывание возобновления, функция на UNIVAC серии 90 где интерактивный Пользователь сделал паузу в программе, чтобы перейти в командный режим, и выдал команду INTR, чтобы заставить программу возобновить работу в точке INTR. Если программа не указала адрес возобновления INTR, команда INTR отклоняется. Это похоже на команду REENTER на РТ-11 операционная система на цифровых компьютерах.

Прерывание по таймеру STXIT обеспечивает механизм для выборки выполнения программы и используется различными устаревшими анализаторами производительности. По сути, PSW собирался для каждого временного интервала и использовался для последующего анализа для определения горячие точки.

Программа проверки STXIT предоставила механизм для программа анимация через преднамеренное введение неверных кодов операций (на лету) в места в целевых программах. После того, как было введено восстановление после выхода, исходный код операции будет восстановлен для последующего возобновления и установки нового местоположения.

Формат макроса

Формат вызова макроса зависел от системы, в которой он использовался.

IBM DOS / VSE

Для DOS / VSE это была одна из двух форм: либо макрос-вызов для установки (создания) подпрограммы STXIT для обработки соответствующего события, либо макрос-вызов для отмены (прекращения обработки) события.[1] Чтобы установить процедуру STXIT, вы должны написать:

[метка] STXIT {AB | IT | PC | OC | TT}, RoutineAddress, SaveArea [, OPTION = {DUMP | NODUMP}] комментарий

Где

  • метка - необязательная метка для этого утверждения.
  • Первый аргумент: один из AB, ЭТО, ПК, OC, или же TT должны быть использованы. Они указали, какое событие вы обрабатываете для этого конкретного вызова STXIT. За исключением обработчика AB, процедура обработчика STXIT завершилась с помощью макроса EXIT. Для обработки нескольких событий необходимо использовать несколько вызовов макроса, каждый из которых указывает одно событие. Эти коды обозначают:
    • AB - Аномальное завершение задачи. Задача завершается не из-за выдачи макроса CANCEL, DETACH, DUMP или EOJ. Параметр OPTION = используется только с этим типом подпрограммы. Это определяет, выдается ли дамп программы после завершения подпрограммы STXIT. Если аварийное завершение задачи происходит без обработки подпрограммы STXIT, программа завершается с ошибкой. AB также используется, если во время любой другой процедуры STXIT происходит событие ПК. Подпрограмма AB не может выйти, чтобы вернуться к неисправной программе, подпрограмма должна завершиться запросом на завершение программы с помощью макроса EOJ, CANCEL, DETACH или DUMP.
    • IT - интервальный таймер. Программа создала интервальный таймер, и время для измерения истекло. Событие интервального таймера игнорируется, если для его обработки не существует подпрограммы STXIT. Если дополнительные события интервального таймера происходят во время обслуживания события интервального таймера, они задерживаются до выхода из процедуры. Возврат из подпрограммы - это инструкция, которая должна была бы выполняться.
    • ПК - Проверка программы. Программа выполнила недопустимую инструкцию, использовала данные недопустимым образом или иным образом имела ошибку программирования. В таких случаях процедура STXIT может обеспечить полное восстановление программы. Если событие ПК происходит при отсутствии подпрограммы, программа завершается с ошибкой. Если ПК происходит во время процедуры STXIT (кроме AB), вызывается процедура AB. Возврат из подпрограммы ПК осуществляется к следующей инструкции после отказавшей, если подпрограмма STXIT не завершает программу.
    • OC - ​​Операторская связь. Оператор нажал кнопку запроса и выдал команду MSG. Это игнорируется, если для его обработки не существует подпрограммы STXIT. Возврат из подпрограммы - это инструкция, которая была бы выполнена.
    • TT - истечение таймера задания. Если таймер задач включен с помощью макроса SETT, эта процедура используется для их обработки. Если происходит событие таймера задачи и не существует подпрограммы STXIT для его обработки, таймер игнорируется. Если последующий таймер задачи срабатывает в подпрограмме обработчика таймера задачи, событие игнорируется. Возврат из подпрограммы - это инструкция, которая была бы выполнена.
  • RoutineAddress - метка процедуры для обработки этого события
  • SaveArea - 72-байтовая область для сохранения содержимого общих регистров со стандартной конструкцией savearea (первые два слова являются указателями назад и вперед, а оставшиеся слова используются для сохранения регистров 14,15 и 0–12. Каждый STXIT подпрограмма должна иметь свою собственную область сохранения, так как одна процедура STXIT может быть прервана другой, например, интервальный таймер может сработать во время обработки таймера задачи. Регистры подпрограмм STXIT автоматически сохраняются там при вызове подпрограммы, и восстанавливаются автоматически при запуске макроса EXIT.
  • Все, что начинается с одного пробела после последнего параметра, является комментарием.

Когда подпрограмма STXIT завершается, она возвращается в точку, в которой она была вызвана с помощью макроса EXIT, чтобы вернуться в соответствующую точку, где была вызвана, если это не подпрограмма AB, и в этом случае ей не разрешено возвратиться, и она должна выдать макрос завершения. (EOJ, CANCEL, DETACH или DUMP).

Чтобы деинсталлировать или отменить процедуру STXIT, вы должны написать код:

метка STXIT {AB | IT | PC | OC | TT} комментарий

чтобы отменить процедуру для этого события. Все, что начинается с одного пробела после параметра, является комментарием.

IBM z / VSE

Для z / System VSE по-прежнему поддерживаются все функции STXIT, ранее предоставленные IBM DOS / VSE. Кроме того, доступна новая функция макроса STXIT «Отключенное приложение таймера (DIE)», но только для использования в режиме супервизора (ключ 0, бит привилегии PSW = 1).[2] Формат:

метка STXIT DIE,rtnaddr|(1)

Где DIE означает, что процедура предназначена для обработки «События отключенного интервала таймера», и rtnaddr - это адрес для обработки истечения интервального таймера при кодировании события Set TOD. Вместо этого адрес можно указать как (1), что означает, что адрес хранится в регистре 1. Процедура подчиняется строгим ограничениям, включая отсутствие изменения содержимого регистра или использование большинства SVC.

Юнивак VS / 9

Для Univac VS / 9[3] это было

[метка] STXIT R, [прервать][,[progcheck][,[intr][,[сетик][,[время][,[неисправность]]]] комментарий

Где

  • метка была ли дополнительная метка ветви, используемая для инструкции
  • STXIT - это имя макроса для вызываемого
  • R используется для обозначения класса выполняемого вызова STXIT (позже были созданы и другие форматы)
  • прервать - это метка необязательной процедуры, используемой для обработки аварийного завершения, которым является любое завершение программы, кроме макроса TERM, EXEC или EOJ. У программы есть 30 секунд времени процессора или 5 минут времени настенных часов для восстановления и завершения себя или запроса выполнения новой программы, или программа завершается автоматически. Отсутствие процедуры аварийного завершения приводит к завершению программы с ошибкой E079. Обработчик аварийного завершения не может вернуться в программу, он должен завершиться с помощью TERM или EOJ (или выполнить другую программу с помощью EXEC) по завершении. Обработчик аварийного завершения также вызывается, если в подпрограмме progcheck STXIT происходит проверка программы; проверка программы во время процедуры аварийного завершения немедленно завершает программу с ошибкой EO79, позволяя пользователю при желании запросить PDUMP, если не выполняется завершение работы, и в этом случае отображается ошибка EO79, и программа отменяется, не позволяя пользователю запросить PDUMP, и пользователь автоматически выйдет из системы.
  • progcheck - это метка необязательной процедуры, используемой для обработки программных проверок, то есть любых ошибок в программе. Если подпрограмма progcheck отсутствует, вызывается подпрограмма аварийного завершения; если подпрограммы аварийного завершения также не существует, программа завершается с ошибкой EO79, и пользователь имеет возможность запросить PDUMP. Возврат выполняется к инструкции после неудачной, если эта подпрограмма не указывает новый адрес. Здесь передается progcheck, встречающийся в любой подпрограмме STXIT, кроме progcheck и abend; проверка программы в течение обработчик проверки программы вызывает вызов подпрограммы аварийного завершения. Проверка программы во время обработчика ABEND приводит к завершению программы.
  • intr - это метка необязательной процедуры, используемой для обработки команды INTR с пользовательского терминала после того, как пользователь нажимает клавишу прерывания на клавиатуре. Если подпрограммы INTR не существует, команда INTR пользователя отклоняется, но пользователь может подать команду R для возобновления работы в точке прерывания. Возврат выполняется к инструкции, выполняемой, когда пользователь выдал паузу, если эта подпрограмма не указывает новый адрес.
  • сетик - это метка необязательного вращающегося элемента, используемого, если программа выдает макрос SETIC для создания таймера состояния прерывания. Таймер IC игнорируется, если для него не существует процедуры обработки. Возврат выполняется к инструкции после возникновения прерывания, если эта подпрограмма не указывает новый адрес.
  • время - это метка необязательной подпрограммы, используемая, если пользователь ввел параметр TIME = при выполнении программы, чтобы указать, что она должна прерваться, когда количество процессорного времени будет израсходовано. Когда процедура завершается, программа прерывается, и пользователь может выполнить команду INTR, чтобы вызвать процедуру INTR, или команду R, чтобы возобновить выполнение программы, когда время прервано. Если временной программы не существует, перерыв происходит нормально.
  • неисправность - это метка необязательной процедуры, используемой, если оператор системной консоли запросил отключение разделения времени. У программы есть короткий период времени, чтобы позволить себе очистить все необходимые функции и завершить работу. Когда процедура завершается, программа завершается, и пользователь автоматически выходит из системы. Если процедуры выключения не существует, программа отменяется без предупреждения, и пользователь автоматически выходит из системы.
  • все, что начиналось на один пробел после последнего параметра, было комментарием.

Поскольку макрос STXIT в VS / 9 был основан на параметрах, отсутствующие записи нужно было вводить с запятыми, например если бы обрабатывался только третий элемент, формат был бы

      STXIT R ,,, RTN1

Чтобы удалить один или несколько обработчиков, повторно вызывается макрос STXIT с пустой записью для удаленных обработчиков. В любое время может действовать только один вызов макроса STXIT.

Если класс события не обрабатывается, он опускается, и для обозначения этого в строке будут стоять две (или более) запятые. Необработанный класс события приводит к тому, что эта ошибка обрабатывается обработчиком "по умолчанию" операционной системы. Для событий, представляющих критические ошибки (abend и progcheck), программа завершается с ошибкой EO79, и пользователь имеет возможность запросить PDUMP; для некритических событий событие игнорируется.

Более поздние разработки

Более поздние системы исправления ошибок будут предусматривать явное указание ошибок, а не положение параметра в макросе STXIT.

Univac's VS / 9 продолжал поддерживать STXIT, но также добавил CRTN («Процедура непредвиденных обстоятельств»), чтобы обеспечить еще более эффективное восстановление после ошибок, а также восстановление некоторых ошибок, которые STXIT не фиксировал. Первоначально CRTN и STXIT не могли использоваться вместе. Более поздние выпуски операционной системы предусматривали и то, и другое; если использовались и CRTN, и макрос STXIT, CRTN обрабатывала любые события, не охваченные STXIT; если оба использовались для покрытия события, подпрограмма STXIT обрабатывала событие, а подпрограмма CRTN не вызывалась.

Рекомендации

  1. ^ Справочник по макросам DOS / VSE, Док. No. GC24-5140-0, International Business Machines Corporation, Endicott, New York, 1979.
  2. ^ IBM z / VSE VSE Central Functions Supervisor Вызовы и внутренние макросы, Международная корпорация бизнес-машин, Уайт-Плейнс, Нью-Йорк, 1985, 2007
  3. ^ Руководство программиста Univac VS / 9, Сперри Юнивак, Синнаминсон, Нью-Джерси, 1974 г.