Vous êtes sur la page 1sur 9

MODELOS DE CONSISTENCIA

6.3 MODELOS DE CONCISTENCIA


Aunque los multiprocesadores modernos tienen mucho en comn con los sistemas
de memoria compartida distribuida, es tiempo de dejar el tema de los multiprocesadores y
continuar. En nuestra breve introduccin a los sistemas DSM (Distributed Shared Memory,
memoria compartida distribuida) al comienzo de ste captulo, dijimos que tienen una o
ms copias de cada una de las pginas exclusivas para lectura y una copia de cada pgina
para escritura. En la implantacin ms sencilla, cuando una mquina remota llama a una
pgina para escritura, ocurre un sealamiento y la pgina es ocupada. Sin embargo, si
algunas de las pginas que se pueden escribir est demasiado compartida, el hecho de
tener solo una copia de cada una puede representar un serio cuello de botella en cuanto al
desempeo.
Si se permite la existencia de varias copias, se facilita el problema del desempeo,
pues basta con actualizar cualquier copia, pero esto introduce un nuevo problema: cmo
mantener consistentes todas las copias. El mantenimiento de una consistencia perfecta es
en especial doloroso cuando las diversas copias se encuentran en mquina diferentes que
slo pueden comunicarse al enviar mensajes por una red lenta (comparada con las
velocidades de la memoria). En algunos sistemas DSM (y multiprocesadores), la solucin
consiste en aceptar una menos perfecta como precio de mejor desempeo. El significado
preciso de la consistencia y su relajacin sin hacer insoportable la programacin es un
tema fundamental entre los investigadores de DSM.
Un modelo de consistencia es en esencia un contrato entre el software y la
memoria (Adve y Hill, 1990). Dice que si el software acuerda obedecer ciertas reglas, la
memoria promete trabajar de forma correcta. Si el software viola estas reglas, todo acaba y
ya no se garantiza que la operacin de memoria sea la correcta. Existe un espectro amplio
de contratos, desde contratos que imponer slo restricciones menores en el software hasta
aquellos que hacen la programacin normal casi imposible. Como probablemente usted ya
ha adivinado, los contratos con restricciones menores no trabajan tan bien como los que
tienen mayor restriccin. As es la vida. En esta seccin estudiaremos varios modelos de
consistencia utilizados en los sistemas DSM. Para mayor informacin, vase el archivo de
Mosberger (1993).

MODELOS DE CONSISTENCIA

6.3.1. Consistencia estricta.


Consistencia estricta
El modelo de consistencia ms estricto es el de consistencia estricta. Se define
mediante la siguiente condicin:
Cualquier lectura a una localidad de memoria x regresa el valor guardado por la
operacin de escritura ms reciente en x.
Esta definicin es natural y obvia, aunque se supone de manera explcita la
existencia de un tiempo global absoluto de modo que la determinacin del ms reciente
no sea ambigua. Los uniprocesadores han observado tradicionalmente una consistencia
estricta y los programadores de los uniprocesos esperan que este comportamiento sea el
normal. Un sistema donde el programa.
a=1; b=2; print(a)
Imprime 1 o cualquiera valor distinto a 2 producir con rapidez muchos programadores
agitados [en este captulo, print es un procedimiento que imprime su(s) parmetros(s)].
En un sistema DSM, el asunto es ms complicado. Supongamos que x es una
variable que esta guardada solo en la maquina B. imagine que un proceso es la maquina A
lee x en el momento T1, lo que significa que se enva un mensaje B para obtener x. Poco
despus en T2, un proceso en B realiza una escritura. Si hay una consistencia estricta, la
lectura siempre debe regresar el valor anterior sin importar la posicin de la mquina y la
cercana de T2- T1. Sin embargo, si T2-T1 es, digamos, 1 nanosegundo, y las maquinas
se encuentran a una distancia de tres metros entre s, para que la solicitud de lectura de A
a B se otorga antes de la escritura, la seal viajara a 10 veces la velocidad de la luz, algo
prohibido por la teora de la relatividad de Einstein.
Esto nos lleva al asunto del contrato entre el software y la memoria. Si el contrato
promete la consistencia estricta de manera implcita o explcita, entonces lo mejor ser que
la memoria cumpla. Por el otro lado, un programador que en realidad espera una
consistencia estricta, de modo que sus programas fallen si no ocurre, vive en peligro. Aun
en un multiprocesador pequeo, si un procesador comienza a escribir en la localidad de
memoria a, y un nanosegundo ms tarde otro procesador comienza a leer a, es probable
que el lector obtenga el valor anterior de su cache local. Cualquiera que escriba programa
que fallen bajo estas circunstancias debe quedarse despus de clase a escribir un
programa que imprima 100 veces: debo evitar las condiciones de competencia.
Es un ejemplo ms realista, uno puede imaginar un sistema que proporcione a los
fanticos de deporte los marcadores de los eventos deportivos en el mundo, actualizados
al minuto. En este caso, se podra aceptar una respuesta como si la solicitud se hubiera
hecho en 2 nanosegundos antes o despus, en especial si esto proporciona mejor
desempeo al guardar varias copias de los datos. En este caso, la consistencia estricta no
se promete, ni se cumple ni se necesita.

