Ловушки и прерывания тесно связаны. Ловушки относятся к типу исключение , а исключения аналогичны прерываниям.
Intel x86 определяет две перекрывающиеся категории: векторные события ( прерывания против исключения ) и классы исключений ( ошибки против ловушки против 1018 * прерывает *).
Все цитаты в этом посте относятся к апрельской версии Руководства разработчика программного обеспечения Intel . Для (окончательной и сложной) точки зрения x86 я рекомендую прочитать главу SDM об обработке прерываний и исключений.
Векторные мероприятия
Векторные события ( прерывания и исключения ) приводят к тому, что процессор переходит в обработчик прерываний после сохранения большей части состояния процессора (достаточно, чтобы выполнение могло продолжаться с этого момента позже) .
Исключения и прерывания имеют идентификатор, называемый вектором, который определяет, к какому обработчику прерываний переходит процессор. Обработчики прерываний описаны в таблице дескрипторов прерываний.
Прерывания
Прерывания происходят в случайные моменты времени во время выполнения программы в ответ на сигналы от оборудования. Системное аппаратное использование
прерывания для обработки внешних по отношению к процессору событий, таких как
запросы на обслуживание периферийных устройств. Программное обеспечение также может генерировать
прерывает выполнение команды INT n.
Исключения
Исключения возникают, когда процессор обнаруживает ошибку во время
выполнение инструкции, такой как деление на ноль. Процессор
обнаруживает различные состояния ошибок, включая нарушения защиты,
сбои страниц и внутренние неисправности машины.
Исключительные классификации
Исключения классифицируются как неисправности , прерывания или отмены в зависимости от того, как они сообщаются, и от того, была ли инструкция
вызвавшее исключение может быть перезапущено без потери программы или
непрерывность задачи.
Сводка: прерывания увеличивают указатель инструкции, ошибки не делают, а отменяют 'взрывают'.
Ловушка
A trap - исключение, о котором сообщается сразу после
выполнение инструкции по отлову. Ловушки позволяют выполнить
Программа или задача должна быть продолжена без потери непрерывности программы.
Адрес возврата обработчика ловушек указывает на инструкцию
выполняется после инструкции по отлову.
Fault
A неисправность - это исключение, которое, как правило, может быть исправлено и которое,
после исправления позволяет перезапустить программу без потери
непрерывность. Когда сообщается о сбое, процессор восстанавливает
состояние машины до состояния до начала выполнения
ошибочная инструкция. Обратный адрес (сохраненное содержимое CS и
Регистры EIP) для обработчика ошибок указывает на ошибку
инструкция, а не инструкция после ошибки
инструкция.
Пример. Ошибка страницы часто устраняется. Часть адресного пространства приложения, возможно, была выгружена на диск из оперативной памяти. Приложение вызовет ошибку страницы, когда оно попытается получить доступ к памяти, которая была выгружена. Ядро может перенести эту память с диска на оперативную память и передать управление обратно в приложение. Приложение продолжит работу с того места, где оно было остановлено (по ошибочной инструкции, которая обращалась к выгруженной памяти), но на этот раз доступ к памяти должен завершиться без сбоев.
Прервать
abort - исключение, которое не всегда сообщает точное
расположение инструкции, вызывающей исключение, и не позволяет
перезапуск программы или задачи, вызвавшей исключение. Прерыванияиспользуется для сообщения о серьезных ошибках, таких как аппаратные ошибки и несогласованные или недопустимые значения в системных таблицах.
Edge Cases
Прерывания, вызываемые программным обеспечением (инициируемые инструкцией INT), ведут себя как ловушка-подобная манераИнструкция завершается до того, как процессор сохраняет свое состояние и переходит к обработчику прерываний.