Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
os2.doc
Скачиваний:
0
Добавлен:
20.06.2023
Размер:
246.78 Кб
Скачать

2.7. Исключения

2.7.1. Самая общая характеристика исключений

Исключения отнесены нами к асинхронным методам замены контекста, т. к. неизвестен момент возникновения исключения. Это свойство сближает исключения с прерываниями. Различие состоит в том, что прерывание вызывается внешней причиной - это сигнал от внешней среды, а исключение – это внутренняя причина смены контекста, связанная с ходом выполнения инструкций программы. Под исключением понимают сигнал об отклонении в выполнении инструкции.

Исключения могут активизироваться по следующим причинам:

  1. Неправильные данные (например, деление на ноль);

  1. Попытка выполнения инструкции, не соответствующей уровню защиты;

  1. Невыполняемая инструкция (например, адрес вне памяти).

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

Рассмотрим сначала исключения на низком уровне.

2.7.2 Исключения на низком уровне

Исключения на низком уровне рассмотрим на примере архитектуры Intel процессора. Архитектурно существует ряд ошибочных ситуаций, в которых процессор возбуждает прерывания, интерпретируемые как исключения. Ниже приведен перечень этих ситуаций:

Номер исключения и причина:

  1. Ошибка деления

  2. Пошаговое прерывание при отладке

  3. Немаскируемое прерывание

  4. Останов при отладке

  5. Переполнение

  6. Выход за границы массива

  7. Недопустимый код операции

  8. Отсутствие сопроцессора

  9. Двойная ошибка

  10. Превышение сегмента сопроцессором

  11. Неверный сегмент состояния задачи

  12. Сегмент отсутствует

  13. Ошибка стека

  14. Общая ошибка защиты

  15. Страничная ошибка

  16. Резерв

  17. Ошибка сопроцессора

Операционная система берет на себя обработку исключений. Если это ошибка программы, например, деление на ноль, то программа аварийно завершается. В некоторых случаях, когда возможно исправление ошибки, после ее исправления программа продолжает выполняться. Типичным примером является исключение 11 по отсутствию сегмента. В этом случае отсутствующий сегмент ищется на диске, загружается в память и программа продолжает работу.

В случае возникновения ошибки, не предусмотренной исключениями 0-12 и 14-16, возникает исключение 13 – общая ошибка защиты. Это ошибка - General Protection Fault, часто возникавшая в программах под Windows в ранних версиях. Внешние причины этой ошибки могут быть самыми разнообразными. Ниже приведен перечень типичных причин возникновения этого исключения:

  1. Передача управления неисполняемому сегменту;

  2. Загрузка регистра SS селектором исполняемого сегмента или сегмента без разрешения записи:

  3. Загрузка SS, DS, ES, FS, GS селектором системного сегмента;

  4. Загрузка DS, ES, FS, GS селектором исполняемого сегмента, который не является читаемым;

  5. Передача управления с нарушением правил привилегий;

  6. Загрузка CS, SS, DS, ES, FS, GS селектором, указывающим на локальную таблицу дескрипторов, когда эта таблица не определена;

  7. Загрузка SS нулевым селектором;

  8. Превышение предела сегмента;

  9. Превышение предела таблицы;

  10. Попытка записи в сегмент, разрешенный только для чтения;

  11. Попытка чтения без разрешения из исполняемого сегмента;

  12. Попытка доступа к памяти, когда используемый сегментный регистр содержит нуль-селектор;

  13. Попытка установить страничный механизм в реальном режиме;

  14. Неправильная обработка прерывания в режиме V86;

  15. Превышение максимальной длины команды.

После таких ошибок программа аварийно завершает свою работу.

Иногда, особенно в интерактивных программах, есть возможность исправить ошибку и вернуться к повторению действия, например, при делении на ноль, может быть, есть возможность изменить делитель. В этом случае нецелесообразно аварийно завершать работу программы. Наличие подобных ситуаций является первой причиной появления программных средств обработки исключений.

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

Соседние файлы в предмете Операционные системы