Linuxでは、シグナルはどのように実装されていますか?

Linuxでは、シグナルはどのように実装されていますか?

プロセスが別のプロセスにシグナルを送信すると、受信プロセスは実行スケジュールが変更されるのを待ちますか?それでは、1ミリ秒ごとにプロセスを実行することを選択した場合、信号が生成された時点から信号が転送されるまでの遅延時間が約0.5ミリ秒であることを意味しますか? (プロセスが2つしかないと仮定します。)
より一般的に、Linuxではシグナルがどのように実装されますか?

答え1

これは(やや)定義されていません。

受信プロセスがシグナルの受信時にアクションを実行するように設定されている場合(つまり、シグナルが無視またはブロックされていない)、プロセスは実行可能になり、優先順位が十分であればすぐにスケジュールされますが、実際には実行できません。だから)保証されます。

答え2

価値を推測しないでください。

プロセスにシグナルを送信することは、そのプロセスにイベントを待機させるのと同じです(信頼できません)。プロセス実行スケジュールが変更されると、スケジューラはプロセスのキューを確認し、実行するタスクをスケジュールします。問題は、スケジューラがいつこのプロセスに注意を払うのかわからないことです。

したがって、信号を使用するプログラマは予測不可能で避けられないシグナルが到着した時点とアクションが取られる時点との間の遅延。したがって、その価値を推測しようとしないでください。

リアルタイム信号もこの遅延に役立ちません。プロセスのスケジューリング優先順位を上げる方が効率的です。ただし、コードが正しく実行されるためには、スケジューラ機能に依存してはいけません。

APUE第10章を参照してください。

関連情報