Linuxのシグナルは、「特定のイベントの発生についてプロセスに通知するために使用されるトリガーです。ここでのイベントはソフトウェア例外を指します。追加のシグナルも使用される場合があります。 for IPC mechanisms。 "私が持っている質問は
割り込みは、CPUとOSカーネル間の通信の平均と見なすことができます。シグナルは、OSカーネルとOSプロセス間の通信の平均と見なすことができます。
割り込みは、CPU(例外-例:ゼロ除算、ページフォールト)、デバイス(ハードウェア割り込み-例:入力可能)、またはCPU命令(トラップ-例:syscalls、ブレークポイント)によって開始されます。最終的にCPUによって管理され、現在のタスクを「中断」し、OSカーネルが提供するISR /割り込みハンドラーを呼び出します。
シグナルは、OSカーネル(例:SIGFPE、SIGSEGV、SIGIO)、またはprocess(kill())によって開始されます。最終的にOSカーネルによって管理され、ターゲットスレッド/プロセスに配信され、汎用アクション(無視、終了、終了、ダンプ)またはプロセス提供のシグナルハンドラーを呼び出します。
シグナルと割り込みの動作は非常に似ています。違いは、シグナルがプロセス(仮想環境に存在する)で発生するのに対して、例外はシステム全体で発生することです。
特定の障害は、CPUによって例外としてフラグが立てられ、その後、カーネルによってプロセスに配信される信号にマッピングされます。カーネルは、プロセスから例外を隠すことを選択できます(たとえば、マップされていないメモリへのアクセスは、ページングによってサイレントに修正されます)。
ハードウェア割り込みは、一種の例外であり、カーネルがシグナルにマップすることを選択する場合があります(たとえば、alarm(2)
を使用する場合)。
カーネルは、例外、I/O完了、明示的なユーザー空間リクエストなど、さまざまなイベントに応じてシグナルを生成します。
シグナルハンドラーはISRと同様に動作します-いつでも呼び出すことができるため、ISRのようにプログラムの状態を推測することはできません。また、ブロッキングシグナルは、仮想アドレス空間内でマスキング割り込みと同じように動作します物理マシン上。