dies eine Funktion in Linux-Scheduler ist, bei der Umsetzung der Completely Fair Scheduler, der auf dem Weg ist: root/kernel/Sched/fair.c (link to the file)was tut yield_task_fair() tun in Linux Scheduler
Jetzt möchte ich wissen, was diese Zeile Zeile für Zeile bedeutet. Jede Antwort oder jeder Link zu einer vollständigen Dokumentation wird geschätzt.
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);
}
Ihnen sehr für Ihre Antwort danken! Es ist sehr hilfreich! nur ein paar kleine Fragen! –
nur ein paar kleine Fragen! Ich habe diesen Teil nicht verstanden: clear_buddies (cfs_rq, se); Ich habe den Link gelesen, den du geschickt hast, aber leider nicht verstanden! Was ist "Kumpel"? und kannst du die Funktion mehr erklären? zusätzlich ... Ich habe den Kommentar für "update_curr (cfs_rq);" –
Buddies sind bestimmte Aufgaben in der Runqueue - last, next und skip -, die über die Aufrufe 'set_last_buddy',' set_next_buddy' und 'set_skip_buddy' zugewiesen und dann bei der Auswahl der nächsten auszuführenden Aufgabe verwendet werden. Versuchen Sie, die [Implementierung von pick_next_entity] (http://lxr.free-electronics.com/source/kernel/sched/fair.c#L3391) zu verstehen. 'update_curr' dient nur zur Pflege von Statistiken und spielt keine Rolle - z. für CPU-Abrechnungen (gesehene CPU-Quoten in der Virtualisierung?) und allgemeine Updates für die Aufzeichnung von Daten, die Sie beispielsweise über procfs im Userspace lesen können. –