sábado, 30 de octubre de 2010

Sincronizacion de Procesos

    Básicamente cuando hablamos de la sincronización de procesos nos referimos al hecho de que uno o más procesos trabajen de manera conjunta para realizar una cierta tarea solicitada.

   Cuando se requiere que dos o más procesos se sincronicen, es necesario crear un mecanismo de comunicación entre ambos, este mecanismo de comunicación es siempre dinámico, por lo que cuando ocurre este requerimiento de que dos o más procesos se sincronicen, el mecanismo necesario para la comunicación ocurre de la siguiente manera:

- Primero se crea.

- Segundo se usa.

- Tercero se destruye.

   En este punto nos podríamos preguntar, para que destruir el mecanismo de comunicación creado, cuando este colabora a que una tarea sea realizada de forma más rápida. La razón para esto, es que eventualmente mantener esta comunicación entre procesos puede producir efectos no deseados en tareas posteriores, es por esto que la comunicación entre los procesos es puntual.

Los servicios básicos de comunicación son:

    -Crear: el proceso solicita la creación del mecanismo

    -Enviar o escribir: el proceso emisor envía información al proceso receptor

     -Recibir o leer: el proceso receptor recibe información

     -Destruir: el proceso solicita la destrucción del mecanismo de comunicación

La comunicación puede ser síncrona y asíncrona:

    Síncrona: los dos procesos han de ejecutar servicios de forma simultánea. El emisor ha de ejecutar el servicio enviar mientras el receptor ejecuta recibir.

    Asíncrona: el emisor hace el envío y prosigue su ejecución. El SO ofrece un almacenamiento intermedio para guardar la información enviada, hasta que el receptor la solicite.

Sección critica.

  Un proceso entra en sección critica al momento de solicitar acceso a un recurso, y este proceso compita con otro por este recurso, por lo cual el modelo de exclusión para que dos procesos no ocupen el mismo recurso, teniendo que esperar uno de los procesos al otro se le denomina exclusión mutua. La exclusión mutua lo que hace es, cuando un proceso entra a su sección critica, este verifica si es viable el acceso por parte del proceso al recurso, en tal caso, el recurso al no estar disponible, el proceso deberá esperar hasta que este quede libre.

Desactivación de interrupciones

El método más simple para evitar las condiciones de competencia es hacer que cada proceso desactive todas sus interrupciones antes de entrar a su sección crítica y las active una vez que salió de la misma. Este modelo como se puede observar, éste modelo tiene una gran problema y es que si se produce una falla mientras que el proceso está en la región crítica no se puede salir de la misma y el sistema operativo no recuperaría el control.

 En un término mas practico la sección crítica puede ser utilizada para asegurarse de que un  recurso compartido, por ejemplo, una impresora, puede ser accedida por un solo proceso a la vez.

Concurrencia y Paralelismo entre procesos.

   La concurrencia entre procesos ocurre cuando varios procesos existen a la vez.

  El paralelismo entre procesos ocurre cuando varios procesos se ejecutan a la vez.

Espera activa y no Activa.

  La espera activa a grandes rasgos es una técnica que hace que un proceso verifique una condición de forma repetida, pero se utiliza en casos excepcionales como en la sincronización de procesos de sistemas con multiprocesadores, pero mayoritariamente debe ser evitado ya que consume tiempo de la CPU sin realizar ninguna acción.

Algoritmos de Petterson y Dekker.

  El algoritmo de Dekker es un algoritmo de programación concurrente para exclusión mutua, que permite a dos procesos o hilos de ejecución compartir un recurso sin conflictos. Fue uno de los primeros algoritmos de exclusión mutua inventados, implementado por Edsger Dijkstra.

El algoritmo de Peterson, también conocido como solución de Peterson, es un algoritmo de programación concurrente para exclusión mutua, que permite a dos o más procesos o hilos de ejecución compartir un recurso sin conflictos, utilizando sólo memoria compartida para la comunicación.

Deshabilitación de Interrupciones

   La solución más simple es que cada proceso desactive todas las interrupciones justo después de entrar en su sección crítica y las vuelva a activar antes de salir de ella. Con las interrupciones deshabitadas no pueden ocurrir interrupciones al reloj por lo cual no se cambiara a otro proceso. Este método no es muy atractivo ya que no es muy prudente dar a los procesos del usuario el poder de desactivar las interrupciones.. Si un usuario lo hiciera y nunca las volviera a activar sería el fin del sistema. Además si fuera un sistema con mas de una CPU la desactivación de interrupciones solo afectaría una de ellas y las otras podrían accesar la memoria compartida.

No hay comentarios:

Publicar un comentario