web-dev-qa-db-ja.com

比較のシグナルと割り込み

Linuxのシグナルは、「特定のイベントの発生についてプロセスに通知するために使用されるトリガーです。ここでのイベントはソフトウェア例外を指します。追加のシグナルも使用される場合があります。 for IPC mechanisms。 "私が持っている質問は

  • 例外(ソフトウェア割り込み)のみが信号を介して通知されると思います。ハードウェア割り込みの場合はどうですか。
  • 信号のさまざまなソースは何ですか?私には、カーネルが常に信号のソースであるように見えます(IPCに使用される場合を除く)
  • シグナルハンドラとISRの違いは?.
  • 信号ブロッキングと割り込みマスキングの違いは?
31
Vivek Maran

割り込みは、CPUとOSカーネル間の通信の平均と見なすことができます。シグナルは、OSカーネルとOSプロセス間の通信の平均と見なすことができます。

割り込みは、CPU(例外-例:ゼロ除算、ページフォールト)、デバイス(ハードウェア割り込み-例:入力可能)、またはCPU命令(トラップ-例:syscalls、ブレークポイント)によって開始されます。最終的にCPUによって管理され、現在のタスクを「中断」し、OSカーネルが提供するISR /割り込みハンドラーを呼び出します。

シグナルは、OSカーネル(例:SIGFPE、SIGSEGV、SIGIO)、またはprocess(kill())によって開始されます。最終的にOSカーネルによって管理され、ターゲットスレッド/プロセスに配信され、汎用アクション(無視、終了、終了、ダンプ)またはプロセス提供のシグナルハンドラーを呼び出します。

84
ninjalj

シグナルと割り込みの動作は非常に似ています。違いは、シグナルがプロセス(仮想環境に存在する)で発生するのに対して、例外はシステム全体で発生することです。

特定の障害は、CPUによって例外としてフラグが立てられ、その後、カーネルによってプロセスに配信される信号にマッピングされます。カーネルは、プロセスから例外を隠すことを選択できます(たとえば、マップされていないメモリへのアクセスは、ページングによってサイレントに修正されます)。

ハードウェア割り込みは、一種の例外であり、カーネルがシグナルにマップすることを選択する場合があります(たとえば、alarm(2)を使用する場合)。

カーネルは、例外、I/O完了、明示的なユーザー空間リクエストなど、さまざまなイベントに応じてシグナルを生成します。

シグナルハンドラーはISRと同様に動作します-いつでも呼び出すことができるため、ISRのようにプログラムの状態を推測することはできません。また、ブロッキングシグナルは、仮想アドレス空間内でマスキング割り込みと同じように動作します物理マシン上。

2
Simon Richter