0

例外と割り込みの違いを探していたときに、 SOでこの質問の割り込みと例外を見つけました...

いくつかの回答は適切ではありませんでした (少なくともアセンブリ レベルでは):

「例外はソフトウェア版の割り込み」 でもソフトウェア割り込みは存在する!!
「割り込みは非同期だが、例外は同期」 そうですか?
「定期的に割り込みが発生する」
「割り込みはハードウェア実装のトラップ、例外はソフトウェア実装」 同上!


これらの答えのいくつかが正しかったかどうかを確認する必要があります。また、誰かがより良い答えを提供できれば幸いです...

ありがとう!

4

2 に答える 2

2

割り込みは、通常、ハードウェア状態の変化を通知する方法です。周辺機器は、電気信号によって割り込みコントローラーに接続されます。割り込みコントローラーは、優先順位を付けて、考えられる各信号にアドレス ベクターを割り当てます。割り込みコントローラは、検出された割り込み条件を CPU に転送します。CPU は、現在の実行状態を「中断」して、通知された状態の変更を処理する場合としない場合があります (割り込みが有効かどうか、および/またはこの特定の入力がマスク可能でないかどうかによって異なります)。一部のアーキテクチャでは、割り込み条件は、ハードウェア入力に加えてソフトウェアによって開始される場合があります (x86 には int ニーモニックがあるなど)。

例外は、より広い範囲の実装に及びます。68K などの一部の CPU アーキテクチャでは、例外は割り込みに似ている場合がありますが、処理が必要な一部の CPU 状態によって生成されます。たとえば、例外を生成するゼロ除算、不正な命令、I/O バスのタイムアウトなどの条件があります。これらの例外を処理することにより、命令をエミュレートしたり、命令セットを仮想的に拡張したりすることができます。

例外は、特定のエラー条件をトラップして処理できる C++ 言語など、ソフトウェアのみの概念である場合もあります。

したがって、一般に、妥当性を見つけようとしているステートメントは、それらを適用する正確なプラットフォームに応じて、真または偽になる可能性があります。

于 2010-06-03T13:19:25.393 に答える
1

最も頻繁に使用される例外は、プログラムのビジネス ロジックがエラー処理ロジックに取り込まれないようにするために、プログラムの通常のロジック フロー外のイベントを処理するプログラミング言語の制御フローの形式です。例外の「処理」はコンテキスト固有です。これは、多くのユースケースで有用だった一種の GoTo に似ています。

割り込みは、特定のイベントが発生したときに特定のアクションをトリガーするためのハードウェア支援の「トラップ」であり、タイマー ティックまたは INT21 を「呼び出す」プログラムです。定義済みの何かを行う登録済みのハンドラーがあります。

どちらも同期または非同期の場合とそうでない場合があります。

于 2010-06-03T13:18:09.353 に答える