Académique Documents
Professionnel Documents
Culture Documents
MODELOS DE CONSISTENCIA
MODELOS DE CONSISTENCIA
W(x)1
.
R(x)1
P1:
P2:
(a)
W(x)1
.
R(x)0
R(x)1
(b)
MODELOS DE CONSISTENCIA
no importe el orden exacto de ejecucin de las proporciones (de hecho, de las referencias
a memoria). Cuando sea esencial el orden de los eventos, deben utilizarse semforos u
otras operaciones de sincronizacin. De hecho, aceptar este argumento significa aprender
a vivir con modelos de memoria ms dbiles. Con algo de prctica, muchos programadores
en paralelo podran adaptarse.
La consistencia secuencial es un modelo de memoria un poco ms dbil que la
consistencia estricta. Fue definida por primera vez por Lamport (1979), quien dijo que una
memoria con consistencia secuencial es la que satisface la siguiente condicin:
El resultado de cualquier ejecucin es el mismo que si las operaciones de todos los
procesos fueran ejecutadas en algn orden secuencial, y las operaciones de cada proceso
individual aparecen en esta secuencia en el orden especificado por su programa.
Lo que significa esta definicin es que cuando los procesos se ejecutan en paralelo en
diferentes maquinas (o aun en seudoparalelo en un sistema de tiempo compartido),
cualquier intercalado valido es un comportamiento aceptable, pero todos los procesos
deben ver la misma serie de llamadas a memoria. Una memoria donde un proceso (o
procesos) ven un intercalado y otros procesos ve otro distinto no es una memoria con
consistencia secuencial. Observe que no es habla del tiempo; es decir, no hay referencia
alguna al almacenamiento ms reciente. Observe que en este contexto, un proceso ve
las estructuras de todos los procesos perro solo sus propias lecturas.
En la figura 6-13 se puede ver el hecho de que el tiempo no juega ningn papel. El
comportamiento de una memoria que se muestra en la figura 6-13(a) cumple la
consistencia secuencial, aunque la primera lectura realizada por P2 regrese el valor inicial
0 en vez del valor nuevo 1.
P1:
P2:
W(x)1
.
R(x)0
(a)
R(x)1
P1:
P2:
W(x)1
.
R(x)1
R(x)1
(b)
La memoria con consistencia secuencial no garantiza que una lectura regrese el valor
escrito por otro proceso un nanosegundo antes, un microsegundo antes, o incluso un
minuto antes. Solo garantiza que todos los procesos vean todas las referencias a memoria
en el mismo orden. Si el programa que genera la figura 6-13(a) se ejecuta de nuevo, podra
dar el resultado de la figura 6-13(b). Los resultados no son deterministas. Una nueva
MODELOS DE CONSISTENCIA
b=1;
print (a, c);
(b)
c=1;
print(a, b)
(c)
Para aclarar este punto, consideremos el ejemplo de la figura 6-14(Dubois et al., 1988).
Aqu vemos el cdigo de tres procesos que se ejecutan en paralelo en tres procesadores
distintos y que utilizan la misma memoria compartida distribuida con consistencia
secuencial; todos tienen acceso a las variables a, b y c. Desde el punto de vista de
referencia a la memoria, una asignacin de debe ver como una escritura, y un enunciado
de impresin como una lectura simultanea de sus dos parmetros. Se supone que todos
los enunciados son atmicos.
Son posibles varias secuencias intercaladas de ejecucin. Con seis enunciados
independientes, en principio existen 720 (6!) secuencias de ejecucin posibles, aunque
algunas de estas violen el orden del programa. Consideremos las 120 (5!) secuencias que
comiencen con a=1. La mitad de estas tienen print(a, c) antes de b=1 y por lo tanto violan
el orden de programacin. La mitad tambin tiene print(a, b) antes que c=1 y tambin
violan el orden del programa. Solo de las 120 secuencias (30) son vlidas. Tambin son
posibles otras 30 secuencias validas que comienzan con b = 1 y otras 30 que comienzan
con c = 1, para un total de 90 secuencias de ejecucin vlidas.
Cuatro de estas se muestran en la figura 6-15.
a=1;
Print(b, c);
b=1;
print (a, c);
c=1;
print (a, c);
a=1;
b=1;
print (a, c);
print (b, c);
c=1;
print(a, b);
b=1;
c=1;
print (a, b);
print (a, c);
a=1;
print(b, c);
b=1;
a=1;
c=1;
print (a, c);
print(b, c);
print(a, b);
imprime:001011
imprime:101011
imprime:010111
imprime:111111
Firma: 00101
(a)
Firma: 101011
(b)
Firma 110101
(c)
Firma: 111111
(d)
Figura 6-15. Cuatro secuencias de ejecucion v{alidas para el programa de la figura 6-14. El
eje vertical x es el tiempo, que aumenta hacia abajo.
En la figura 6-15(a), los tres procesos se ejecutan en orden, primero P 1, despus P2, y
despus P3. Los otros tres ejemplos muestran otros intercalados de los enunciados en el
tiempo, (diferentes, pero validos). Cada uno de los tres procesos imprime dos variables.
MODELOS DE CONSISTENCIA
Como los nicos valores que puede asumir cada variable son el valor inicial (0) o el valor
asignado (1), cada proceso produce una cadena de 2 bits. Los nmeros despus de
Imprime
son las salidas reales que aparecen en el dispositivo de salida.
Si concatenamos la salida de P1, P2, y P3 en ese orden, obtenemos una cadena de 6 bits
que caracterizan un intercalado particular de los enunciados (y por lo tanto de las
referencias a memoria). Esta es la cadena que aparecen como Firma en la figura 6-15.
Ms adelante caracterizaremos cada orden por su seal en vez de por su salida.
No todos los 64 patrones de firmas estn permitidos. Como ejemplo trivial, 000000 no est
permitido, pues implicara que los enunciados de impresin se ejecutaron antes que los de
asignacin, violando el requisito de Lamport en el sentido de que los enunciados se
ejecutan segn el orden del programa. Un ejemplo ms sutil es 001001. Los primeros dos
bits, 00, significan que b, y c, son ambos 0 cuando P 1 realizo su impresin. Esta situacin
solo puede ocurrir cuando P 1 ejecutan ambos enunciados antes que comiencen P 2 o P3.
Los siguientes dos bits, 10 indican que P 2 debe ejecutarse despus de que P 1 ha
comenzado pero antes de que P3 comience. Los ltimos dos bits, 01, indican que P 3 debe
terminar antes de que comience P 1; pero ya hemos visto que P 1 debe ir primero. Por lo
tanto, 001001 no est permitido.
En resumen, los 90 ordenes diferentes vlidos para los enunciados producen varios
resultados diferentes del programa (aunque menos de 64) que se permiten bajo la
hiptesis de consistencia secuencial. En este caso, el contrato entre el software y la
memoria consiste en que el software acepta todos ellos como vlidos. En otras palabras, el
software acepta los cuatro resultados que se muestran en la figura 6-15 y los dems
resultados validos como respuestas adecuadas, y trabajar de forma correcta si cualquiera
de ellas ocurre. Un programa que funciona para algunos de estos resultados y no para otra
viola del contrato con la memoria y es incorrecto.
Una memoria con consistencia secuencial se puede implementar en un sistema DSM o
multiprocesador que duplique las paginas, que se pueden escribir, organizando que
ninguna operacin de memoria comience hasta que las anteriores hayan concluido. Por
ejemplo, en un sistema con un mecanismo de transmisin eficiente, confiable y por
completo ordenado, todas las variables compartidas se podrn agrupar en uno o ms
pginas y se podrn transmitir las operaciones a las paginas compartidas. No importa el
orden exacto en que se intercalen todas las operaciones mientras todos los procesos estn
de acuerdo en el orden de todas las operaciones en la memoria compartida.
Se han propuesto varios sistemas formales para expresar la consistencia secuencial (y
otros modelos). Consideremos de forma breve el sistema Ahamad et al. (1993). En su
mtodo, la serie de operaciones de lectura y escritura del proceso i se denotan por Hi (la
historia Pi). La figura 6-12(b) muestra dos de estas series H 1 y H2 para P1 y P2,
respectivamente como sigue:
H1 = W(x)1
H2 = R(x)0 R(x)1
MODELOS DE CONSISTENCIA
MODELOS DE CONSISTENCIA
P1:
W(x)1
W(x)3
MODELOS DE CONSISTENCIA
P2:
R(x)1
W(x)2
P3:
R(x)1
R(x)3
R(x)2
P4:
R(x)1
R(x)2
R(x)3
Figura 6-16. Esta sucesin est permitida para una memoria con consistencia
causal, pero no para una memoria con consistencia secuencial o una memoria con
consistencia estricta.