loll

Páginas: 2 (380 palabras) Publicado: 6 de julio de 2013
if (next->activated == 1)
2787 delta = delta * (ON_RUNQUEUE_WEIGHT * 128 / 100) / 128;
2788
2789 array = next->array;
2790dequeue_task(next, array);
2791 recalc_task_prio(next, next->timestamp + delta);
2792 enqueue_task(next, array);
2793 }
2794 next->activated = 0;
2795switch_tasks:
2796 if (next == rq->idle)
2797 schedstat_inc(rq, sched_goidle);
2798 prefetch(next);
2799 clear_tsk_need_resched(prev);
El objetivo esidentificar en el conjunto de procesos preparados el más prioritario en este momento, que deberá quedar almacenado en la variable next.

Se empieza por buscar con la función sched_find_first_bit()[include/asm-i386/bitops.h#L386] el primer bit a uno en el mapa de bits de las tareas activas (el mapa tiene 140 bits, uno por posible prioridad, aunque de la 0 a la 100 son de tiempo real y por tantomenos probables que las de 101 a 140). Esto se hace muy eficientemente en el i386 mediante una instrucción ensamblador específica: bsfl [#2779]
Se accede a la cola correspondiente y se asigna a nextel primer proceso de la misma. Todas estas operaciones suponen un coste independiente del número de procesos preparados. [#2780-2781]
Si el proceso elegido next no es de tiempo real, hay queactualizar la estimación de su tiempo de espera teniendo en cuenta el que ha pasado preparado esperando a ser elegido. Para ello usamos el valor del campo activated que vale 1 cuando el proceso fuedespertado por una llamada al sistema o un hilo del núcleo y 2 cuando fue despertado por un manejador de interrupción. Dado que los procesos interactivos son despertados más probablemente por manejadoresde interrupción, se pondera más la espera en este caso [#2783-2794]

Cambiando el proceso en ejecución

kernel/sched.c [2795-2828]
2795 switch_tasks:
2796 if (next == rq->idle)
2797...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Loll
  • Loll
  • lollada
  • lollo
  • loll
  • lollo
  • loll
  • loll

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS