Существует несколько стратегий для обработки прерываний. 1. Не устранять причину прерывания. 2. Устранить причину прерывания. 3. Вызвать того кто знает, что делать с причиной прерывания.
Откуда можно выделить разные источники прерываний. Есть те для которых легко написать обработчик и они известны. Вторые те для которых невозможно ничего сделать. И по серёдке лежат все остальные. Так что-же делать с оставшимися? Как правило в системе есть элемент и он не знает всей информации. Поэтому он не может принять верного решения, что делать. Но зато он может по иерархии отдать выше стоящему элементу который уже будет располагать большей информации и сможет обработать прерывание. Либо передать тому, кто сможет это сделать. Как правило на самом верху находится человек. Средне статистический человек не является специалистом. Поэтому он не может принять верного решения. Поэтому на ПК как правило все решения принимает компьютер.
Внизу лежит BIOS так как он знает меньше всех. Чуть выше лежит ОС, чуть ниже ОС встроенные драйверы. Чуть выше внешние драйвера и сервисы, затем приложения, отладчик, человек. Внутри каждой программы идут свои уровни. Отсюда кстати и классификация исключений согласно документации Intel
Исключения классифицированы как: ошибки (faults), ловушки(tarp), и аварийные прекращения работы (aborts) в зависимости от способа, которым о них сообщают и может ли команда, которая вызвала исключение, быть перезапущена без потери непрерывности задачи или программы.
• Ошибки - ошибка - исключение, которое может быть исправлено до наступления ошибки, позволяет программе быть перезапущенной без потери непрерывности. Когда об ошибке сообщают, процессор восстанавливает состояние машины к состоянию до начала выполнения ошибочной команды. Адрес возврата (сохраненное содержание регистров CS и EIP) для обработчика ошибки указывает на ошибочную команду, а не на команду после сбойной команды.
• Ловушки - ловушки - исключение, о котором сообщают немедленно после выполнения команды попавшей в ловушку. Ловушка позволяет выполняющейся программе или задаче быть продолженной без потери непрерывности программы. Адрес возврата для обработчика ловушки указывает на команду, которая выполняется после команды попавшей в ловушку.
• Аварийные прекращения работы - аварийное прекращение работы - исключение, которое не всегда сообщает о точном местоположении команды, вызывающей исключение и не позволяет выполнить рестарт программы или задачи, которая вызвала исключение. Аварийные прекращения работы используются, чтобы сообщить о серьезных ошибках, типа ошибок аппаратных средств и несовместимых или неправильных значениях в системных таблицах.
Примечание
Некоторые исключение из подмножества Ошибок не позволяют восстанавливать работу. Такие исключения приводят к потере некоторых состояний процессора. Например, выполнение команды POPAD, где структура стека пересекает конец сегмента стека, заставляет проинформировать процессор об ошибке. В этой ситуации обработчик исключений видит, что указатель (CS:EIP) команды был восстановлен, как будто команда POPAD не выполнялась. Однако, внутреннее состояние процессора (универсальные регистры) будет изменено. Такие случаи рассматривают, программируя ошибки. Приложение, вызвавшее этот класс исключений должно быть закончено, остановлено операционной системой.
|