5

したがって、タスクがタイムスライスを使い果たした後、タスクは赤黒木に再挿入されます。タスクが以前に長時間スリープしていて、ランキュー内の他のタスクと比較して非常に短いvruntimeが発生した場合、赤黒木の左端のノードとして繰り返し再挿入されますよね?その結果、それは常に実行する次のタスクとしてピックアップされますか?core.cとfair.cのソースコードを確認しましたが、このタスクが他のタスクに譲る場所は見つかりませんでした。funciton pick_next_entity()には、cfs_rq-> next、cfs_rq-> lastなどの実行優先度が高いタスクがいくつかありますが、これは非常に小さいタスクを防ぐための正しい場所ではないと思います。プロセッサを長時間使用することによるvruntimeですね。誰か手がかりがありますか?ありがとう、

4

1 に答える 1

4

私は答えを見つけました。タスクがランキューからデキューされると、これは次のように呼び出されます。se-> vruntime-= cfs_rq-> min_vruntimeタスクが再びランキューにエンキューされると、これは次のように呼び出されます。 vruntimeのオフセットは、タスクがスリープしているときに保存され、タスクがウェイクアップしたときに再び追加されます。

于 2012-07-03T13:38:31.010 に答える