Прерывания показывают, что что-то внешнее по отношению к ядру процессора требует его внимания Он прерывает нормальный поток программы, выполняет процедуру обработки прерывания (ISR) и обычно возвращается туда, где он был до того, как произошло прерывание.
Существует много вариантов этой основной темы: программные прерывания могут генерировать прерывания, другая задача может получить ЦП после ISR и т. Д. Ключевым моментом является то, что прерывания могут возникать в любое время по причине кода / Процессор имеет без контроля над .
Исключение немного сложнее определить, потому что оно потенциально имеет три уровня значения:
Аппаратные исключения
Некоторые процессоры (например, PowerPC) определяют исключения, чтобы указать, что произошло какое-то необычное состояние: сброс системы, неверный адрес, некоторые ошибки в кэше преобразования виртуальных адресов и т. Д. ...
Эти исключения также используются для реализации точек останова и системных вызовов. В этом случае они действуют почти как прерывания.
ОС исключения
Некоторые из аппаратных исключений будут обрабатываться ОС. Например, ваша программа обращается к недействительной памяти. Это вызовет аппаратное исключение. Операционная система имеет обработчик для этого исключения, и существует вероятность того, что операционная система отправит сигнал в ваше приложение (например, SIGSEGV), обозначающее проблему.
Если в вашей программе установлен обработчик сигнала, обработчик сигнала запустится и, надеюсь, справится с ситуацией. Если у вас нет обработчика сигнала, программа может быть прервана или приостановлена.
Я бы рассматривал структурированные обработчики исключений окна (SEH) как исключения этого типа.
Программные исключения
Некоторые языки, такие как Java, C ++ и C #, имеют концепцию программных исключений, где язык обеспечивает обработку непредвиденных или необычных условий , связанных с работой программы . В этом случае в какой-то момент кода возникает исключение, и некоторый код, находящийся выше в стеке выполнения программы, может «перехватить» исключение и выполнить. Это то, что делают блоки try / catch.