MODELOS DE CONSISTENCIA

Para estudiar la consistencia en detalle daremos varios ejemplos. Para precisar


estos ejemplos, necesitamos una notacin especial. En esta notacin, se puede mostrar
varios procesos (P1. 92, etc.) A distintas alturas de la figura. Las operaciones realizadas
por cada proceso se muestran en forma horizontal, de modo que el tiempo aumenta hacia
la derecha. Las lneas retas separan los procesos. Los smbolos
W(x)a y R(y)b
Significa que se han realizado una escritura a x con el valor a y una lectura desde y
regresando b, respectivamente. Supondremos que el valor inicial de todas las variables en
este tipo de diagramas a lo largo de este captulo es 0. Como ejemplo, en la figura 6-12(a),
P1 realiza una escritura a la localidad x, con el valor 1. Despus, P2 lee x y ve el 1. Este
comportamiento es correcto para una memoria con consistencia estricta
P1:
P2:

W(x)1

.
R(x)1

P1:
P2:

(a)

W(x)1

.
R(x)0

R(x)1

(b)

Figura 6-12. El comportamiento de dos procesos. El eje horizontal es el tiempo


(a)Memoria con consistencia estricta. (b) Memoria sin consistencia estricta

En contrast, en la figura 6-12(b), P2 realiza una lectura despus de una escritura


(posiblemente un nanosegundo despus de esta, pero aun as ocurre despus de esta), y
obtiene 0. Una lectura posterior da 1. Este comportamiento es incorrecto para una memoria
con consistencia estricta.
En resumen, cuando la memoria tiene consistencia estricta, todas las escrituras son
visibles al instante a todos los procesos y se mantiene un orden de tiempo global absoluto.
Si se cambia una localidad de memoria, todas las lecturas posteriores desde esa localidad
ven el nuevo valor, sin importar que tan pronto se haga la lectura despus del cambio y sin
importar los procesos que estn haciendo la lectura ni la posicin de estos. De manera
analgica, si se realiza una lectura, se obtiene el valor actual, sin importar lo rpido que se
realice la siguiente escritura.
6.3.2. Consistencia secuencial.
Aunque la consistencia estricta es el modelo de programacin ideal, es casi
imposible implantarla en un sistema distribuido. Adems, la experiencia muestra que los
programadores suelen controlar bien los modelos ms dbiles. Por ejemplo, en todos los
libros de texto sobre sistemas operativos se analizan las secciones crticas y el problema
de exclusin mutua. Este anlisis siempre incluye la advertencia de que los programas
escritos en paralelo (como el problema de los productores y los consumidores) no deben
establecer hiptesis acerca de las velocidades relativas de los procesos ni del intercalado
de sus instrucciones en el tiempo. Si se cuenta con el hecho de que dos eventos dentro de
un proceso suceden tan rpido que el otro proceso ser incapaz de hacer algo, se estn
buscando problemas. En vez de esto, al lector se le ensea a programar de forma tal que

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)

Figura 6-13. Dos resultados posibles al ejecutar el mismo programa.

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

ejecucin de un programa podra no proporcionar el mismo resultado, a menos que se


utilicen operaciones explicitas de sincronizacin.
a=1;
Print(b, c)
(a)

b=1;
print (a, c);
(b)

c=1;
print(a, b)
(c)

Figura 6-14. Tres procesos paralelos.

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

A el conjunto de todas estas series se les llama H.


