INTRODUCCION
En Informática, en un sistema distribuido, tales como una memoria compartida
distribuida o almacenes de datos distribuido, tales como una base de datos,
sistema de archivos, caché web o sistemas de replicación optimista, hay una serie
de posibles modelos de consistencia de datos. Se dice que un sistema soporta un
determinado modelo, si las operaciones en memoria siguen normas específicas.
La consistencia de los datos es definida entre el programador y el sistema, que
garantiza que si el programador sigue las reglas, la memoria será consistente y el
resultado de las operaciones de memoria será predecible.
Los lenguajes de alto nivel, tales como C, C++ y Java, respetan parcialmente este
modelo traduciendo operaciones de memoria en operaciones de bajo nivel para
preservar la memoria semántica. Para mantener el modelo, los compiladores
pueden reordenar algunas instrucciones de memoria, y las llamadas a las
bibliotecas para encapsular la sincronización necesaria.
DESARROLLO
Entre los diferentes modelos de consistencia podemos nombrar como ejemplo a
los siguientes:
Consistencia estricta: Cualquier lectura a una localidad de memoria x
regresa el valor guardado por la operación de escritura más reciente en x.
Por ejemplo: cuando la memoria tiene consistencia estricta, todas las
escrituras visibles al instante a todos los procesos y se mantiene un orden
de tiempo global absoluto.
Consistencia secuencial: es un modelo de memoria un poco más débil
que la consistencia estricta. Fue definida por primera vez por Lamport,
quien dijo que una memoria con consistencia secuencial es la que satisface
la siguiente condición:
“El resultado de cualquier ejecución es el mismo que si las operaciones de
todos los procesos fueran ejecutadas en algún orden secuencial, y las
operaciones de cada proceso individual aparecen en esta secuencia en el
orden especificado por su programa”
Consistencia PRAM: Cuando termina una sincronización todas las
escrituras realizadas en esa máquina se propagan hacia afuera y todas las
escrituras realizadas en otra maquina son traídas hacia la maquina en
cuestión, dicha consistencia tiene 3 propiedades:
1.- Los accesos a las variables de sincronización son secuencialmente
consistentes
2.- No se permite realizar un acceso a una variable de sincronización hasta
que las escrituras anteriores hayan terminado en todas partes
3.- No se permite realizar un acceso a los datos (L/E) hasta realizar todos
los accesos anteriores a las variables de sincronización
Consistencia causal: La consistencia causal se permite que las escrituras
concurrentes sean vistas en diferente orden en varias máquinas y está
sujeta a esta condición: Las escrituras realizadas por un proceso son
recibidas por los otros procesos en el orden que son realizadas, pero las
escrituras de los procesos diferentes pueden verse en un orden diferente
por procesos diferentes.
Consistencia de liberación: se basa en el supuesto de que los accesos a
variables compartidas se protegen en secciones críticas empleando
primitivas de sincronización, como por ejemplo locks. En tal caso, todo
acceso esta precedido por una operación adquiere y seguido por una
operación release. Es responsabilidad del programador que esta propiedad
se cumpla en todos los programas.
Consistencia débil: Los accesos a variables de sincronización asociadas
con los datos almacenados son secuencialmente consistentes.
Propiedades de la consistencia débil: No se permite operación sobre una
variable de sincronización hasta que todas las escrituras previas de hayan
completado; y no se permiten operaciones de escritura o lectura sobre
ítems de datos hasta que no se hayan completado operaciones previas
sobre variables de sincronización.
CONCLUSION
Un modelo de consistencia es esencialmente un contrato entre procesos y el
almacenamiento de datos. Es decir: si los procesos acuerdan obedecer ciertas
reglas, el almacenamiento promete trabajar correctamente.
Normalmente un proceso que realiza una operación de lectura espera que esa
operación devuelva un valor que refleje el resultado de la última operación de
escritura sobre el dato.
La duplicidad de los bloques compartidos aumenta el rendimiento, pero produce
un problema de consistencia entre las diferentes copias de la página en caso de
una escritura.
Si con cada escritura es necesario actualizar todas las copias, el envío de las
páginas por la red provoca que el tiempo de espera aumente demasiado.