Прерывание против исключения
На любом компьютере во время обычного выполнения программы могут быть события, которые могут привести к временной остановке ЦП. Такие события называются прерываниями. Прерывания могут быть вызваны программными или аппаратными сбоями. Аппаратные прерывания называются (просто) прерываниями, а программные прерывания называются исключениями. При возникновении прерывания (программного или аппаратного) управление передается в специальную подпрограмму, называемую ISR (подпрограмма обслуживания прерываний), которая может обрабатывать условия, возникающие из-за прерывания..
Что такое прерывание?
Термин прерывание обычно зарезервирован для аппаратных прерываний. Это прерывания управления программой, вызванные внешними аппаратными событиями. Здесь внешний означает внешний по отношению к процессору. Аппаратные прерывания обычно поступают из разных источников, таких как микросхема таймера, периферийные устройства (клавиатура, мышь и т. Д.), Порты ввода / вывода (последовательный, параллельный и т. Д.), Дисководы, часы CMOS, карты расширения (звуковая карта, видео). карта и т. д.). Это означает, что аппаратные прерывания почти никогда не происходят из-за какого-либо события, связанного с выполняющейся программой. Например, событие, такое как нажатие клавиши на клавиатуре пользователем, или тайм-аут внутреннего аппаратного таймера, может вызвать прерывания такого рода и может информировать ЦП о том, что определенное устройство требует некоторого внимания. В подобной ситуации процессор остановит все, что он делал (то есть приостановит текущую программу), предоставит услугу, требуемую для устройства, и вернется к нормальной программе. Когда происходят аппаратные прерывания и CPU запускает ISR, другие аппаратные прерывания отключаются (например, на машинах 80 × 86). Если вам нужно, чтобы другие аппаратные прерывания возникали во время работы ISR, вам нужно сделать это явно, сбросив флаг прерывания (с помощью инструкции sti). В машинах 80 × 86 очистка флага прерывания будет влиять только на аппаратные прерывания.
Что такое исключения?
Исключением является программное прерывание, которое можно определить как специальную процедуру обработки. Исключение можно определить как автоматически возникающую ловушку (ловушка может быть идентифицирована как передача управления, инициированная программистом). Как правило, нет особых инструкций, связанных с исключениями (ловушки генерируются с использованием конкретной инструкции). Таким образом, исключение возникает из-за «исключительного» условия, возникающего во время выполнения программы. Например, деление на ноль, выполнение недопустимого кода операции или ошибка, связанная с памятью, могут вызвать исключения. Всякий раз, когда возникает исключение, процессор временно приостанавливает программу, которую он выполнял, и запускает ISR. ISR будет содержать, что делать с исключением. Это может исправить проблему или, если это невозможно, может изящно прервать программу, напечатав соответствующее сообщение об ошибке. Хотя конкретная инструкция не вызывает исключение, исключение всегда будет вызываться инструкцией. Например, ошибка деления на ноль может возникнуть только во время выполнения команды деления.
В чем разница между прерыванием и исключением?
Прерывания - это аппаратные прерывания, а исключения - программные прерывания. Появление аппаратных прерываний обычно отключает другие аппаратные прерывания, но это не относится к исключениям. Если вам нужно запретить аппаратные прерывания до тех пор, пока не будет обработано исключение, вам необходимо явно сбросить флаг прерывания. И обычно флаг прерывания на компьютере влияет на (аппаратные) прерывания, а не на исключения. Это означает, что очистка этого флага не предотвратит исключения.