Мы используем версию ядра 2.4-20, и нам нужно подсчитать количество активных пользователей в режиме ядра. Цель состоит в том, чтобы изменить планировщик, поэтому мы находимся в sched.c, изменяя функцию schedule().
Что мы делаем, так это подсчитываем пользователей в макросе 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;
}
}
, который в основном добавляет уникальных пользователей в список. Однако мы получаем случайные результаты. Есть ли конкретный способ решить эту проблему?
Спасибо.