「シグナル」に関するいくつかのLinuxドキュメントを読んでいますが、まだ心の中には次の質問があります。
1) 「信号」ハンドラ実装する「宛先」プロセスがそれを受信すると完了します。実行トークン~からスケジューラ?
2)または「信号」ハンドラ実装するに起こったどのプロセス「コンテキスト」発生処刑される予定「信号」はいつ送信されますか? (ハードウェアISRと同じスタイル)
3)プロセスはどのように実行されますか?優先順位? 「シグナル」の処理中に一掃されていますか?
答え1
1) シグナルハンドラは次回実行時に実行されます。対象プロセスカーネルモードからユーザーモードに戻ります。
これは、ハードウェアがハングした後にプロセスが再実行されるようにスケジュールされている場合(まだカーネルモードで実行されていない場合)、またはプロセスがシステムコールから返されたとき(一部のアーキテクチャでは同じ)場合に発生する可能性があります。
通常の操作でカーネルモードを終了すると、プロセスは元のユーザーモードを終了した時点以降の次のコマンドに簡単に戻ります。
ただし、プロセスに保留中の信号がある場合、カーネルは修正プロセスコンテキストを使用してユーザーモードに戻ると、シグナルハンドラの最初のコマンドに移動し、スタックは元々実行したシグナルハンドラに「特別な」サブルーチンを作成したように見えるように変更されます。呼び出しはユーザーモードを終了します(返却この「特別な」サブルーチン呼び出しには、元の状態を復元するためのシステム呼び出しが含まれます。
だから「ターゲット」プロセスは実行トークン~からスケジューラシグナルハンドラが最終的に実行される前の回数(何らかの理由でカーネルモードで停止した場合)。
2) いいえ - シグナルハンドラはプロセスのユーザモードコンテキストでのみ実行されます。
3)実際には何も実行されません。優先順位Linuxなどの時間共有システムでは計算しない限りいいねプロセス値なので掃除する存在しないこと。
スレッドといわゆる言葉によって状況が異なります。リアルタイムスケジューリングポリシー、したがって上記の説明は、非リアルタイムスケジューリングポリシー(存在する唯一のプロセスタイプ)で実行される単一スレッドプロセスにのみ適用されます。良かった昔に:-).