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
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