0

VxWorks には次のコードがあります。


sig_hdr () { ... }
task_low_priority() {
    ...
    // Install signal handler for SIGUSR1
    signal(SIGUSR1, sig_hdr);
    ...
}
task_high_priority() {
    ...
    kill(pid, SIGUSR1); //pid is the ID of task_low_priority
    ...
} 

優先度の高いタスクは、優先度の低いタスクに (kill を介して) シグナルを送信します。優先度の高いタスクがプリエンプトされ、優先度の低いタスクがすぐに実行されますか?それとも、優先度の低いタスクが実行されるまでシグナルが延期されますか?

4

1 に答える 1

1

シグナルの送信はブロック操作ではありません。シグナルハンドラは、登録されているタスクにプロセッサがある場合にのみ実行されます。

この特定のケースでは、優先度の低いタスクが実行されるまでシグナル処理が延期されます。

これは、ハンドラーを持つタスクが実行されない場合、シグナル処理が無期限に遅延する可能性があることを意味します。

これは、カーネル操作に有効です。リアルタイム プロセスでは、RTP で最初に使用可能なタスクがシグナル ハンドラを実行するという点で、シグナル処理が少し異なります。

于 2008-09-24T19:14:46.907 に答える