Para obtener el orden relativo, debemos en que aparecen las operaciones por ejecutar
debemos fusionar las cadenas de operaciones en H en una cadena, S donde cada
operacin que aparezca en H ser un vez en S. de manera intuitiva, S da la orden de que
las operaciones se hubieran realizado si se tuviera una manera centralizada. Todos los
valores validos de S deben cumplir dos restricciones:
1 Debe mantener el orden de los programas.
2 Debe ser respetada la coherencia de la memoria.
La primera restriccin significa que si un acceso de lectura o escritura, A, aparece antes
que otro acceso, B, en una de las cadenas H, A tambin debe aparecer antes B en S. Si es
cierta esta restriccin para todos lo pares de operaciones, la S resultante no mostrara
operaciones en un orden que viole cualquiera de los programas.
Cualquiera restriccin, llamada coherencia de memoria, significa que una lectura alguna
localidad, x regresa siempre el valor ms reciente escrito en x; es decir, el valor v escrito
por la W(x)v ms reciente antes de R(x). La coherencia de memoria examina cada
localidad y la secuencia de las operaciones en esta de manera aislada, sin contemplar las
dems localidades. La consistencia, en contraste, trata de la escritura en localidades
diferentes y su ordenamiento.
Para la figura 6-12(b), solo existe un valor de S.
S = R(x)0 W(x)1 R(x)1
Para otros ejemplos ms complicados deben existir valores validos de S. Se dice que el
comportamiento de un programa es correcto si su secuencia de operaciones corresponde
a algn valor valido de S.
Aunque la consistencia secuencial es un modelo amigable con el programador, tiene un
problema serio de desempeo. Lipton y Sandberg (1988) demostraron que si el tiempo de
lectura es r, y el de la escritura es w y el tiempo mnimo de transferencia de paquete entre
los nodos es t, entonces siempre ocurre r+w t. en otras palabras, para cualquier memoria
con consistencia secuencial, la modificacin del protocolo para mejorar el de desempeo
de la lectura empeora el desempeo de la lectura, y viceversa. Por esta razn, los
investigadores Han estudiado otros modelos (ms dbiles). En las siguientes secciones
analizaremos alguno de ellos.

6.3.3. Consistencia causal.

MODELOS DE CONSISTENCIA

El modelo de consistencia causal (Hutto y Ahamad, 1990) representa un


debilitamiento de la consistencia secuencial que hace una distincin entre los eventos
potencialmente relacionados por causalidad y aquellos que no lo estn.
Para ver a que se refiere la causalidad, consideremos un ejemplo de la vida diaria
(para un cientfico de la computacin). Durante una discusin de los mritos relativos de
diferentes lenguajes de programacin en uno de los grupos de noticias USENET, un
fantico envi el mensaje: Cualquier persona sorprendida programando en FORTRAN
debe ser ejecutada. Tiempo despus, un individuo sensato escribe: Estoy en contra de la
pena capital, aunque haya enorme ofensa contra el buen gusto. Debido a diversos
retardos a lo largo de la ruta de propagacin de mensajes, un tercer suscrito obtiene
primero la respuesta y queda confundido al verla. El problema aqu es que la causalidad ha
sido violada. Si el evento B es causado o influido por un evento anterior, A, la causalidad
requiere que todos vean primero a A, y despus vean a B.
Consideremos ahora un ejemplo de memoria. Suponga que el proceso P1 escribe
una variable x. Despus p2 lee x y escribe y. Aqu la lectura de x y la escritura de y estn
en potencial relacionadas de forma causal, pues el clculo de y podra defender el valor de
x ledo por p2 (es decir, el valor escrito por p). Por otro lado, si dos procesos escriben de
forma espontnea y simultnea en dos variables, no estn relacionados de forma causal.
Cuando ocurre una lectura seguida por una escritura, los dos eventos estn en potencia
relacionados de forma causal. De manera anloga, una lectura est relacionada de forma
causal con la escritura que proporciona el dato obtenido por la lectura. Las operaciones
que no estn relacionadas de forma causal son concurrentes.
Para que una memoria sea consistente de forma causal, obedece las siguientes
condiciones:
Las escrituras potencialmente relacionadas de forma causal son vistas por
todos los procesos en el mismo orden. Las escrituras concurrentes pueden
ser vistas en un orden diferente en mquinas diferentes.
Como ejemplo de consistencia causal, considere la figura 6-16. Aqu tenemos una
sucesin de eventos permitida con memoria consistente de forma causal, pero prohibida
para una memoria con consistencia secuencial o con consistencia estricta. Lo que hay que
observar es que las escrituras W(X)2 y W(x)3 son concurrentes, por lo que no se requiere
que todos los procesos los vean en el mismo orden. Si el software falla cuando proceden
diferentes eventos concurrentes en orden distinto, se ha violado el contrato de memoria
ofrecido por la memoria causal.

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.

Ahora considere un segundo ejemplo. En la figura 6-17(a) tenemos que W(x)2


potencialmente depende de W(x)1, ya que 2 pueden ser un resultado de un clculo que
implique al valor ledo por R(x)1. Las dos escrituras estn relacionadas de forma causal, de
modo que todos los procesos deben verlas en el mismo orden. Por lo tanto, la figura 617(a) es incorrecto. Por otro lado, en la figura 6-14(b), la lectura ha sido eliminada, de
modo que W(x)1 y W(x)2 son ahora escritura concurrentes. La memoria causal no necesita
ordenar de forma global las escrituras concurrentes, por lo que la figura 6-17(b) es
correcta.
La implantacin de la consistencia causal mantiene un registro de cules procesos
han visto y cules escrituras. Esto significa de hecho que debe construirse y mantenerse
una grfica de dependencia con las operaciones que depende de otra. Hacen esto implica
cierto costo.

Vous aimerez peut-être aussi