Sistemas Operativos U2
Enviado por Liizziiernaga • 11 de Mayo de 2013 • 10.212 Palabras (41 Páginas) • 323 Visitas
2.4 Concurrencia y Secuenciabilidad
Los procesos son concurrentes si existen simultaneamente. Los procesos concurrentes pueden funcionar en forma totalmente independiente unos de otros, o pueden ser asincronos, lo cual significa que en ocasiones requieren cierta sincronizacion o cooperacion.
Cuando dos o mas procesos llegan al mismo tiempo a ejecutarse, se dice que se ha presentado una concurrencia de procesos. Es importante mencionar que para que dos o mas procesos sean concurrentes , es necesario que tengan alguna relacion entre ellos como puede ser la cooperacion para un determinado trabajo o el uso de informacion o recursos compartidos, por ejemplo: en un sistema de un procesador , la multiprogramacion es una condicion necesaria pero no suficiente para que exista concurrencia, ya que los procesos pueden ejecutarse de forma totalmente independiente.
Por otro lado en un sistema de varios procesos se puede presentar la concurrencia siempre y cuando las actividades necesiten actuar entre si ya sea para utilizar informacion en comun o para cualquier otra cosa.
Existen tres formas modelos de computadora en los que se puede pueden ejecutar procesos concurrentes:
Multiprogramacion con un unico procesador.
En este modelo todos los procesos concurrentes ejecutan sobre un unico procesador. El sistema operativo se encarga de ir repartiendo el tiempo del procesador entre los distintos procesos, intercalando la ejecucion de los mismos para dar asi una apariencia de ejecucion simultanea.
Multiprocesador.
Un multiprocesador es una maquina formada por un conjunto de procesadores que comparten memoria principal. En este tipo de arquitecturas, los procesos concurrentes no solo pueden intercalar su ejecucion sino tambien superponerla. En este caso si existe una verdadera ejecucion simultanea de procesos, al coincidir las fases de procesamiento de distintos procesos. En un instante dado se pueden ejecutar de forma simultanea tantos procesos como procesadores haya.
Multicomputadora.
Una multicomputadora es una maquina de memoria distribuida, en contraposicion con el multiprocesador que es de memoria compartida. Esta formada por una serie de computadoras completas con su UCP, memoria principal y, en su caso, periferia. Cada uno de estos procesadores completo se denomina nodo. Los nodos se encuentran conectados y se comunican entre si a traves de una red de interconexion, empleando el metodo de paso de mensajes. En este tipo de arquitecturas tambien es posible la ejecucion simultanea de los procesos sobre los distintos procesadores.
En general la concurrencia sera aparente siempre que el numero de procesos sea mayor que el de procesadores disponibles, es decir, cuando haya mas de un proceso por procesador. La concurrencia sera real cuando haya un proceso por 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. Ambosprocesos 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
...