Durante
su existencia un proceso pasa por
una serie de estados discretos, siendo varias las circunstancias que pueden hacer que el mismo
cambie de
estado.
Según el sistema
operativo, los modelos de estado pueden variar, sin embargo este es el más
utilizado:
- Nuevo: El proceso
recién fue creado y todavía no fue admitido por el sistema operativo. En
general los procesos que se encuentran en este estado todavía no fueron
cargados en la memoria principal.
- Listo: el proceso está listo para ser asignado a un procesador y ser ejecutado, sólo está esperando que el despachador así lo disponga.
Para aclarar el término, el despachador o dispatcher es una entidad del sistema operativo cuya función es la de asignar un proceso al CPU.
- Ejecución: el proceso está actualmente en ejecución.
- Bloqueado: el proceso no puede ejecutar hasta que no se produzca cierto suceso, como una operación de Entrada/Salida.
- Terminado: el proceso fue expulsado del grupo de procesos ejecutables, ya sea porque terminó o por algún fallo, como un error de protección, aritméticos, etc.
Bloqueo de procesos: cuando un proceso está pendiente de un evento externo que le ha hecho
bloquear, tales como una operación de lectura/escritura, la espera de
finalización de un proceso hijo, una señal o una operación sobre un semáforo.
El dispositivo o hecho externo "avisa" al S.O. cuando ha terminado la
acción que realizaba mediante una INTERRUPCIÓN, puede ocurrir que el S.O. deje lo
que está haciendo para atender a esta última. Tras esto, el S.O. comprueba
cuales son los procesos que fueron bloqueados por ese evento externo,
cambiándolos al estado de preparado.
Un
semáforo es una estructura diseñada para sincronizar dos o más hilos o
procesos, de modo que su ejecución se realice de forma ordenada y sin
conflictos entre ellos. Sin embargo, cuando un proceso requiere los recursos
que otro tiene y viceversa, se produce lo que se conoce como interbloqueo.
Interbloqueo:
El
interbloqueo se puede definir como el bloqueo permanente de un conjunto de
procesos que compiten por los recursos del sistema o bien se comunican unos con
otros.
Un
proceso requiere recursos y si los recursos no están disponibles, el proceso entra
en estado de espera. Puede suceder que el proceso que espera nunca cambie su
estado debido a que los recursos que requiere, están asignados a otros
procesos, que a su vez están en estado de espera. Ejemplo:
- Dos
procesos desean imprimir grandes archivos en cinta.
- El
proceso “a” solicita la impresora, que se le concede.
- El
proceso “b” solicita la unidad de cinta, que se le concede.
- El
proceso “a” solicita la unidad de cinta, pero se deniega la
solicitud hasta que “b” la libera.
- El
proceso “b” solicita la impresora y se produce el bloqueo.
Adicional
a estos estados, existen 2 que valen la pena mencionar por su importancia o
particularidad:
Proceso Suspendido: El estado
suspendido permite tener en espera un proceso hasta que se realice el proceso
para continuar. El procesador es más rápido que la
Entrada/Salida y dado que para que un proceso se ejecute
debe ser cargado en memoria completamente todos los procesos tendrían que esperar haciendo más lentas las operaciones. Para
conseguir más memoria una 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 evitando que el proceso entre al reparto de
CPU y manteniéndolo en una cola de bloqueados.
Zombie:
Todo
proceso al finalizar avisa a su proceso padre, para que éste elimine su entrada
de la tabla de procesos. En el caso de que el padre, por algún motivo, no
reciba esta comunicación no lo elimina de la tabla de procesos. En este caso,
el proceso hijo queda en estado zombie, no está consumiendo CPU, pero sí
continua consumiendo recursos del sistema.
Para entender
más sobre los procesos padre e hijo, es necesario hablar un poco de hilos.
Un hilo es básicamente una tarea que puede ser
ejecutada en paralelo con otra tarea. Permiten dividir un programa en dos o más
tareas que corren simultáneamente. Los distintos hilos de ejecución comparten
una serie de recursos tales como el espacio de memoria, los archivos abiertos,
situación de autenticación, entre otros
Los beneficios clave de los hilos se derivan de las implicaciones
del rendimiento: se tarda menos tiempo en crear un nuevo hilo de un proceso que
ya existe, en terminarlo, y en hacer un cambio de contexto entre hilos de un
mismo proceso. Al someter a un mismo proceso a varios flujos de ejecución se
mantiene una única copia en memoria del código, y no varias.
No hay comentarios:
Publicar un comentario