1

Linux プロセスがスケジュールされると、タイマー割り込みが発生して処理されるときに実際に発生しますよね? 間違っている場合、さらに説明はありますか?ありがとう!

4

2 に答える 2

2

いいえ。スケジューリングは、プロセスが実行を停止するたびに発生します。最も明白なのは、プロセスが終了するときだけでなく、プロセスをブロックさせるシステム コールを実行する任意の時点 (つまり、カーネルがすぐに結果を返すことができないもの) でも発生します。

于 2013-05-25T16:55:41.250 に答える
1

部分的に正しい。現在の Linux スケジューラ (CFS) によると、スケジューラ ティックごとに、スケジューラはプリエンプションを実行する時間であるかどうかをチェックします。これに加えて、タスクがスケジュールされる他のケースがあります - a) タスクが作成されるとき、つまり fork(); b) タスクが自発的に CPU を放棄したとき、つまり schedule() を呼び出したとき。c) タスクが終了したとき。

b & c の場合、現在の CPU に実行するプロセスがない可能性があります。その特定の状況では、CPU がアイドル状態になろうとして負荷のバランスを取ろうとします。つまり、負荷 (タスク) を最もビジーな CPU からそれ自体に転送しようとし、その特定のタスクを実行しようとします。これは、Linux でプロセスがどのようにスケジュールされるかを大まかにまとめたものです。

于 2013-05-25T17:03:53.757 に答える