タイマー割り込みの前にプロセスが終了すると、Linuxカーネルはどのようにコンテキスト切り替えを実行しますか?
プロセスが実行中でタイマ割り込みが発生した場合、フラグがセットされると関数がschedule
自動的に呼び出され、スケジューリング機能が実行する次のプロセスを選択することがわかります。デフォルトでは、この場合、スケジューリング機能は現在のプロセスのコンテキストで実行されますが、タイマーが中断される前にプロセスが終了するとどうなりますか?schedule
この場合、誰が関数を呼び出しますか?どのコンテキストで動作しますか?
注:元のstackoverflowにこの質問を投稿しましたが、stackoverflowに回答がないため、ここにもう一度尋ねます。
答え1
タイマー割り込みは特定のプロセスに関連付けられていません。サービスが提供されると、カーネルは割り込みサービスルーチンを実行します。このコードとこのコードが呼び出すすべての関数は、「割り込みコンテキスト」で実行されます。
割り込みは、ほぼすべてのタスクの途中で処理できます。つまり、他の割り込みを処理するコードを含むカーネルコードの実行を一時停止して割り込みを処理できます。
スケジューラが呼び出されると、その時点に存在し、実行可能なプロセスのみが考慮されます。