を行います今、私はこの機能をラインごとに何をするのか知りたい。すべての回答や完全な文書へのリンクは高く評価されます。)は、これがパスにあるCOMPLETELY FAIR SCHEDULERの実装では、Linuxのスケジューラ内の関数であるLinuxのスケジューラに
static void yield_task_fair(struct rq *rq)
{
struct task_struct *curr = rq->curr;
struct cfs_rq *cfs_rq = task_cfs_rq(curr);
struct sched_entity *se = &curr->se;
/*
* Are we the only task in the tree?
*/
if (unlikely(rq->nr_running == 1))
return;
clear_buddies(cfs_rq, se);
if (curr->policy != SCHED_BATCH) {
update_rq_clock(rq);
/*
* Update run-time statistics of the 'current'.
*/
update_curr(cfs_rq);
/*
* Tell update_rq_clock() that we've just updated,
* so we don't do microscopic update in schedule()
* and double the fastpath cost.
*/
rq->skip_clock_update = 1;
}
set_skip_buddy(se);
}
あなたの答えのためにどうもありがとうございました!それは非常に有用です! ちょっとした質問です! –
ちょっとした質問! 私はこの部分を理解しませんでした:clear_buddies(cfs_rq、se); あなたが送ったリンクを読みましたが、残念ながら理解できませんでした! 「バディ」とは何ですか?あなたはもっと機能を説明できますか? さらに...私は "update_curr(cfs_rq);"というコメントを理解できませんでした。 –
バディは、 'set_last_buddy'、' set_next_buddy'、 'set_skip_buddy'を介して実行キュー内の特定のタスク(最後、次、スキップ)に割り当てられ、実行する次のタスクの選択に使用されます。 [pick_next_entityの実装](http://lxr.free-electrons.com/source/kernel/sched/fair.c#L3391)を理解してください。 'update_curr'は統計情報を保持するためのものであり、多くは関係ありません。 CPUアカウンティング(仮想化ではCPUクォータと見なされていますか?)や、ユーザー空間のprocfsなどで読み取ることができるデータを記録するための一般的なアップデートがあります。 –