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 sincronizacion 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.
Es la coordinación y cooperación de un conjunto
de procesos para asegurar la comparación de recursos de computo. La sincronizacion
entre procesos es necesaria para prevenir y/o corregir errores de
sincronizacion debidos 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
especificas de precedencia impuestas por el problema que se resuelve.
Sin una sincronizacion 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 aproximacion 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 seccion critica de codigo 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 sincronizacion que ofrecen los sistemas operativos son:
- Señales
- Tuberías
- Semáforos
- Mutex y variables condicionales
- Paso de mensajes
No hay comentarios.:
Publicar un comentario