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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Diseño <strong>de</strong> Sistemas Operativos<br />

Tema <strong>2.</strong> Gestión <strong>de</strong> Procesos<br />

• int nice(inc). La primitiva nice permite modificar la prioridad dinámica <strong>de</strong>l proceso actual. El<br />

parámetro inc se aña<strong>de</strong> a la prioridad actual. Sólo un proceso privilegiado pue<strong>de</strong> especificar un<br />

valor negativo para este parámetro con el objetivo <strong>de</strong> aumentar su prioridad. En caso <strong>de</strong> éxito nice<br />

<strong>de</strong>vuelve el valor 0, si no nice <strong>de</strong>vuelve el valor –1 y la variable errno toma el valor EPERM, que<br />

indica que el proceso que llama no posee los privilegios para aumentar su prioridad.<br />

• Control <strong>de</strong> procesos sobre su prioridad <strong>de</strong> planificación ⇒ nice (valor).<br />

• Cálculo <strong>de</strong> la prioridad <strong>de</strong>l proceso.<br />

– prioridad = (uso_reciente_CPU / cte.) + (prioridad_base) + (valor_nice).<br />

• Nice incrementa o <strong>de</strong>crementa (superusuario) valor_nice en la tabla <strong>de</strong> procesos con valor. El valor<br />

dado a valor_nice revalora o <strong>de</strong>grada el prioridad dinámica <strong>de</strong> un proceso.<br />

• Se hereda ⇒ El valor <strong>de</strong> prioridad asignado por nice es heredado por los procesos hijo <strong>de</strong>spués <strong>de</strong><br />

realizar la llamada.<br />

• Características.<br />

– Trabaja únicamente para procesos que están en ejecución.<br />

– El Proceso1 no pue<strong>de</strong> variar el valor_nice <strong>de</strong>l Proceso <strong>2.</strong><br />

– El administrador <strong>de</strong>ci<strong>de</strong> bajar la prioridad P <strong>de</strong>l proceso que consume mucha CPU ⇒<br />

Matarlo.<br />

• Otras funciones para el control <strong>de</strong> priorida<strong>de</strong>s <strong>de</strong> procesos son: setpriority y getpriority.<br />

– La llamada al sistema setpriority modifica la prioridad <strong>de</strong> un proceso, <strong>de</strong> un grupo <strong>de</strong><br />

procesos o <strong>de</strong> todos los procesos <strong>de</strong> usuario.<br />

– La llamada al sistema getpriority permite obtener la prioridad <strong>de</strong> un proceso, <strong>de</strong> un grupo <strong>de</strong><br />

procesos o <strong>de</strong> todos los procesos <strong>de</strong> usuario.<br />

• Algoritmo <strong>de</strong> planificación anterior ⇒ no diferencia clases <strong>de</strong> usuarios.<br />

• Principio <strong>de</strong> los Planificadores <strong>de</strong> Trato Justo.<br />

– Dividir usuarios en grupos <strong>de</strong> porción justa.<br />

– Asignación <strong>de</strong> la CPU proporcional a cada grupo.<br />

– Restricciones habituales a los miembros <strong>de</strong> cada grupo.<br />

• Implementación simple.<br />

– prioridad_trato_justo compartida por todos los procesos <strong>de</strong>l grupo.<br />

– Manejador <strong>de</strong> interrupciones incrementa el valor <strong>de</strong> prioridad_trato_justo para procesos en<br />

ejecución.<br />

<strong>2.</strong>10.4. Scheduler <strong>de</strong> Linux.<br />

El scheduler es el elemento <strong>de</strong>l kernel (subsistema <strong>de</strong> control <strong>de</strong> procesos) que <strong>de</strong>ci<strong>de</strong> qué proceso (listo para<br />

su ejecución en memoria principal) <strong>de</strong>be ser ejecutado por el procesador (CPU). El scheduler explora la lista<br />

<strong>de</strong> procesos “listos para ejecutarse en memoria” y utiliza varios criterios para elegir el proceso a ejecutar. Es<br />

<strong>de</strong>cir, cuando hay más <strong>de</strong> un proceso “listo para ejecutarse”, el sistema operativo <strong>de</strong>be <strong>de</strong>cidir cuál ejecutará<br />

primero, la parte <strong>de</strong>l sistema operativo que toma esta <strong>de</strong>cisión es el scheduler, y los algoritmos que utiliza se<br />

<strong>de</strong>nominan algoritmos <strong>de</strong> planificación.<br />

El scheduler tiene que elegir el proceso que más merece ejecutarse entre todos los procesos que se pue<strong>de</strong>n<br />

ejecutar en el sistema. Un proceso ejecutable es aquel que en kernel/sched.c está esperando sola mente a una<br />

CPU para ejecutarse. Linux usa un algoritmo para planificar las priorida<strong>de</strong>s razonablemente simple para<br />

elegir un proceso entre los procesos que hay en el sistema. Cuando ha elegido un nuevo proceso para<br />

ejecutar, el scheduler salva el estado <strong>de</strong>l proceso en curso, los registros específicos <strong>de</strong>l procesador y otros<br />

contextos en la estructura <strong>de</strong> datos task_struct. Luego restaura el estado <strong>de</strong>l nuevo proceso (que también es<br />

específico a un procesador) para ejecutarlo y da control <strong>de</strong>l sistema a ese proceso. Para que el scheduler<br />

asigne el tiempo <strong>de</strong> la CPU justamente entre los procesos ejecutables en el sistema, el scheduler mantiene<br />

cierta información en la estructura task_struct <strong>de</strong> cada proceso:<br />

Departamento <strong>de</strong> Lenguajes y Computación. <strong>Universidad</strong> <strong>de</strong> Almería Página <strong>2.</strong>62

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

Saved successfully!

Ooh no, something went wrong!