Estamos usando kernel versión 2.4-20 y necesitamos contar la cantidad de usuarios activos, en modo kernel. El objetivo es cambiar el programador, por lo que estamos en sched.c, modificando la función schedule().cómo contar el número de usuarios activos en kernel
Lo que hacemos es contar los usuarios en la macro 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;
}
}
que básicamente está agregando usuarios únicos a una lista. Sin embargo, obtenemos resultados aleatorios. ¿Hay alguna manera concreta de resolver este problema?
Gracias.
¿Qué quiere decir con 'resultados aleatorios'? – ArjunShankar
Al principio contamos usuarios en la función de bondad(), allí teníamos números absolutamente arbitrarios (aunque teníamos 4 usuarios corriendo al mismo tiempo, podríamos obtener 1 usuario como resultado). en sched(), parece que tenemos valores consistentes pero no estamos seguros, ya que sched() se ejecuta con tanta frecuencia, necesitamos tomar muestras (una vez en 5000 turnos). Supongo que no hay ningún campo en kernel que tenga usuarios activos actualmente? si no lo hay, ¿cuál es la mejor manera de contarlos? Gracias por su respuesta. –
Gracias por aclarar. No sé la respuesta a esto. Mi intención era señalar que la pregunta no era del todo clara. Sugeriría editar esto en la pregunta. ¡Buena suerte! – ArjunShankar