トラップと割込みの主な違いは、トラップはユーザープログラムによって引き起こされ、OSの機能を呼び出すのに対し、割込みはハードウェアデバイスによって引き起こされ、プロセッサが対応する割込みハンドラルーチンを実行できるようにすることです。
オペレーティングシステムはイベントドリブンです。
プログラムの実行中に突然イベントが発生することがあります。
それがきっかけでオペレーティングシステムが実行されます。
これにより、ユーザーモードがカーネルモードに変更されます。
OSの実行後、制御は元のプログラムに戻されます。
イベントには、トラップと割り込みがあります。
トラップはユーザープログラムによって発生するのに対し、割り込みはキーボードやタイマーなどのハードウェアデバイスによって発生します。
トラップはトラップハンドラへ制御を渡し、割り込みは割り込みハンドラへ制御を渡します。
ハンドラを実行した後、制御は元のプログラムに切り替わります。
トラップとは
トラップは、ユーザプログラムがオペレーティングシステムの機能を呼び出すために発生させるものです。
ユーザープログラムが画面に何かを印刷することを要求しているとします。
トラップが発生すると、オペレーティングシステムはそのデータを画面に書き込むことを実行します。
トラップは主にシステムコールを実装するために使用されます。
例を挙げると、次のようになります。
printf (“%sn”, str) という文があったとします。
これはトラップを呼び出すことになり、トラップハンドラに制御を渡します。
その後、ユーザーモードからカーネルモードに移行し、OSはwriteコールを実行します。
タスク完了後、カーネルモードからユーザモードへ制御が戻されます。
インタラプトとは
割り込みは、ハードウェアデバイスによって発生します。
USBデバイス、NICカード、キーボードなどが割り込みを発生させることができます。
割り込みは非同期式です。
従って、いつでも発生する可能性があります。
プロセッサには、割り込み端子と呼ばれる専用端子があります。
INTピンとも呼ばれます。
キーボードなどのデバイスは、この割り込みピンを介してプロセッサに接続されています。
キーが押されると、割り込みが発生します。
プロセッサは、現在実行中のプロセスから割り込みハンドラルーチンに切り替わります。
このシナリオでは、キーボード割り込みハンドラルーチンが呼び出されます。
割り込みハンドラルーチンが終了すると、プロセッサは実行中の元のプログラムに切り替わります。
基本的に、割り込みが発生すると、プロセッサはコンテキストを切り替えて割り込みハンドラを実行します。
完了後、元の状態に切り替わります。
プロセッサの割り込みピンは1本ですが、ハードウェアデバイスは複数あります。
割込みコントローラは、1つの割込みピンを複数のピンで共有することを支援します。
プロセッサは割り込みコントローラと通信して、どのデバイスが実際に割り込みを発生させたかを判断します。
その結果に応じて、プロセッサは対応する割込みハンドラルーチンを実行します。
タイマ、USB、キーボードの割り込みハンドラルーチンがあります。
トラップや割り込みの他に、例外と呼ばれるタイプのイベントもあります。
例外はプロセッサによって自動的に生成されます。
例外はさらにフォルトとアボートに分けられます。
フォルトは回復可能なエラーであり、アボートは処理が困難なエラーです。
トラップとインタラプトの関係
- TrapとInterruptはイベントの一種です。
トラップとインタラプトの違い
定義
トラップとは、ユーザープログラムから発せられる信号で、オペレーティングシステムにある機能を直ちに実行するように指示するものです。
一方、割り込みとは、ハードウェアから発せられるプロセッサへの信号で、直ちに注意を要する事象を指示するものです。
発生方法
トラップはユーザープログラム内の命令によって発生し、割り込みはハードウェアデバイスによって発生します。
主な機能
さらに、トラップはOSの機能を呼び出します。
トラップハンドラへ制御を移します。
割込みは、プロセッサが対応する割込みハンドラルーチンを実行するきっかけとなる。
発生状況
また、トラップは同期式で任意の命令の実行後に到達することができ、割り込みは非同期式で任意の命令の実行時に発生することができます。
同義語
トラップはソフトウェア割り込み、割り込みはハードウェア割り込みとも呼ばれます。
結論
トラップとインタラプトは2つのタイプのイベントです。
トラップと割込みの違いは、トラップはユーザプログラムがOSの機能を呼び出すために発生させるのに対し、割込みはハードウェアデバイスがプロセッサに対応する割込みハンドラルーチンを実行させるために発生させるという点です。