Организация вычислительных систем



         

Система прерываний и исключений в архитектуре IA-32 - часть 3


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

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

Ловушка возникает на границе команд сразу же после команды, вызвавшей это исключение. Значения регистров CS и EIP, заносимые в стек обработчика, указывают на очередную команду. Например, если ловушка сработала на команде JMP, то в стеке запоминаются значения регистров CS и EIP, указывающие на ссылку команды JMP.

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

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

Типичным случаем аварии является исключение #8 "двойная ошибка". Двойная ошибка происходит, когда процессор пытается обработать исключение, а его обработчик генерирует еще одно исключение. Для некоторых исключений процессор не генерирует двойную ошибку, такие исключения называют "легкими". Только ошибки деления (исключение #0) и сегментные исключения (#10, #11, #12, #13), называемые "тяжелыми", могут вызвать двойную ошибку. Таким образом, получение исключения "неприсутствие сегмента" во время обработки исключения отладки не приведет к двойной ошибке, в то время как ошибка сегмента, происходящая во время обработки ошибки деления на нуль, приведет к исключению #8.

Если при попытке вызвать обработчик исключения #8 возникает ошибка, процессор переходит в режим отключения (shutdown mode).


Содержание  Назад  Вперед