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