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