2.4 Concurrencia y
Secuenciabilidad
Los procesos son
concurrentes si existen simultáneamente. Los procesos concurrentes pueden
funcionar en forma totalmente independiente unos de otros, o pueden ser
asíncronos, lo cual significa que en ocasiones requieren cierta sincronización
o cooperación.
Cuando dos o más
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 más
procesos sean concurrentes, es necesario que tengan alguna relación entre ellos
como puede ser la cooperación para un determinado trabajo o el uso de
información o recursos compartidos.
Multiprogramación con un
único procesador.
En este modelo
todos los procesos concurrentes ejecutan sobre un único procesador. El sistema
operativo se encarga de ir repartiendo el tiempo del procesador entre los
distintos procesos, intercalando la ejecución de los mismos para dar así una
apariencia de ejecución simultánea.
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 ejecución sino también superponerla. En este caso si existe una verdadera ejecución 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.
Multícomputadora.
Una
Multícomputadora es una máquina de memoria distribuida, en contraposición con
el multiprocesador que es de memoria compartida. Está 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 sí a través de una red de
interconexión, empleando el método de paso de mensajes. En este tipo de
arquitecturas también es posible la ejecución simultánea de los procesos sobre
los distintos procesadores.
Exclusión Mutua de
Sección Crítica.
El método más
sencillo de comunicación entre los procesos de un programa
concurrente es el uso común de unas variables de datos. Esta forma tan sencilla
de comunicación puede llevar, no obstante, a errores en el programa ya que el
acceso concurrente puede hacer que la acción 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. Esta situación
se plantea, por ejemplo, en un problema típico de la programación concurrente
conocido como el Problema de los Jardines. En este problema se supone que se
desea controlar el número de visitantes a unos jardines.
La entrada y la salida a los
jardines se pueden realizar por dos puntos que disponen de puertas giratorias.
Se desea poder conocer en cualquier momento el número de visitantes a los
jardines, por lo que se dispone de un computador con conexión 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 única variable x para llevar la cuenta del número de visitantes.
El incremento o decremento de la variable se produce
cada vez que un visitante entra o sale por una de las puertas. Así, la entrada
de un visitante por una de las puertas hace que se ejecute la instrucción:
x=x+1
mientras que la salida de un visitante hace que se
ejecute la instrucción
x=x-1
Sincronización de procesos.
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.
Es la coordinación
y cooperación de un conjunto de procesos para asegurar la comparación de
recursos de cómputo. La sincronización entre procesos es necesaria para
prevenir y/o corregir errores de sincronización debidos al acceso concurrente a
recursos compartidos, tales como estructuras de datos o dispositivos de E/S, de
procesos contendientes. La sincronización 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.
Interbloqueo (DeadLock).
El estancamiento se
puede definir formalmente como sigue: "Un conjunto de procesos se
estancan si cada proceso del conjunto está esperando un evento que solo otro
proceso del conjunto puede provocar". Puesto que todos los procesos están
en espera, ninguno de ellos podrá ocasionar nunca ninguno de los eventos que
podrían desbloquear a algunos de los otros miembros del conjunto y todos los
procesos seguirán esperando indefinidamente.
No hay comentarios:
Publicar un comentario