1

Linux スケジューラとタスク スケジューリングの基本について調べてきました。set_tsk_need_resched() は、タスクの再スケジュールを可能にします。そこで、スケジュールについて質問です。

スケジューラー内で set_tsk_need_resched(next) を呼び出したときの動作は?

これにより、スケジューラーが次のタスクを選択して _schedule() から戻るとすぐに、スケジューラーが再度呼び出されるようになりますか?

4

1 に答える 1

1

set_need_resched 関数は、タスク構造体に NEED_RESCHED フラグを設定するだけで、このタスクを再スケジュールする必要があることをスケジューラに伝えます。したがって、このタスクは、スケジューラ呼び出しの次のインスタンスで再スケジュールされます。これは通常、タスクがコンテキストの切り替えを行うか、割り込みやシステムコールからの復帰 (再びコンテキストの切り替え) などを行うとき、または might_sleep() への遅延呼び出しを行うときに発生します。need resched フラグは通常、タイマー ティック ハンドラから設定されますが、いくつかの特殊なケースもあります。

于 2013-11-02T04:25:52.400 に答える