12.10.2014 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!