2012-07-30 15 views
9
  1. あるプロセスが信号を別のプロセスに送信すると、どのような状況でプロセスが受信を再開して実行するまで待機しますか?
  2. インストールされたシグナルハンドラは、どのような状況ですぐに呼び出されますか?
  3. 対応するシグナルハンドラを直接コールするのと比べて、シグナルを発生させるときにプロセスにどのくらいのオーバヘッドが発生しますか?

答えて

5

、TLPIはタスクがすでにすぐに「おそらく(実行されているときに、タスクが次の「すぐに」ユーザーモードにカーネルモードから切り替えたときに、スケジュールされた、またはされたときの信号が「正常」配信されていると述べています最初に割り込みを発生させなければならないでしょう。まあ、これがどういう意味であれ、それは厳密に束縛されているわけではありませんが、何が起こるかに非常に近いです。

ハードウェアイベント(セグメンテーションフォールトなど)のために、同期して生成される「通常の」信号と、通常の信号の間で区別する必要があります偽造されている)。

リアルタイム信号は、にキューされ、通常の信号は、ではありません。つまり、通常のシグナルの実装は、ビットマスクとして機能するタスクごとのワードのようなものである可能性が最も高いです。
「通常の」信号を生成することはビットを設定することを意味し、OSは次に信号を配信する必要があるかどうかを判断すると、そのワードをゼロに対してテストし、必要に応じてどのビットが設定されているかを調べ、シグナルハンドラがあればそれに応じて
これを知る必要がある唯一の実用的な理由は、信号を「失う」ことができるからです。最初の信号が届く前に2つ以上の信号が生成された場合でも、信号は1つだけです。

リアルタイム信号(インプリメンテーション依存の長さまでキューに入れる必要があります)の実装は明らかにはるかに複雑です。

killというプロセスが(22.4 TLPI)というプロセスと同じように、ハードウェアイベント(たとえばsegfault)によって発生するシグナルは同期的に生成されます。つまり、2つの理由で「即時」に配信されます。まず、何か他のことをすることは意味をなさない.2番目には、トラップハンドラが復帰したときにカーネル/ユーザ切り替えが起きている。とにかくいつも「即時に」配達されます。

0

基本的にシグナルは非同期です。プロセススケジューラなどの要因によっていつシグナルが受信されるのかわからないため、信号を受信したときにシグナルハンドラを使用してコードを実行します。信号を送信するレイテンシは、クロック速度に基づくハードウェア/ソフトウェア割り込みに基づいています。

Linuxで何かがどのように実装されているかを知りたい場合は、POSIX規格をチェックしてください。シグナルの

グレート情報:

http://www.gnu.org/software/libc/manual/html_node/index.html#toc_Signal-Handling

信号が生成されると、それは保留になります。通常、短い時間の間は が保留になり、その後、 シグナルが送信された場合はに配信されます。ただし、その種類の信号が の場合、現在はブロックにブロックされています。この種の信号 はブロックされていません。ブロックされていません。です。ブロック解除されるとすぐに に配信されます。

別の抜粋:

信号がすぐかどうか、長い 遅延の後に、配信されると、その信号のための指定されたアクションが取られます。信号の受け渡しについて

関連する問題