Sincronización y comunicación de procesos|
1
3. SINCRONIZACIÓN Y COMUNICACIÓN DE PROCESOS
Hay dos métodos básicos de comunicación entre procesos: compartición de datos eintercambio de información.
3.1 Exclusión mutua
El método más sencillo de comunicación entre los procesos de un programa concurrente es eluso común de unas variables de datos.Con éste método se puede dar la situación de que se produzca intromisión de un proceso en elotro, de forma que el planificador de procesos permita el entrelazado de las operacioneselementales anteriores de cada uno de los procesos, lo que inevitablemente originará errores.Este tipo de errores son muy difíciles de detectar mediante test del programa, ya que el que seproduzcan depende de la temporización de dos procesos independientes.Para evitar este tipo de errores se pueden identificar aquellas regiones de los procesos queacceden a variables compartidas y dotarlas de la posibilidad de ejecución como si fueran unaúnica instrucción.
Sección crítica:
Aquellas partes de los procesos concurrentes que no pueden ejecutarse deforma concurrente o, que desde otro proceso se deben ver como si fueran una únicainstrucción.Las secciones críticas se pueden agrupar en clases, siendo
mutuamente exclusivas
lassecciones críticas de cada una. Para conseguir dicha exclusión se deben implementarprotocolos software que impidan o
bloqueen
el acceso a una sección crítica mientras estásiendo utilizada por un proceso.La sección crítica es la parte que debe protegerse de interferencias de otros procesos. Los
protocolos
son la parte de código dedicada a asegurar que la sección crítica se ejecuta deforma exclusiva.
3.1.1 Bloqueo mediante el uso de variables compartidas
Se utiliza una variable compartida de tipo booleano que se suele denominar indicador (
flag
).Antes de acceder al recurso, un proceso debe examinar el indicador asociado que podrá tomardos valores (
true
o
false
) que indicarán, de forma respectiva, que el recurso está siendoutilizado o que está disponible.La ejecución concurrente de los procesos la indicaremos mediante la estructura
cobegin/coend
.
Cobegin
indica el comienzo de la ejecución concurrente de los procesos quese señalan hasta la sentencia
coend
.El programa no resuelve el problema de la exclusión mutua ya que al ser la comprobación y lapuesta del indicador a falso operaciones separadas, puede ocurrir que se entrelace el uso delrecurso por ambos procesos.Si el sistema dispusiera de una instrucción que permitiera comprobar el estado y modificarlosimultáneamente, el programa permitiría el uso del recurso sin entrelazamiento. En ausenciade una instrucción de este tipo, intentamos usar dos indicadores para resolver el problema dela exclusión mutua; asociamos un indicador a cada uno de los procesos. Ambos procesospueden leer los dos indicadores, pero sólo pueden modificar el que tienen asociado. Lasolución tiene el inconveniente de que durante la espera de la liberación del recurso, el procesopermanece ocupado, lo que se denomina
espera activa
. Pero hay un problema mayor, queambos procesos realicen la llamada al bloqueo de forma simultánea. Cada proceso puedeponer su propio indicador y comprobar el estado del otro. Ambos verán los indicadorescontrarios como ocupados y permanecerán a la espera de que el recurso quede liberado, peroesto no podrá suceder al no poder entrar ninguno en su sección crítica. Esta acción se conocecomo
interbloqueo
(deadlock).