Unidad 3 Aso
Unidad 3 Aso
Unidad 3 Aso
Un sistema operativo debe asignar los recursos de la computadora entre las necesidades
potencialmente competitivas de múltiples procesos.
En el caso del procesador, el recurso que se debe asignar es el tiempo de ejecución en el
procesador. La forma de asignarlo es la planificación.
La función de planificación debe estar diseñada para satisfacer varios objetivos que incluyen:
Equidad
Ausencia de inanición de cualquier proceso
Uso eficiente del tiempo del procesador
Baja sobrecarga
Objetivos
En un sistema de un solo procesador, sólo se puede ejecutar un proceso a la vez. Otros deberán
esperar hasta que la CPU esté libre y se pueda reprogramar. El objetivo de la multiprogramación
es tener algún proceso en marcha en todo momento, para maximizar la utilización de la CPU.
La idea es relativamente simple. Un proceso se ejecuta hasta que debe esperar, típicamente para
la terminación de una petición de E/S. En un sistema informático simple, la CPU se queda
inactiva. Todo este tiempo de espera se desperdicia (no se realiza ningún trabajo útil). Con la
multiprogramación, se trata de utilizar este tiempo de manera productiva. Para esto, se mantienen
varios procesos en la memoria a la vez. Cuando un proceso tiene que esperar, el sistema
operativo toma la CPU saca a ese proceso y da la CPU a otro proceso. Cada vez que un proceso
tiene que esperar, otro proceso puede asumir el uso de la CPU.
La programación de este tipo es una función fundamental del sistema operativo.
Tipos de planificación
En muchos sistemas, esta actividad de planificación se divide en tres funciones independientes:
Planificación del procesador
Las decisiones de planificación de la CPU pueden tener lugar bajo las siguientes cuatro
circunstancias:
1. Cuando un proceso cambia del estado de ejecución al estado de espera o bloqueado (por
ejemplo, como resultado de una petición de E/S o una invocación de wait() para la
terminación de un proceso hijo)
2. Cuando un proceso cambia del estado de ejecución al estado preparado (por ejemplo,
cuando se produce una interrupción)
3. Cuando un proceso cambia del estado de espera al estado preparado (por ejemplo, al
finalizar la llamada de E/S que había generado el bloqueo)
4. Cuando un proceso termina
Para las situaciones 1 y 4, no hay nada para planificar. Se debe tomar un nuevo proceso para su
ejecución
Hay una opción, sin embargo, para las situaciones 2 y 3.
Cuando la planificación se lleva a cabo en las circunstancias 1 y 4, se dice que el esquema de
planificación es no expropiativo o cooperativo. De lo contrario, es expropiativo. Bajo
programación no expropiativa, una vez que a la CPU se le ha asignado un proceso, el proceso se
mantiene en la CPU hasta que la libera, ya sea terminando o cambiando al estado de espera o
bloqueo.
Modos de decisión
Fuente: http://williamstallings.com/OS/OS5e-inst.html
La Figura anterior muestra el uso de las prioridades.
Por claridad, el diagrama de colas está simplificado, ignorando la existencia de múltiples
colas bloqueadas y de estados suspendidos.
En lugar de una sola cola de procesos listos para ejecutar, se proporcionan un conjunto de
colas en orden descendente de prioridad:
(RQ: Request Queue) RQ0, RQ1, ... RQn, con la prioridad[RQi] > prioridad[RQj] para
i<j .
Cuando se va a realizar una selección en la planificación, el planificador comenzará en la
cola de listos con la prioridad más alta
(RQ0). Si hay uno o más procesos en la cola, se selecciona un proceso utilizando alguna
política de planificación (FCFS por ejemplo). Si RQ0 está vacía, entonces se examina
RQ1, y así sucesivamente.
Un problema de los esquemas de planificación con prioridades es que los procesos con
prioridad más baja pueden sufrir inanición. Esto sucederá si hay siempre un conjunto de
procesos de mayor prioridad listos para ejecutar.
Turno rotativo o planificación cíclica (Round robin)
Una forma directa de reducir el castigo que tienen los trabajos cortos con FCFS es la
expulsión basándose en el tiempo de uso de CPU. La política más sencilla es la del turno
rotativo, también denominada planificación cíclica.
Se genera una interrupción de reloj cada cierto intervalo de tiempo. Cuando sucede la
interrupción, el proceso actual en ejecución se sitúa en la cola de listos, y se selecciona el
siguiente trabajo según la política FCFS. Esta técnica es también conocida como cortar el
tiempo (time slicing), porque a cada proceso se le da una rodaja de tiempo antes de ser
expulsado.
Con la planificación en turno rotativo, el tema clave de diseño es la duración
del quantum de tiempo, o rodaja, a ser utilizada. Si el quantum es muy pequeño, el
proceso se moverá por el sistema relativamente rápido. Por otra parte, existe una
sobrecarga de procesamiento debido al manejo de la interrupción de reloj y por las
funciones de planificación y activación. De esta forma, se deben evitar los quantums de
tiempo muy pequeños. Por otra parte si el quantum es muy grande, los procesos
terminarán sus ráfagas antes de la ventana temporal de CPU asignada.
Cuando se habla de la planificación por prioridades, se hace en términos de alta prioridad
y baja prioridad.
Las prioridades son generalmente indicadas por un cierto rango fijo de números, tales
como 0 a 7 o 0 a 4.095.
Sin embargo, no existe un acuerdo general sobre si 0 es la prioridad más alta o más baja.
Algunos sistemas usan números bajos para prioridad; Otros utilizan números bajos para
alta prioridad. Esta diferencia puede confundir.
En este texto, se asume que los números bajos representan alta prioridad.
Planificación de multiprocesadores
Multiprocesamiento asimétrico
Observando lo que sucede con la memoria caché cuando un proceso se ha estado ejecutando en
un procesador específico, los datos más recientemente accedidos por el proceso están en el caché
para el procesador. Como resultado, los accesos de memoria sucesivos por el proceso se
satisfacen a menudo en la memoria caché.
Si el proceso migrara a otro procesador, el contenido de la memoria caché debe ser invalidado
para el primer procesador, y la memoria caché para el segundo procesador debe ser recargada.
Debido al alto costo de invalidar y recargar cachés, la mayoría de los sistemas SMP intentan
evitar la migración de procesos de un procesador a otro y en su lugar intentan mantener un
proceso en ejecución en el mismo procesador. Esto se conoce como afinidad del procesador, es
decir, un proceso tiene una afinidad para el procesador en el que se está ejecutando actualmente.
En los sistemas SMP, es importante mantener la carga de trabajo equilibrada entre todos los
procesadores para aprovechar al máximo los beneficios de tener más de un procesador. De lo
contrario, uno o más procesadores pueden permanecer inactivos mientras otros procesadores
tienen cargas de trabajo altas, junto con listas de procesos que esperan la CPU. El balanceo de
carga intenta mantener la carga de trabajo uniformemente distribuida entre todos los
procesadores en un sistema SMP. Es importante tener en cuenta que el equilibrio de carga suele
ser necesario sólo en sistemas en los que cada procesador tiene su propia cola privada de
procesos elegibles para ejecutar. En los sistemas con una cola de ejecución común, el equilibrio
de carga es a menudo innecesario, porque una vez que un procesador se vuelve inactivo,
inmediatamente extrae un proceso ejecutable de la cola de ejecución común. También es
importante notar, sin embargo, que en la mayoría de los sistemas operativos contemporáneos que
soportan SMP, cada procesador tiene una cola privada de procesos elegibles.
Hay dos enfoques generales para el equilibrio de carga: migración de empuje (push) y migración
de extracción (pull).
Con la migración de empuje, una tarea específica periódicamente comprueba la carga de cada
procesador y, si encuentra un desequilibrio, distribuye uniformemente la carga moviendo (o
empujando) los procesos de procesadores sobrecargados a procesadores inactivos o menos
ocupados.
La migración de extracción se produce cuando un procesador inactivo extrae una tarea de espera
de un procesador ocupado.