miércoles, 24 de agosto de 2011

Planificacion de CPU en Linux

El Process Scheduler (SCHED), es el componente del kernel encargado de controlar el acceso de los procesos al CPU. El SCHED es el componente de bajo nivel más importante del sistemas; todos los demás (incluyendo los módulos de acceso a disco, controladores de video, etc.), dependen directamente de él.
Los procesos en Linux pueden ser divididos en tres categorías, relacionadas con la prioridad: interactivos, por lotes y de tiempo real. Los procesos TR son manejados bien por un algoritmo FIFO o RR. Los demás procesos son despachados utilizando planificación RR con un sistema de envejecimiento basado en créditos, donde el siguiente proceso a ejecutar es aquel que más créditos posea. Los procesos TR son considerados prioritarios sobre cualquier otro proceso en el sistema, por lo que serán ejecutados antes que los demás. Por otro lado, un proceso puede estar en alguno de estos estados: en ejecución, en espera, detenido o zombie (un proceso que, aunque ha finalizado su ejecución, mantiene su PCB en el sistema).

Algunos aspectos de la estructura interna del kernel que caben destacarse son:

• La PCB está representada por la estructura task_struct. Ésta indica el tipo de planificación (FIFO,RR) por medio del campo policy, la prioridad (priority), el contador del programa (counter), entre otros.
• La función goodness otorga una “calificación” al proceso pasado como parámetro. Dicha puntuación oscila entre -1000 (no elegible) y +1000 (TR). Los procesos que comparten una zona de memoria ganan una puntuación equivalente a su prioridad.
• El quantum varía según el proceso y su prioridad. La duración base es de aprox. 200ms.
• La función switch_to es la encargada de salvar la información de un proceso y cargar el siguiente.
• Las funciones sched_{get/set}scheduler se refieren al mecanismo de planificación asociado a ese proceso. De igual forma el equivalente con ...param devuelve/fija la prioridad de un proceso.
• Una nueva copia del proceso actual es creada mediante la llamada al sistema fork. Para ejecutar un nuevo programa se utiliza la función execve.

No hay comentarios:

Publicar un comentario