トラップと割り込みの違いは何ですか?
システムごとに用語が異なる場合、x86ではどういう意味ですか?
trapは、ユーザープロセスの例外です。ゼロによる除算または無効なメモリアクセスが原因です。カーネルルーチン( システムコール )を呼び出す通常の方法でもあります。これらはユーザーコードよりも高い優先度で実行されるためです。処理は同期的です(したがって、ユーザーコードは中断され、その後続行されます)。ある意味で、それらは「アクティブ」です-ほとんどの場合、コードはトラップが発生することを期待し、この事実に依存しています。
割り込みは、ハードウェア(ハードディスク、グラフィックスカード、I/Oポートなどのデバイス)によって生成されたものです。これらは非同期(つまり、ユーザーコードの予測可能な場所では発生しません)または「パッシブ」です。これは、割り込みハンドラーが最終的に発生するまで待機する必要があるためです。
トラップハンドラーのハンドラーは割り込みハンドラーのように見えるため、トラップは一種のCPU内部割り込みとして見ることもできます(レジスターとスタックポインターが保存され、コンテキストスイッチがあり、中断した場合に実行が再開される場合があります) 。
Trapsとinterruptsは密接に関連しています。トラップはexceptionのタイプであり、例外は割り込みに似ています。
Intel x86は、ベクトル化されたイベント(interrupts vs exceptions)と例外クラス(faults vs trapsの2つの重複カテゴリを定義します。 vs aborts)。
この投稿の引用はすべて、2016年4月版の Intel Software Developer Manual からの引用です。 (決定的かつ複雑な)x86の観点からは、SDMの割り込みと例外処理に関する章を読むことをお勧めします。
ベクトル化されたイベント(interruptsおよびexceptions)により、プロセッサの状態の多くを保存した後、プロセッサが割り込みハンドラにジャンプします(後でその時点から実行を継続できます)。
例外と割り込みには、ベクターと呼ばれるIDがあり、プロセッサがジャンプする割り込みハンドラーを決定します。割り込みハンドラーは、割り込み記述子テーブルで説明されています。
Interruptsは、ハードウェアからの信号に応じて、プログラムの実行中にランダムに発生します。システムハードウェアは割り込みを使用して、周辺機器のサービス要求など、プロセッサ外部のイベントを処理します。ソフトウェアは、INT n命令を実行して割り込みを生成することもできます。
例外ゼロ除算などの命令の実行中にプロセッサがエラー状態を検出すると発生します。プロセッサは、保護違反、ページフォールト、内部マシンフォールトなど、さまざまなエラー状態を検出します。
例外は、報告方法と、命令が実行されるかどうかに応じて、faults、traps、またはabortsに分類されます。プログラムまたはタスクの継続性を失うことなく、例外を再起動できます。
要約:traps命令ポインターをインクリメントします。faultsしないでください。aborts 'explode'。
trapは、トラップ命令の実行直後に報告される例外です。トラップにより、プログラムの連続性を失うことなく、プログラムまたはタスクの実行を継続できます。トラップハンドラのリターンアドレスは、トラップ命令の後に実行される命令を指します。
faultは、一般に修正可能な例外であり、修正されると、連続性を失うことなくプログラムを再起動できます。障害が報告されると、プロセッサはマシンの状態を障害のある命令の実行開始前の状態に戻します。フォールトハンドラーのリターンアドレス(CSおよびEIPレジスタの保存内容)は、フォールティング命令に続く命令ではなく、フォールティング命令を指します。
例:ページフォールトは多くの場合回復可能です。アプリケーションのアドレス空間の一部がRAMからディスクにスワップアウトされた可能性があります。アプリケーションは、スワップアウトされたメモリにアクセスしようとすると、ページフォールトをトリガーします。カーネルはそのメモリをディスクからRAMに引き出し、制御をアプリケーションに戻すことができます。アプリケーションは、中断された場所から(スワップアウトされたメモリにアクセスしていた障害のある命令で)続行しますが、今回は障害なくメモリアクセスが成功するはずです。
abortは、例外を引き起こした命令の正確な位置を常に報告するわけではなく、例外を引き起こしたプログラムまたはタスクの再起動を許可しない例外です。中止は、ハードウェアエラーやシステムテーブル内の一貫性のない、または不正な値などの重大なエラーを報告するために使用されます。
ソフトウェアが呼び出した割り込み(INT命令によってトリガーされる)は、トラップのような方法で動作します。プロセッサがその状態を保存し、割り込みハンドラにジャンプする前に、命令は完了します。
一般的に、例外、フォールト、アボート、Traps、およびInterruptsなどの用語はすべて同じことを意味し、「割り込み」と呼ばれます。
トラップと割り込みの違い:
トラップ:プログラマーが開始し、特別なハンドラールーチンへの制御の移行を期待します。 (例:80x86 INT命令が良い例です)
どことして
割り込み(ハードウェア):CPUの外部の外部ハードウェアイベントに基づくプログラム制御割り込みです(例:キーボードのキーを押すか、タイマーチップのタイムアウト)
トラップは、特別な種類の割り込みです。これは、一般的にソフトウェア割り込みと呼ばれます。 割り込みは、ハードウェア割り込み(ハードウェアデバイスからの割り込み)とソフトウェア割り込み(-などのソフトウェアからの割り込みの両方をカバーするより一般的な用語ですtraps)。
トラップはプログラムのようなコードによって呼び出され、eを使用します。 g。 OSルーチンを呼び出す(つまり、通常は同期)。割り込みは、イベント(多くの場合、データを受信したネットワークカードやCPUタイマーなどのハードウェア)によって呼び出され、名前が示すように、CPUが処理するドライバールーチンに切り替える必要があるため、通常の制御フローを中断します行事。
割り込みはハードウェア割り込みであり、トラップはソフトウェアによって呼び出される割り込みです。通常、ハードウェア割り込みが発生すると、他のハードウェア割り込みが無効になりますが、これはトラップには当てはまりません。トラップが提供されるまでハードウェア割り込みを禁止する必要がある場合は、割り込みフラグを明示的にクリアする必要があります。通常、コンピュータの割り込みフラグは、トラップではなく(ハードウェア)割り込みに影響します。これは、このフラグをクリアしてもトラップが防止されないことを意味します。トラップとは異なり、割り込みはCPUの以前の状態を保持する必要があります。
トラップは、現在の命令の実行が原因で発生するため、同期イベントと呼ばれます。ここで、割り込みは、外部イベントに関連するプロセッサで実行されている独立した命令によって引き起こされるため、非同期イベントとして知られています。
割り込みは、システム内でハードウェアが生成するフローの変更です。割り込みハンドラは、割り込みの原因を処理するために呼び出されます。その後、制御は中断されたコンテキストと命令に戻ります。トラップはソフトウェア生成の割り込みです。割り込みを使用してI/Oの完了を通知し、デバイスポーリングの必要性を回避できます。トラップを使用して、オペレーティングシステムルーチンを呼び出すか、算術エラーをキャッチできます。
トラップはソフトウェア割り込みです。ゼロ除算値を持つ変数を宣言するプログラムを作成すると、トラップとして扱われます。このプログラムを実行すると、同じエラーが同時にスローされます。システムコールはプログラムがosに必要なサービスを要求する特別なバージョンのトラップ。 I/Oエラーのような割り込み(ハードウェア割り込みの一般的な単語)の場合、CPUはランダムな時間に割り込まれますが、それはもちろんプログラマのせいではありません。