Исключения и прерывания - PullRequest
0 голосов
/ 03 июня 2010

Когда я искал различие между исключениями и прерываниями, Я нашел этот вопрос Прерывания и исключения на SO ...

Некоторые ответы там не подходили (по крайней мере, для уровня сборки):

"Исключением являются программные версии прерывания" Но существуют программные прерывания !!
"Прерывания асинхронные, но исключения синхронные" Это верно?
"Прерывания происходят регулярно"
"Прерывания - это аппаратно реализованная ловушка, исключения - программно реализованные" То же, что и выше!


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

Спасибо!

Ответы [ 2 ]

2 голосов
/ 03 июня 2010

Прерывания, как правило, представляют собой метод сигнализации об изменении состояния оборудования. Периферийные устройства будут связаны электрическим сигналом с контроллером прерываний, который назначает приоритеты и присваивает адресные векторы каждому возможному сигналу. контроллер прерываний направляет обнаруженное состояние прерывания в ЦП, который может или не может «прерывать» его текущее состояние выполнения для обработки сигнального изменения состояния (в зависимости от того, разрешены ли прерывания и / или является ли этот конкретный вход немаскируемым). В некоторых архитектурах условия прерывания могут быть инициированы программным обеспечением (например, в x86 есть мнемоника) в дополнение к аппаратному вводу.

Исключения охватывают больший диапазон реализации. В некоторых архитектурах ЦП, таких как 68 КБ, исключение может быть похоже на прерывание, но генерируется некоторым состоянием ЦП, которое необходимо обработать. Например, существуют условия, такие как деление на ноль, недопустимые инструкции, время ожидания шины ввода-вывода и т. Д., Которые генерируют исключения. Обрабатывая эти исключения, можно выполнять такие действия, как эмуляция инструкций и виртуальное расширение набора инструкций.

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

Таким образом, в целом утверждения, которые вы пытаетесь найти обоснованность, могут быть истинными или ложными в зависимости от конкретной платформы, к которой вы их применяете.

1 голос
/ 03 июня 2010

Исключением, так как оно используется чаще всего, является форма потока управления в языке программирования для обработки событий вне обычного логического потока программы, чтобы избежать того, что бизнес-логика программы тонет в логике обработки ошибок. «Обработка» исключения зависит от контекста. Это больше похоже на GoTo для ряда случаев, когда это было полезно.

Прерывание - это аппаратная «ловушка» для запуска определенных действий при возникновении определенных событий, таких как тик по таймеру или программа, «вызывающая» INT21. Зарегистрирован обработчик, который делает что-то предопределенное.

Оба могут быть или не быть синхронными или асинхронными.

...