Coordinación y Sincronización de Procesos
Coordinación de Procesos
Es el hecho de ponerse de acuerdo entre varios procesos para llevar a cabo alguna acción. Esta acción puede ser el conseguir el derecho a entrar en una región crítica en exclusión mutua, o la elección de un proceso, entre un grupo de procesos, que actúe como coordinador de las actividades del resto de los procesos del grupo.
En muchos casos, los procesos se reúnen para realizar tareas en conjunto, a este tipo de relación se le llama procesos cooperativos. Para lograr la comunicación, los procesos deben sincronizarse, de no ser así pueden ocurrir problemas no deseados. La sincronización es la transmisión y recepción de señales que tiene por objeto llevar a cabo el trabajo de un grupo de procesos cooperativos.
Sincronización de Procesos
Es la coordinación y cooperación de un conjunto de procesos para asegurar la comparación de recursos de computo. La sincronización entre procesos es necesaria para prevenir y/o corregir errores debido al acceso concurrente a recursos compartidos, tales como estructuras de datos o dispositivos de E/S, de procesos contendientes. La sincronizacion entre procesos también permite intercambiar señales de tiempo (ARRANQUE/PARADA) entre procesos cooperantes para garantizar las relaciones específicas de precedencia impuestas por el problema que se resuelve.
Sin una sincronización adecuada entre procesos, la actualización de variables compartidas puede inducir a errores de tiempo relacionados con la concurrencia que son con frecuencia difíciles de depurar. Una de las causas principales de este problema es que procesos concurrentes puedan observar valores temporalmente inconsistentes de una variable compartida mientras se actualizan. una aproximación para resolver este problema es realizar actualizaciones de variables compartidas de manera mutuamente exclusiva. Se pueden mejorar permitiendo que a lo mas un proceso entre a la vez en la sección critica de código en la que se actualiza una variable compartida o estructura de datos en particular.
Para que los procesos puedan sincronizarse es necesario disponer de servicios que permitan bloquear o suspender bajo determinadas circunstancias la ejecución de un proceso. Los principales mecanismos de sincronización que ofrecen los sistemas operativos son:
- Señales.
- Tuberías.
- Semáforos.
- Mutex y variables condicionales.
- Paso de mensajes
Señales
Una señal (Signal) es una forma limitada de comunicación entre procesos empleada en Unix y otros sistemas operativos compatibles con POSIX. en esencia es una notificación asíncronica enviada a un proceso para informarle de un evento. Cuando se le manda una señal a un proceso, el sistema operativo modifica su ejecución normal.
Tuberías
En informática una tubería (Pipe, Cauce o 'I') consiste en una cadena de procesos conectados de forma tal que la salida de cada elemento de la cadena es la entrada del próximo. Permiten la comunicación y sincronización entre procesos.
Semáforos
Un semáforo es una estructura diseñada para sincronizar dos o mas threads o procesos, de modo que su ejecución se realice de forma ordenada y sin conflicto.
Tipos de semáforos
Dependiendo de la función que cumple el semáforo, vamos a diferenciar los siguientes tipos:
- Semáforo de exclusión mutua, inicialmente su contador vale 1 y permite que haya un único proceso simultáneamente dentro de la sección crítica.
- Semáforo contador, permiten llevar la cuenta del número de unidades de recurso compartido disponible, que va desde 0 hasta N.
- Semáforo de espera, generalmente se emplea para forzar que un proceso pase a estado bloqueado hasta que se cumpla la condición que le permite ejecutarse. Por lo general, el contador vale 0 inicialmente, no obstante, podría tener un valor distinto de cero.
Mutex
Los algoritmos de exclusión mutua (comúnmente abreviada como mutex por mutual exclusión) se usan en programación concurrente para evitar el ingreso a sus secciones criticas por mas de un proceso a la vez. La sección critica es el fragmento de código donde puede modificarse un recurso compartido.
Paso de Mensajes
MPI ("Message Passing Interface", Interfaz de Paso de Mensajes) es un estándar que define la sintaxis y la semantica de las funciones contenidas en una biblioteca de paso de mensajes diseñada para ser usada en programas que exploten la existencia de múltiples procesadores.
Los elementos principales que intervienen en el paso de mensajes son el proceso que envía, el que recibe y el mensaje.
Concurrencia
La concurrencia de procesos se refiere a las situaciones en las que dos o más procesos puedan coincidir en el acceso a un recurso compartido o, dicho de otra forma, que requieran coordinarse en su ejecución. Para evitar dicha coincidencia, el sistema operativo ofrece mecanismos de arbitraje que permiten coordinar la ejecución de los procesos.
En computación, la concurrencia es la propiedad de los sistemas que permiten que múltiples procesos sean ejecutados al mismo tiempo, y que potencialmente puedan interactuar entre sí.
Los procesos concurrentes pueden ser ejecutados realmente de forma simultánea, sólo cuando cada uno es ejecutado en diferentes procesadores. En cambio, la concurrencia es simulada si sólo existe un procesador encargado de ejecutar los procesos concurrentes, simulando la concurrencia, ocupándose de forma alternada en uno y otro proceso a pequeñísimos intervalos de tiempo. De esta manera simula que se están ejecutando a la vez.
Tipos de Concurrencia
La ejecución concurrente de un proceso genera dos tipos de corrección: la seguridad y la vida. La seguridad se encarga de obtener la respuesta “correcta”. La vida tiene que ver con la tasa de avance de un proceso, es decir, con la velocidad a la cual avanza el cálculo.
La competencia por los recursos impone restricciones en el entrelazamiento de seguimientos.
Existen dos visiones del paralelismo:
- Paralelismo Hardware: Es el paralelismo definido por la arquitectura de la maquina.
- Paralelismo Software: Es el paralelismo definido por la estructura del programa. Se manifiesta en las instrucciones que no tienen interdependencias.
El paralelismo se presenta, a su vez, en dos formas:
Paralelismo de control: Se pueden realizar dos o más operaciones simultáneamente. Se presenta en los pipelines y las múltiples unidades funcionales. El programa no necesita preocuparse de este paralelismo, pues se realiza a nivel hardware.
Paralelismo de datos: una misma operación se puede realizar sobre varios elementos simultáneamente.
Características de la concurrencia
Los procesos concurrentes tienen las siguientes características:
Indeterminismo: Las acciones que se especifican en un programa secuencial tienen un orden total, pero en un programa concurrente el orden es parcial, ya que existe una incertidumbre sobre el orden exacto de ocurrencia de ciertos sucesos, esto es, existe un indeterminismo en la ejecución. De esta forma si se ejecuta un programa concurrente varias veces pude producir resultados diferentes partiendo de los mismos datos.
Interacción entre procesos: Los programas concurrentes implican interacción entre los distintos procesos que los componen:
- Los procesos que comparten recursos y compiten por el acceso a los mismos.
- Los procesos que se comunican entre sí para intercambiar datos.
Gestión de recursos: Los recursos compartidos necesitan una gestión especial. Un proceso que desee utilizar un recurso compartido debe solicitar dicho recurso, esperar a adquirirlo, utilizarlo y después liberarlo. Si el proceso solicita el recurso pero no puede adquirirlo en ese momento, es suspendido hasta que el recurso esté disponible. La gestión de recursos compartidos es problemática y se debe realizar de tal forma que se eviten situaciones de retraso indefinido (espera indefinidamente por un recurso) y de deadlock (bloqueo indefinido o abrazo mortal).
Comunicación: La comunicación entre procesos puede ser síncrona, cuando los procesos necesitan sincronizarse para intercambiar los datos, o asíncrona, cuando un proceso que suministra los datos no necesita esperar a que el proceso receptor los recoja, ya que los deja en un buffer de comunicación temporal.
Secciones criticas
La exclusión mutua necesita ser aplicada solo cuando un proceso acceda a datos compartidos; cuando los procesos ejecutan operaciones que no estén en conflicto entre sí, debe permitírseles proceder de forma concurrente. Cuando un proceso esta accediendo datos se dice que el proceso se encuentra en su sección critica (o región critica).
Mientras un proceso se encuentre en su sección crítica, los demás procesos pueden continuar su ejecución fuera de sus secciones críticas. Cuando un proceso abandona su sección critica, entonces debe permitírsele proceder a otros procesos que esperan entrar en su propia sección crítica (si hubiera un proceso en espera). La aplicación de la exclusión mutual es uno de los problemas clave de la programación concurrente. Se han diseñado muchas soluciones para esto: algunas de software y algunas de hardware, más de bajo nivel y otras de alto nivel; algunas que requieren de cooperación voluntaria, y algunas que demandan una adherencia rígida a protocolos estrictos.
Estar dentro de una sección crítica es un estado muy especial asignado a un estado. El proceso tiene acceso exclusivo a los datos compartidos, y todos los demás procesos que necesitan acezar a esos datos permanecen en espera. Por tanto, las secciones críticas deben ser ejecutadas lo más rápido posible, un programa no debe bloquearse dentro de su sección crítica, y las secciones críticas deben ser codificadas con todo cuidado.
Si un proceso dentro de una sección crítica termina, tanto de forma voluntaria como involuntaria, entonces, al realizar su limpieza de terminación, el sistema operativo debe liberar la exclusión mutua para que otros procesos puedan entrar en sus secciones críticas
No hay comentarios.:
Publicar un comentario