sábado, 30 de junio de 2012

ESTADOS DE PROCESOS


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