TEMA 2. GESTIÃN DE PROCESOS - Universidad de AlmerÃa
TEMA 2. GESTIÃN DE PROCESOS - Universidad de AlmerÃa
TEMA 2. GESTIÃN DE PROCESOS - Universidad de AlmerÃa
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Diseño <strong>de</strong> Sistemas Operativos<br />
Tema <strong>2.</strong> Gestión <strong>de</strong> Procesos<br />
cola <strong>de</strong> ejecución (Listos). Esto significa que no se les consi<strong>de</strong>rará para ejecución cuando el<br />
scheduler busca un proceso para ejecutar.<br />
• Selección <strong>de</strong> un proceso. El scheduler mira los procesos en la cola <strong>de</strong> ejecución para buscar el que<br />
más se merezca ejecutarse. Si hay algún proceso <strong>de</strong> tiempo real (aquellos que tienen una política <strong>de</strong><br />
planificación <strong>de</strong> tiempo real) entonces estos recibirán un mayor peso que los procesos ordinarios.<br />
El peso <strong>de</strong> un proceso normal es su contador counter pero para un proceso <strong>de</strong> tiempo real es su<br />
contador counter más 1000. Esto quiere <strong>de</strong>cir que si hay algún proceso <strong>de</strong> tiempo real que se pueda<br />
ejecutar en el sistema, estos se ejecutarán antes que cualquier proceso normal. El proceso en curso,<br />
que ha consumido parte <strong>de</strong> su porción <strong>de</strong> tiempo (se ha <strong>de</strong>crementado su contador counter) está en<br />
<strong>de</strong>sventaja si hay otros procesos con la misma prioridad en el sistema; esto es lo que se <strong>de</strong>sea. Si<br />
varios procesos tienen la misma prioridad, se elige el más cercano al principio <strong>de</strong> la cola. El<br />
proceso en curso se pone al final <strong>de</strong> la cola <strong>de</strong> ejecución. En un sistema equilibrado con muchos<br />
procesos que tienen las mismas priorida<strong>de</strong>s, todos se ejecutarán por turnos. Esto es lo que conoce<br />
como planificación round robin. Sin embargo, como los procesos normalmente tiene que esperar a<br />
obtener algún recurso, el or<strong>de</strong>n <strong>de</strong> ejecución tien<strong>de</strong> a verse alterado.<br />
• Cambiar procesos. Si el proceso más merecedor <strong>de</strong> ejecutarse no es el proceso en curso, entonces<br />
hay que suspen<strong>de</strong>rlo y poner el nuevo proceso a ejecutarse. Cuando un proceso se está ejecutando<br />
está usando los registros y la memoria física <strong>de</strong> la CPU y <strong>de</strong>l sistema. Cada vez que el proceso<br />
llama a una rutina le pasa sus argumentos en registros y pue<strong>de</strong> poner valores salvados en la pila,<br />
tales como la dirección a la que regresar en la rutina que hizo la llamada. Así, cuando el scheduler<br />
se ejecuta, se ejecuta en el contexto <strong>de</strong>l proceso en curso. Estará en un modo kernel pero aún así el<br />
proceso que se ejecuta es el proceso en curso. Cuando este proceso tiene que suspen<strong>de</strong>rse, el estado<br />
<strong>de</strong> la máquina, incluyendo el contador <strong>de</strong> programa (program counter, PC) y todos los registros <strong>de</strong>l<br />
procesador se salvan en la estructura task_struct. A continuación se carga en el procesador el estado<br />
<strong>de</strong>l nuevo proceso. Esta operación es <strong>de</strong>pendiente <strong>de</strong>l sistema; diferentes CPUs llevan esta<br />
operación a cabo <strong>de</strong> maneras distintas, pero normalmente el hardware ayuda <strong>de</strong> alguna manera. El<br />
cambio <strong>de</strong>l contexto <strong>de</strong> los procesos se lleva a cabo al finalizar el scheduler. Por lo tanto, el<br />
contexto guardado para el proceso anterior es una imagen instantánea <strong>de</strong>l contexto <strong>de</strong>l hardware <strong>de</strong>l<br />
sistema tal y como lo veía ese proceso al final <strong>de</strong>l scheduler. Igualmente, cuando se carga el<br />
contexto <strong>de</strong>l nuevo proceso, también será una imagen instantánea <strong>de</strong> cómo estaban las cosas<br />
cuando terminó el scheduler, incluyendo el contador <strong>de</strong> programa (program counter, PC) <strong>de</strong> este<br />
proceso y los contenidos <strong>de</strong> los registros. Si el proceso anterior o el nuevo proceso en curso hacen<br />
uso <strong>de</strong> la memoria virtual, entonces habrá que actualizar las entradas en la tabla <strong>de</strong> páginas <strong>de</strong>l<br />
sistema. Una vez más, esta operación es específica <strong>de</strong> cada arquitectura.<br />
El scheduler <strong>de</strong> Linux proporciona tres políticas <strong>de</strong> planificación diferentes: una para los procesos<br />
“normales” y dos para los procesos en “tiempo real” (interrumpibles o no interrumpibles). A cada proceso se<br />
le asocia un tipo <strong>de</strong> proceso, una prioridad fija y una prioridad variable. El tipo <strong>de</strong> proceso pue<strong>de</strong> ser:<br />
SCHED_FIFO = para un proceso <strong>de</strong> “tiempo real” no interrumpible, SCHED_RR = para un proceso en<br />
“tiempo real” interrumpible, y SCHED_OTHER = para un proceso normal. La política <strong>de</strong> planificación<br />
<strong>de</strong>pen<strong>de</strong> <strong>de</strong>l tipo <strong>de</strong> procesos contenidos en la lista <strong>de</strong> procesos “listos para ejecutarse”:<br />
• Cuando un proceso <strong>de</strong> tipo SCHED_FIFO esta listo para ejecutarse, se ejecuta inmediatamente. El<br />
scheduler da prioridad a la ejecución <strong>de</strong>l proceso <strong>de</strong> tipo SCHED_FIFO que posea la más alta<br />
prioridad, y lo ejecuta. Este proceso es normalmente no interrumpible, es <strong>de</strong>cir, que el proceso<br />
posee el procesador y el sistema solo interrumpirá su ejecución en tres casos:<br />
1. Otro proceso <strong>de</strong> tipo SCHED_FIFO que posea una prioridad más elevada para al estado <strong>de</strong><br />
listo para ejecutarse y se ejecuta inmediatamente.<br />
<strong>2.</strong> El proceso se suspen<strong>de</strong> en espera <strong>de</strong> un evento (durmiendo), como por ejemplo, el fin <strong>de</strong> una<br />
operación <strong>de</strong> entrada/salida.<br />
3. El proceso abandona voluntariamente el procesador para una llamada a una primitiva<br />
sched_yield. El proceso pasa a estado <strong>de</strong> listo para ejecutarse y se ejecutan otros procesos.<br />
• Cuando un proceso <strong>de</strong> tipo SCHED_RR está listo para ejecutarse, se ejecuta inmediatamente. Su<br />
comportamiento es similar al <strong>de</strong>l SCHED_FIFO, con una excepción: cuando el proceso se ejecuta<br />
se le atribuye un quantum <strong>de</strong> tiempo. Cuando este quantum expira, pue<strong>de</strong> elegirse y ejecutarse un<br />
proceso <strong>de</strong> tipo SCHED_FIFO o SCHED_RR <strong>de</strong> prioridad mayor o igual a la <strong>de</strong>l proceso actual.<br />
Departamento <strong>de</strong> Lenguajes y Computación. <strong>Universidad</strong> <strong>de</strong> Almería Página <strong>2.</strong>64