Estados de
un proceso.
El principal trabajo del procesador es
ejecutar las instrucciones de máquina que se encuentran en memoria principal.
Estas instrucciones se encuentran en forma de programas. Para que un programa pueda
ser ejecutado, el sistema operativo crea
un nuevo proceso, y el procesador ejecuta una tras otra las instrucciones del
mismo.
En un entorno
de multiprogramación, el procesador intercalará la ejecución de instrucciones
de varios programas que se encuentran en memoria. El sistema operativo
es el responsable de determinar las pautas de intercalado y asignación de recursos a cada
proceso.
Modelo
de dos estados.
El modelo de estados
más simple es el de dos estados. En este modelo,
un proceso puede estar ejecutándose o no. Cuando se crea un nuevo proceso, se
pone en estado de No
ejecución. En algún momento el proceso que se está ejecutando pasará al estado No
ejecución y otro proceso
se elegirá de la lista de procesos listos
para ejecutar para ponerlo en estado Ejecución.
De esta
explicación se desprende que es necesario que el sistema operativo pueda
seguirle la pista a los procesos, conociendo su estado y el lugar que ocupa en
memoria. Además los procesos que no se están ejecutando deben guardarse en
algún tipo de cola mientras esperan su turno para ejecutar.
Modelo
de cinco estados
El modelo
anterior de dos estados funcionaría bien con una cola FIFO y planificación por
turno rotatorio para los procesos que no están en ejecución, si los procesos
estuvieran siempre listos para ejecutar. En la realidad, los procesos utilizan datos para
operar con ellos, y puede suceder que no se encuentren listos, o que se deba
esperar algún suceso antes de continuar, como una operación de Entrada/Salida. Es por esto que se
necesita un estado donde los procesos permanezcan bloqueados esperando hasta
que puedan proseguir. Se divide entonces al estado No
ejecución en dos estados: Listo y Bloqueado. Se agregan además un
estado Nuevo y otro Terminado.
Los cinco
estados de este diagrama son los
siguientes:
·EJEMPLOS.
Ejecución: Cuando le damos abrir un programa
Listo: El momento justo antes de que abra el programa. Cuando se pausa, por un breve instante.
Espera o Bloqueado: Cuando no abre el programa normalmente, y pareciese que surgiera un problema de repente. Es el instante, mientras se soluciona un problema... Si lo hay.
Nuevo: Cuando el programa, esta recién instalado. Y el sistema no lo ha asimilado... Necesita reiniciarse el equipo, para que carguen en la memoria principal.
Terminado: Cuando ya se da por terminada la accion. Sin importar si esta se ejecuto, o tuvo un fallo.
Los nuevos
estados Nuevo y Terminado son útiles para la gestión de
procesos. En este modelo los estados Bloqueado y Listo tienen ambos una cola de espera.
Cuando un nuevo proceso es admitido por el sistema operativo, se sitúa en la
cola de listos. A falta de un esquema de prioridades ésta
puede ser una cola FIFO. Los procesos suspendidos son mantenidos en una cola de
bloqueados. Cuando se da un suceso se pasan a la cola de listos los procesos
que esperaban por ese suceso.
Si existe un
esquema con diferentes niveles de prioridad de procesos es conveniente mantener
varias colas de procesos listos, una para cada nivel de prioridad, lo que ayuda
a determinar cuál es el proceso que más conviene ejecutar a continuación.
Procesos
suspendidos
Una de las
razones para implementar el estado Bloqueado era poder hacer que
los procesos se puedan mantener esperando algún suceso, por ejemplo una
Entrada/Salida. Sin embargo, al ser mucho más lentas estas operaciones, puede suceder en nuestro modelo de cinco estados
todos los procesos en memoria estén esperando en el estado Bloqueado y que no haya más memoria disponible
para nuevos procesos. Podría conseguirse más memoria, aunque es probable que
esto sólo permita procesos más grandes y no necesariamente nuevos procesos.
Además hay un costo asociado a
la memoria y de cualquier forma es probable que se llegaría al mismo estado con
el tiempo.
Otra solución
es el intercambio. El intercambio se lleva a cabo moviendo una parte de
un proceso o un proceso completo desde la memoria principal al disco, quedando en el estado Suspendido.
Después del intercambio, se puede aceptar un nuevo proceso o traer a memoria un
proceso suspendido anteriormente.
El problema que se presenta ahora es que puede ser
que si se decide traer a memoria un proceso que está en el estado Suspendido,
el mismo todavía se encuentre bloqueado. Sólo convendría traerlo cuando ya está
listo para ejecutar, esto implica que ya aconteció el suceso que estaba
esperando cuando se bloqueó. Para tener esta diferenciación entre procesos
suspendidos, ya sean listos como bloqueados, se utilizan cuatro estados: Listo, Bloqueado, Bloqueado
y suspendido y Listo
y suspendido.
Procesos
en espera
Dos o más
procesos pueden cooperar mediante señales de forma
que uno obliga a detenerse a los otros hasta
que reciban una señal para continuar.
·
Se usa una variable llamada semáforo para
intercambiar señales.
·
Si un proceso esta esperando una señal, se
suspende (WAIT) hasta que la señal se envíe (SIGNAL).
·
Se mantiene una cola de procesos en ESPERA en
el semáforo.
·
La forma de elegir los procesos de la cola en
ESPERA es mediante una política FIFO.
La
sincronización explícita entre procesos es un caso particular del estado
"bloqueado". En este caso, el suceso que permite desbloquear un
proceso no es una operación de entrada/salida, sino una señal generada a
propósito por el programador desde otro proceso.