Używamy wersji jądra 2.4-20 i musimy policzyć liczbę aktywnych użytkowników, w trybie jądra. Celem jest zmiana programu planującego, więc jesteśmy w sched.c, modyfikując funkcję harmonogramu().jak liczyć liczbę aktywnych użytkowników w jądrze
Co możemy zrobić, to policzyć użytkowników w makrze list_for_each.
list_for_each(tmp, &runqueue_head) {
p = list_entry(tmp, struct task_struct, run_list);
if (can_schedule(p, this_cpu)) {
if (unique(p->uid)) add_new_user(p->uid);
int weight = goodness(p, this_cpu, prev->active_mm);
if (weight > c)
c = weight, next = p;
}
}
który jest w zasadzie dodawania unikalnych użytkowników na liście. Dostajemy jednak losowe wyniki. Czy istnieje konkretny sposób rozwiązania tego problemu?
Dziękuję.
Co masz na myśli przez "przypadkowe wyniki"? – ArjunShankar
Początkowo policzyliśmy użytkowników w funkcji dobroci(), tam mieliśmy absolutnie dowolne liczby (mimo, że mieliśmy 4 użytkowników działających w tym samym czasie, możemy uzyskać 1 użytkownika jako wynik). w sched(), wydaje się, że mamy stałe wartości, ale nie jesteśmy pewni, ponieważ sched() jest uruchamiany tak często, musimy pobrać próbki (raz na 5000 obrotów). Domyślam się, że w jądrze nie ma pola, które zawiera aktualnych aktywnych użytkowników? jeśli nie, jaki jest najlepszy sposób ich policzenia? Dzięki za twoją odpowiedź. –
Dzięki za wyjaśnienie. Nie znam odpowiedzi na to. Moim zamiarem było zwrócenie uwagi, że pytanie nie było całkowicie jasne. Sugerowałbym, żeby to zmienić w pytanie. Powodzenia! – ArjunShankar