Planificador

El kernel de Linux administra cuatro colas de planificación de procesos:

  • SCHED_RR: Basada en Round Robin, es una cola que asigna tiempo de procesador a los procesos de forma cíclica un tiempo finito que llamamos cuanto (q, quantum);
  • SCHED_FIFO: Basada en First In First Out, también dispone de un cuanto, pero normalmente no se usa porque no se fuerza al proceso a abandonar la CPU. Se usa en sistemas de tiempo real.
  • SCHED_OTHER: Planificación clásica de Linux. Se basa en prioridades dinámicas del sistema, que se establecen en una combinación de la prioridad de usuario y la de sistema.
  •  SCHED_YIELD : No es una política de planificación, sino un modificador que afecta a las tres políticas anteriores. El proceso cede la CPU a cualquier otro que esté listo. Se activa con una llamada al sistema (sched_yield()) sólo para el siguiente ciclo de planificación.

Para ver cómo funciona, podemos crear un programa en C que trabaje contra el planificador:

  1. Para establecer y recoger los parámetros de planificación:
     int sched_setparam(pid_t pid, const struct sched_param *p);
    int sched_getparam(pid_t pid, struct sched_param *p);
  2. Para conocer el intervalo del cuanto:
    int sched_rr_get_interval(pid_t pid, struct timespec *tp);
  3. Para conocer los algoritmos de planificación:
     int sched_setscheduler(pid_t pid, int policy, const struct sched_param *p);
    int sched_getscheduler(pid_t pid);
  4. Para conocer la el rango de prioridades estáticas:
    int sched_get_priority_max(int politica);
    int sched_get_priority_min(int politica);

Y como más vale una imagen, el código aquí

This entry was posted in Linux Kernel. Bookmark the permalink.