El sistema operativo: gestión de procesos - oposcaib

Anuncio
El sistema operativo: gestión de procesos
El sistema operativo: gestión de procesos
Índice de contenido
El sistema operativo: gestión de procesos.....................................................................................................1
Licencia......................................................................................................................................................1
Introducción...............................................................................................................................................1
Evolución histórica.................................................................................................................................1
Concepto de proceso..............................................................................................................................1
Ciclo de vida de un proceso........................................................................................................................2
Modelos de 5 y 7 estados.......................................................................................................................2
Planificación de procesos.......................................................................................................................4
Threads.......................................................................................................................................................5
Problemas de los sistemas multiproceso....................................................................................................5
Exclusión mutua.....................................................................................................................................6
Soluciones.........................................................................................................................................6
Interbloqueos..........................................................................................................................................6
Soluciones.........................................................................................................................................7
Inanición.................................................................................................................................................7
Licencia
Este obra de Jesús Jiménez Herranz está bajo una licencia Creative Commons AtribuciónLicenciarIgual 3.0 España.
Basada en una obra en oposcaib.wikispaces.com.
Introducción
Evolución histórica
Históricamente, los sistemas han evolucionado en la siguiente progresión:
●
●
●
●
Proceso en serie: Los programas se introducían de forma manual en el ordenador. No hay
multiprogramación.
Proceso batch: Se establece un sistema para encolar los programas y que se ejecuten en
sucesión. Sigue sin haber multiprogramación.
Batch con multiprogramación: Para aprovechar mejor la CPU, cuando un programa del proceso
batch ejecuta una operación de E/S, se conmuta a otro programa hasta que ésta acabe.
Tiempo compartido: Se divide el tiempo de CPU en pequeñas fracciones, asignándose cada una
de ellas a un programa. De esta manera se simula la ejecución en paralelo de todos los
programas.
Concepto de proceso
Si bien en la literatura se encuentran muchas definiciones, se puede decir que un proceso es el
conjunto de datos que representa a un programa en ejecución. Tiene sentido hablar de procesos en
entornos de multiprogramación, en los que hay varios programas ejecutándose pseudosimultáneamente. Cada uno de estos programas está representado mediante un proceso.
Un proceso se compone de:
●
●
●
Código ejecutable: Instrucciones que ejecuta el programa.
Datos de programa: Variables que usará el programa en su ejecución.
Contexto: Estado de la CPU, así como otras informaciones relevantes para describir al proceso.
Jesús Jiménez Herranz, http://oposcaib.wikispaces.com
1
El sistema operativo: gestión de procesos
La disposición de los programas en memoria sería la siguiente:
RAM
CPU
Planificador
PC
Proceso 1
Proceso 2
Proceso 3
Como se puede ver, en memoria estarían cargados los diferentes procesos, con su código, datos e
información de contexto. Un proceso adicional, perteneciente en este caso al sistema operativo,
sería el planificador, que se encargaría de decidir qué proceso debe ejecutarse en un momento dado.
Todo este procedimiento se implementaría alterando convenientemente el registro PC de la CPU,
que contiene la dirección de la siguiente instrucción a ejecutar.
Ciclo de vida de un proceso
Modelos de 5 y 7 estados
Los diferentes estados en los que puede estar un proceso se ven representados en el siguiente
diagrama:
Nuevo
Terminado
Cargado
Fin
ejecución o
error
Inicio quantum
Listo
Fin quantum
Fin
operación
E/S
Ejecución
Operación
E/S
Bloqueado
Jesús Jiménez Herranz, http://oposcaib.wikispaces.com
2
El sistema operativo: gestión de procesos
Así, los procesos se inician con la carga del programa, y a continuación quedan esperando a que
se les asigne la CPU (listo). En ese momento se empiezan a ejecutar, momento en el cual pueden
pasar dos cosas: que se acabe su quantum de CPU, en cuyo caso vuelven a esperar al siguiente, o
bien que ejecuten una operación de E/S. En este último caso el proceso pasa a estado de espera de
E/S (bloqueado) y abandona la CPU. Cuando la operación de E/S ha terminado, y por tanto el
proceso está en disposición de ejecutar más código, vuelve al estado listo.
Una implementación de este esquema podría ser la siguiente:
Listos
Fin
CPU
Inicio
Fin del quantum
Operación
de E/S
Bloqueados
Fin de E/S
En este esquema, los procesos que llegan al sistema se van encolando, y son atendidos en orden
por la CPU. Si, una vez en la CPU, el proceso agota su quantum, vuelve a ser encolado en la cola de
listos. Si por el contrario ejecuta una operación de E/S, pasa a otra cola, la de bloqueados, en la que
se encolarían los procesos que están esperando para alguna operación de E/S. Una vez obtenido su
turno y ejecutada la operación, el proceso volvería a la cola de listos. Si bien en el esquema se
muestra una única cola de bloqueados, en realidad debería haber tantas como dispositivos de E/S
existan en el sistema.
Un modelo que representa de forma más compleja el ciclo de vida de los procesos es el siguiente,
que contempla la posibilidad de descargar los procesos menos usados a disco para ahorrar memoria:
Nuevo
Terminado
Fin
ejecución o
error
Cargado
Poca RAM
o prioridad
Listo susp.
Inicio quantum
No hay listos
en RAM
Fin
operación
E/S
Listo
Fin quantum
Fin
operación
E/S
Ejecución
Operación
E/S
RAM libre
Bloq. susp.
Poca RAM
Bloqueado
Jesús Jiménez Herranz, http://oposcaib.wikispaces.com
3
El sistema operativo: gestión de procesos
En este caso, además de los estados del modelo anterior, se añaden dos adicionales: Listosuspendido y Bloqueado-suspendido. La diferencia entre estos estados y sus equivalentes no
suspendidos es que en estos últimos el proceso se encuentra en memoria, mientras que en los
suspendidos se ha descargado a disco. De esta manera es posible ahorrar memoria (que suele ser un
recurso escaso).
En este modelo, la idea es tener el máximo número de procesos en memoria, tanto listos como
bloqueados. Ahora bien, cuando la memoria escasea, la primera medida es descargar a disco a
procesos bloqueados. Si aún hay necesidad de memoria, y no hay ningún proceso bloqueado en
memoria, se empiezan a descargar los procesos listos. Conforme se vaya liberando memoria, los
procesos suspendidos irán siendo recargados.
Es importante planificar cuidadosamente la política de carga y descarga de procesos, intentando
descargar a disco procesos para los que no se prevea que entren en la CPU a corto plazo. En caso
contrario, se podrían producir ciclos de lecturas y escrituras que ralentizarían considerablemente el
sistema (hiperpaginación).
Planificación de procesos
En un sistema multiprogramado, en el que hay varios procesos en ejecución, la política que
definirá a qué proceso se le asigna la CPU en un momento dado es crucial para el buen rendimiento
del sistema. Básicamente existen los siguiente esquemas:
●
●
●
FIFO: Los procesos se ejecutan en orden de llegada. Tiene el problema de que ralentiza en
exceso a los procesos cortos.
Primero el más corto: En cada momento, se envía a la CPU el proceso más corto. Mejora el
tiempo de respuesta, pero es poco predecible (no es trivial determinar si un proceso es corto) y
puede provocar inanición.
Round-robbin: Se establece un tiempo (quantum) para cada proceso, al final del cual debe ceder
la CPU para ser asignada a otro proceso. Si el quantum es pequeño, se simula el efecto de la
ejecución simultánea de todos los procesos. Es un buen esquema de propósito general, aunque
sin una buena gestión de prioridades tiende a marginar a los procesos que usan mucha E/S.
Para implementar diferentes niveles de prioridad en el sistema, se puede establecer un esquema
como el siguiente:
Listos - 0
Listos - 1
CPU
Inicio
Fin
Listos - 2
Fin del quantum
Operación
de E/S
Bloqueados
Fin de E/S
En este caso, en vez de disponer de una cola de listos, existirían diferentes colas, cada una
correspondiente a una prioridad. El planificador del sistema, a la hora de seleccionar el proceso a
Jesús Jiménez Herranz, http://oposcaib.wikispaces.com
4
El sistema operativo: gestión de procesos
ejecutar en el siguiente quantum, buscaría en primer lugar entre los procesos de la cola 0. Si allí no
hay procesos listos, buscaría en la 1, y así sucesivamente. De esta manera, se implementa un sistema
de prioridades en el que los procesos más prioritarios podrán disponer de la CPU con preferencia
respecto a los de baja prioridad.
La prioridad de un proceso puede ser fija (asignada en el momento de la carga) o bien puede ir
variando durante la ejecución. Así, una política común para mejorar el comportamiento del sistema
es alterar la prioridad de los procesos según su comportamiento. Por ejemplo, si un proceso ha
usado sólo parte de su quantum debido a que se ha bloqueado por una operación de E/S, se le
aumenta la prioridad. Por el contrario, si ha agotado su quantum, su prioridad disminuye. De esta
manera, se mejora el tiempo de respuesta para los procesos de E/S, que sólo usan la CPU
esporádicamente, sin ralentizar en exceso los procesos de cálculo, ya que los procesos que les
adelantan liberan en seguida la CPU.
Threads
Si bien los procesos son un mecanismo imprescindible para conseguir un sistema operativo
multiprogramado, también es cierto que tienen una serie de inconvenientes:
●
●
Overhead: La gestión de procesos tiene asociado un overhead importante en lo que respecta a la
gestión de su contexto.
Dificultad de comunicación: La gran independencia de los procesos entre sí obliga a utilizar
mecanismos de comunicación generalmente complejos para que los diferentes procesos
intercambien información.
Por estos motivos, y para las ocasiones en los que los procesos resultan demasiado complejos, la
mayoría de sistemas operativos soportan lo que se conoce como hilos o threads. La diferencia
respecto a los procesos es que todos los hilos de un mismo proceso comparten el mismo contexto,
es decir, espacio de direcciones y variables, y asignación de recursos. Ventajas e inconvenientes:
Ventajas
●
●
Cambios de contexto extremadamente
rápidos
Comunicación entre threads sencilla
Inconvenientes
●
Mayores problemas de concurrencia:
interbloqueos, exclusión mutua, etc.
Problemas de los sistemas multiproceso
El hecho de ejecutar varios procesos a la vez, compartiendo por tanto los recursos de la máquina,
da lugar a diferentes problemas:
●
●
●
Exclusión mutua: Es difícil garantizar que sólo accederá un proceso a la vez a un recurso dado.
Interbloqueos: Si hay interdependencias entre las necesidades de recursos de dos procesos,
pueden producirse situaciones de espera infinita.
Inanición: La existencia de procesos de diferentes prioridades puede dar lugar a que algunos
procesos no reciban tiempo de CPU al estar permanentemente superados por otros de mayor
prioridad.
Jesús Jiménez Herranz, http://oposcaib.wikispaces.com
5
El sistema operativo: gestión de procesos
Exclusión mutua
Cuando dos procesos diferentes acceden al mismo recurso, hay que controlar quién está
accediendo en cada momento, ya que de lo contrario se pueden dar situaciones peligrosas. Por ello,
es necesario utilizar técnicas que garanticen que sólo un proceso está accediendo a un recurso dado
(región crítica) en cada momento.
Soluciones
Para conseguir la exclusión mutua en el acceso a un recurso, hay básicamente dos enfoques:
utilizar algoritmos que organicen el acceso a los recursos de forma ordenada, o bien utilizar
mecanismos provistos por el sistema operativo. Los diferentes algoritmos para conseguir la
exclusión mutua son:
●
●
●
Algoritmo de Dekker: Usar un flag para indicar la intención de entrar en la sección crítica. A
continuación, si el turno es de otro proceso, abandonar la intención hasta que el otro proceso
haya acabado. En ese momento ya podemos entrar a la región crítica.
Algoritmo de Peterson: Versión simplificada del anterior. Consiste en establecer el flag de
intención, y a continuación dar el turno al otro proceso hasta que lo suelte. En ese momento ya
podemos entrar en la región crítica.
Algoritmo de la panadería: Consiste básicamente en asignar a los procesos un número que
indicará el orden de acceso. A partir de ahí, los procesos esperarán hasta que sea su turno.
Si bien estos algoritmos pueden garantizar la exclusión mutua, generalmente implican que el
proceso espere de forma activa, lo cual es ineficiente desde el punto de vista de la CPU. Por tanto, el
sistema más utilizado consiste en usar diferentes mecanismos provistos por el propio sistema
operativo:
●
●
●
Semáforos: Es un TAD con dos operaciones atómicas: wait (P) y signal (V), y un parámetro, su
tamaño. Básicamente un semáforo es una variable que se incrementa con wait() y se decrementa
con signal(). Si al hacer wait() el valor interno iguala o supera al tamaño, se proceso queda
bloqueado hasta que otro proceso hace un signal(). De esta manera, si N procesos hacen wait()
de un semáforo de tamaño M antes de entrar a la región crítica, se garantiza que sólo entrarán a
la región crítica M procesos simultáneamente. Para un M=1, se dice que es un semáforo binario.
Monitores: Son estructuras que integran los datos objeto de la exclusión mutua con las
operaciones que los manipulan. Por la estructura de los monitores, se garantiza la ordenación de
las ejecuciones de las operaciones, así como la exclusión mutua en el acceso. Usando monitores,
la mayor parte del código destinado a sincronización queda encapsulado dentro del propio
monitor, por lo que es un mecanismo más limpio y escalable que los semáforos.
Paso de mensajes: En sistemas en los que la implementación de mecanismos como semáforos
no es trivial, como por ejemplo en sistemas distribuidos, se utiliza el paso de mensajes como
forma de sincronización. En este esquema, cualquier proceso utiliza dos operaciones: send() y
receive(), que permiten el intercambio de información y la sincronización de operaciones.
Interbloqueos
Un interbloqueo o deadlock se da cuando dos procesos esperan mutuamente a que el otro libere
un recurso para continuar. Como ambos están esperando al otro para liberar el recurso, la espera es
infinita y los procesos quedan bloqueados. Si en el proceso participan más de dos procesos, se
conoce como espera circular.
Jesús Jiménez Herranz, http://oposcaib.wikispaces.com
6
El sistema operativo: gestión de procesos
Las condiciones para que se dé un interbloqueo son:
●
●
●
Exclusión mutua: Un proceso debe poder reservar en exclusiva un recurso
Reserva múltiple: Los procesos deben poder reservar en exclusiva más de un recurso a la vez
Espera circular: Los procesos involucrados deben tener un recurso asignado, y estar esperando
para el recurso reservado del siguiente. El último proceso de la cadena debe estar solicitando el
recurso del primero
Soluciones
Algunas soluciones a los interbloqueos son:
●
●
●
●
●
Liberación ante denegación: Si un proceso con un recurso asignado pide otro, y se le deniega,
está obligado a liberar todos los recursos
Prioridad: En caso de interbloqueo, el proceso de menor prioridad debe ceder y liberar su
recurso en favor del de mayor prioridad. Al igual que el anterior, sólo es aplicable con recursos
fácilmente liberables.
Ordenación de recursos: Ordenar linealmente los recursos, e impedir peticiones de recursos con
un identificador menor a los ya asignados. Elimina los interbloqueos, pero impide también
muchos accesos legítimos.
Grafo de dependencias: Construir un grafo con las dependencias entre procesos para detectar
ciclos y resolverlos mediante la anulación de los procesos que provocan el interbloqueo.
Algoritmo del banquero: Algoritmo que lleva un control sobre el estado del sistema en lo que
respecta a la asignación de recursos. Así, cada proceso informa al iniciarse la cantidad máxima
de recursos que va a utilizar. A partir de ahí, en cada petición de recursos el sistema analiza si
esa asignación puede llevar a un estado “inseguro”, es decir, desde el que (teniendo en cuenta la
previsión de consumo de recursos) se puede llegar a un interbloqueo. Si es así, no autoriza la
petición. Dado que generalmente no es posible prever el consumo de recursos de un proceso, no
es un método demasiado factible.
Dado que ninguna de estas soluciones es infalible, el mejor resultado se consigue combinando
diferentes técnicas.
Inanición
La inanición se da cuando un proceso ve negado perpetuamente el acceso a un recurso, por lo
que nunca puede finalizar su ejecución. Esto se debe generalmente a la ejecución de otros procesos
con mayor prioridad a los que siempre se les asignan los recursos.
Un caso especial de inanición se da cuando a un proceso C se le niega el acceso a un recurso en
favor de B, un proceso de mayor prioridad. Si además C es el responsable de un resultado por el que
está esperando A, un proceso de mayor prioridad aún que B y C, sucederá que A sufrirá inanición a
pesar de ser el proceso de mayor prioridad del sistema. Esto se conoce como inversión de
prioridades.
La solución a la inanición pasa por establecer mecanismos que asignen una cantidad mínima de
cada recurso a todos los procesos, independientemente del sistema de prioridades.
Jesús Jiménez Herranz, http://oposcaib.wikispaces.com
7
Descargar