Site hosted by Angelfire.com: Build your free website today!
     
 



Administrador de Procesos y del Procesador

2.4.1 Exclusion Mutua de Seccion Critica

 

El metodo mas sencillo de comunicacion entre los procesos de un programa concurrente es el uso comun de unas variables de datos. Esta forma tan sencilla de comunicacion puede llevar, no obstante, a errores en el programa ya que el acceso concurrente puede hacer que la accion de un proceso interfiera en las acciones de otro de una forma no adecuada. Aunque nos vamos a fijar en variables de datos, todo lo que sigue seria valido con cualquier otro recurso del sistema que solo pueda ser utilizado por un proceso a la vez.


Por ejemplo una variable x compartida entre dos procesos A y B que pueden incrementar o decrementar la variable dependiendo de un determinado suceso. Este situacion se plantea, por ejemplo, en un problema tipico de la programacion concurrente conocido como el Problema de los Jardines. En este problema se supone que se desea controlar el numero de visitantes a unos jardines. La entrada y la salida a los jardines se puede realizar por dos puntos que disponen de puertas giratorias. Se desea poder conocer en cualquier momento el numero de visitantes a los jardines, por lo que se dispone de un computador con conexion en cada uno de los dos puntos de entrada que le informan cada vez que se produce una entrada o una salida.


Asociamos el proceso P1 a un punto de entrada y el proceso P2 al otro punto de entrada. Ambos procesos se ejecutan de forma concurrente y utilizan una unica variable x para llevar la cuenta del numero de visitantes.


El incremento o decremento de la variable se produce cada vez que un visitante entra o sale por una de las puertas. Asi, la entrada de un visitante por una de las puertas hace que se ejecute la instruccion


x:=x+1

    mientras que la salida de un visitante hace que se ejecute la instruccion

    x:=x-1

Si ambas instrucciones se realizaran como una unica instruccion hardware, no se plantearia ningun problema y el programa podria funcionar siempre correctamente. Esto es asi por que en un sistema con un unico procesador solo se puede realizar una instruccion cada vez y en un sistema multiprocesador se arbitran mecanismos que impiden que varios procesadores accedan a la vez a una misma posicion de memoria. El resultado seria que el incremento o decremento de la variable se produciria de forma secuencial pero sin interferencia de un proceso en la accion del otro. Sin embargo, si se produce interferencia de un proceso en el otro si la actualizacion de la variable se realiza mediante la ejecucion de otras instrucciones mas sencillas, como son las usuales de:

  • copiar el valor de x en un registro del procesador
  • incrementar el valor del registro
  • almacenar el resultado en la direccion donde se guarda x

Aunque el proceso P1 y el P2 se suponen ejecutados en distintos procesadores (lo que no tiene porque ser cierto en la realidad) ambos usan la misma posicion de memoria para guardar el valor de x. Se puede dar la situacion de que el planificador de procesos permita el entrelazado de las operaciones elementales anteriores de cada uno de los procesos, lo que inevitablemente producira errores. Si, por ejemplo, se produce el siguiente orden de operaciones:

  • P1 carga el valor de x en un registro de su procesador
  • P2 carga el valor de x en un registro de su procesador
  • P2 incrementa el valor de su registro
  • P1 incrementa el valor de su registro
  • P1 almacena el valor de su registro en la direccion de memoria de x
  • P2 almacena el valor de su registro en la direccion de memoria de x se perdera un incremento de la variable x.

Este tipo de errores son muy dificiles de detectar mediante test del programa ya que el que se produzcan depende de la temporizacion de dos procesos independientes.


El ejemplo muestra de forma clara la necesidad de sincronizar la actuacion de ambos procesos de forma que no se produzcan interferencias entre ellos.


Para evitar este tipo de errores se pueden identificar aquellas regiones de los procesos que acceden a variables compartidas y dotarlas de la posibilidad de ejecucion como si fueran una unica instruccion. Se denomina Seccion Critica a aquellas partes de los procesos concurrentes que no pueden ejecutarse de forma concurrente o, tambien, que desde otro proceso se ven como si fueran una unica instruccion. Esto quiere decir que si un proceso entra a ejecutar una seccion critica en la que se accede a unas variables compartidas, entonces otro proceso no puede entrar a ejecutar una region critica en la que acceda a variables compartidas con el anterior.


Las secciones criticas se pueden agrupar en clases, siendo mutuamente exclusivas las secciones criticas de cada clase. Para conseguir dicha exclusion se deben implementar protocolos software que impidan o bloqueen (lock) el acceso a una seccion critica mientras esta siendo utilizada por un proceso.


     Requisistos para la exclusion mutua

  1.     Solo un proceso, de todos los que poseen secciones criticas por el mismo recurso compartido, debe tener permiso para entrar en ella en un momento dado.
  2.     Un proceso que se interrumpe en una seccion no critica debe hacerlo sin interferir con los otros procesos.
  3.     Un proceso no debe poder solicitar acceso a una seccion critica para despues ser demorado indefinidamente, no puede permitirse el interbloqueo o la inanicion.
  4.     Si ningun proceso esta en su seccion critica, cualquier proceso que solicite entrar en la suya debe poder hacerlo sin demora.
  5.     No se debe suponer sobre la velocidad relativa de los procesos o el numero de procesadores.
  6.     Un proceso permanece en su seccion critica por un tiempo finito.
     Una manera de satisfacer los requisitos de exclusion mutua es dejar la responsabilidad a los procesos que deseen ejecutar concurrentemente. Tanto si son programas del sistema como de aplicacion, los procesos deben coordinarse unos con otros para cumplir la exclusion mutua, sin ayuda del lenguaje de programacion o del sistema operativo. Estos metodos se conocen como soluciones por software.
2.4.1 Exclusion mutua de Seccion Critica 2.4.2 Sincronizacion de Procesos 2.4.2.1 Mecanismos de Semaforos 2.4.2.2 Mecanismos de Monitoreo 2.4.3 Interbloqueo Evaluacion ->Regresar al Indice