Обработка исключительных ситуаций в ОС ОМ
Исключительной ситуацией в ОС ОМ называется возникновение во время выполнения программы такой ситуации, в результате которой дальнейшее выполнение программы либо невозможно, либо требуется специальная реакция программы на эту ситуацию.
Исключительные ситуации разбиты на группы. К нулевой группе относятся исключительные ситуации, определяемые аппаратурой. Это могут быть: ошибка памяти, передача управления за адресное пространство задачи, попытка обратиться за операндами вне адресного пространства задачи и т.д. Возникновение этих исключительных ситуаций приводит к прерываниям в задаче, т.е. к прекращению выполнения программы и передаче управления ядру ОС. К аппаратным исключительным ситуациям примыкает и исчерпание времени, заказанного для выполнения задания.
Следующие 31 группа ( с 1 по 31 ) относятся к ошибочным ситуациям, возникающим при некорректной работе с различными компонентами ОС, работающими в пространстве задачи пользователя и вне его (кластеры, системные задачи).
Последние 32 группы (с 32 по 63) - исключительные ситуации, объявляемые при работе пользовательских программ.
В каждой группе исключительные ситуации имеют внутреннюю (для группы) нумерацию. В последних 32 группах (пользовательских) пользователь сам определяет нумерацию.
В задаче можно определить подпрограмму, в которой будут обрабатываться исключительные ситуации. Если такая подпрограмма определена, то при возникновении исключительной ситуации на нее будет передано управление и сообщено о характере ошибки. Определение подпрограммы, реагирующей на исключительные ситуации, называется установкой уровня реакции. Этому соответствует примитив управления исключительными ситуациями. Одной такой установкой уровня реакции можно определить реакцию на совокупность групп исключительных ситуаций.
Существует обратная операция: снятие уровня реакции. Этой операции также соответствует примитив управления исключительными ситуациями. После обращения к этому примитиву заданная в установке уровня реакции процедура обработки исключительных ситуаций перестает реагировать на исключительные ситуации.
Внутри задачи может быть определено несколько уровней реакций на исключительные ситуации. Установка уровня реакции образует новый уровень с номером на единицу больше предыдущего. Этот номер можно получить в обратном параметре примитива установки уровня реакции. При возникновении исключительных ситуаций управление будет передано на подпрограмму, указанную в уровне с максимальным номером, реагирующем на данную группу исключительных ситуаций.
На самом нижнем уровне находится подпрограмма ОС, которая устанавливает реакцию на все группы исключительных ситуаций.
В подпрограмме, перехватившей исключительную ситуацию, можно организовать три типа обработки исключительных ситуаций:
1) После обработки исключительной ситуации в подпрограмме не продолжать прерванную программу.
2) После обработки исключительной ситуации можно продолжить выполнение прерванной программы либо с предопределенной точки, либо с точки возврата из подпрограммы, сгенерировавшей данную ситуацию.
3) В зависимости от какого-либо условия в подпрограмме обработки исключительных ситуаций можно пойти либо по первому пути, либо по второму.
В подпрограмме обработки исключительных ситуаций можно выдать стандартную диагностику ОС по данной исключительной ситуации в стандартный файл выдачи.
Для генерации исключительной ситуации у другой задачи существует примитив "Послать плохой ответ" (смотри "Примитивы сообщений в ОС ОМ").