Documentos de Académico
Documentos de Profesional
Documentos de Cultura
La memoria compartida distribuida (DSM) es una abstracción utilizada para compartir datos entre
computadores que no comparten memoria física. Los procesos acceden a DSM para leer y actuali zar, dentro
de sus espacios de direcciones, sobre lo que aparenta ser la memoria interna normal asignada a un proceso.
Sin embargo, existe un sistema subyacente en tiempo de ejecución que asegura de forma transparente que
procesos diferentes ejecutándose en computadores diferentes observen las actualizaciones realizadas entre
ellas. Es como si 1os procesos accedieran a una única memoria compartida, pero de hecho la memoria física
está distribuida.
Los sistemas de memoria compartida distribuida (DSM) representan la creación hibrida de dos tipos de
computación paralelos: la memoria distribuida en sistemas multiprocesador y los sistemas distribuidos. Ellos
proveen la abstracción de memoria compartida en sistemas con memorias distribuidas físicamente y
consecuentemente combinan las mejores características de ambos enfoques. Debido a esto, el concepto de
memoria compartida distribuida es reconocido como uno de los enfoques mas atractivos para la creación de
sistemas escalables, de alto rendimiento de sistemas multiprocesador.
Para evitar que dos o más CPU’s intenten el acceso a la memoria al mismo tiempo, se necesita algún tipo de
arbitraje del bus. El CPU debe pedir permiso para conseguir el bus. La concesión puede hacerse de forma
centralizada, utilizando un dispositivo de arbitraje de bus, o de forma descentralizada, donde el primer CPU
que realice una solicitud en el bus ganará cualquier conflicto.
Un protocolo en particular común es el de escritura a través del caché. Cuando un CPU lee por primera vez
una palabra de memoria, esa palabra es llevada por el bus y guardada en el caché del CPU solicitante.
Puede suceder que una palabra en particular se oculte en dos o más CPU al mismo tiempo.
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.
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 como pthread_mutex_lock(), encapsular la sincronización necesaria.
Los ejemplos incluyen:
Consistencia secuencial
Consistencia de causalidad
Consistencia liberada
Consistencia eventual
Consistencia delta
Consistencia débil
Consistencia Casual
La condición a cumplir para que unos datos sean causalmente consistentes es:
- Escrituras que están potencialmente relacionadas en forma causal deben ser vistas por todos los
procesos en el mismo orden.
- Escrituras concurrentes pueden ser vistas en un orden diferente sobre diferentes máquinas.
Consistencia Secuencial
La consistencia secuencial es una forma ligeramente más débil de la consistencia estricta. Satisface la
siguiente condición:
El resultado de una ejecución es el mismo si las operaciones (lectura y escritura) de todos los procesos
sobre el dato fueron ejecutadas en algún orden secuencial
Consistencia Débil
Los accesos a variables de sincronización asociadas con los datos almacenados son secuencialmente
consistentes.
Propiedades
No se permite operación sobre una variable de sincronización hasta que todas las escrituras
previas de hayan completado.
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 Estricta
Está definido por la siguiente condición: Cualquier lectura a una localidad de memoria x regresa el valor
guardado por la operación de escritura más reciente en x Esta definición supone la existencia de un
tiempo global absoluto (como en la física de Newton), para que la determinación del evento "más
reciente" no sea ambigua. Esta consistencia es típica de sistemas uniprocesador, donde nunca se
pueden presentar dos eventos simultáneamente. Sin embargo es prácticamente imposible de lograr en
sistemas multiprocesador (distribuidos o no), debido a que pueden existir escrituras y lecturas en
memoria separadas por espacios mínimos de tiempo que no alcanzan a cumplir la condición exigida.
El esquema de DSM propone un espacio de direcciones de memoria virtual que integra la memoria de
todas las computadoras del sistema, y su uso se realiza mediante paginación. Las páginas quedan
restringidas a estar necesariamente en un único nodo. Cuando un programa intenta acceder a una
posición virtual de memoria, se comprueba si esa página se encuentra de forma local. Si no se
encuentra, se provoca un fallo de página, y el sistema operativo solicita la página al resto de nodos. El
sistema funciona de forma análoga al sistema de memoria virtual tradicional, pero en este caso los
fallos de página se propagan al resto de ordenadores, hasta que la petición llega al nodo que tiene la
página virtual solicitada en su memoria local.
Confiabilidad
Continuidad de trabajo ante caída de la réplica, mayor cantidad de copias mejor protección contra la
corrupción de datos.
Rendimiento
El SD escala en número
Escala en área geográfica (disminuye el tiempo de acceso al dato) Consulta simultánea de los mismos
datos.
Granularidad
Se refiere a la especificidad a la que se define un nivel de detalle en una tabla, es decir, si hablamos de
una jerarquía la granularidad empieza por la parte más alta de la jerarquía, siendo la granularidad
mínima, el nivel más bajo.
En los MCD basados en variables busca evitar la compartición falsa ejecutando un programa en cada
CPU que se comunica con una central, la que le provee de variables compartidas, administrando este
cualquier tipo de variable, poniendo variables grandes en varias páginas o en la misma página
muchas variables del mismo tipo, en este protocolo es muy importante declarar las variables
compartidas.
La compartición falsa se produce cuando dos procesos se pelean el acceso a la misma página de
memoria, ya que contiene variables que requieren los dos, pero estas no son las mismas. Esto pasa
por un mal diseño del tamaño de las páginas y por la poca relación existente entre variables de la
misma página.
En este esquema la granularidad es más fina ya que sólo se comparten variables que han sido
marcados previamente en el código del programa.
Tanto el compilador como el entorno de ejecución se encargan del acceso y compartición de las
variables compartidas.
Munin
Variables ordinarias.
Variables de sincronización.
Categorías de variables:
Migratoria.
De escritura compartida.
Convencional.
Midway
En los MCD basados en objetos se busca el acceso a datos por medio de la encapsulación de la
información y repartida a través de la red, estos objetos serán definidos por el Programador y las
CPU´s cambiaran los estados según procedan con los accesos. Nace como respuesta a la creciente
popularización de los lenguajes orientados por objetos. Los datos se organizan y son transportados
en unidades de objetos, no unidades de páginas.
Ventajas:
La implementación es más flexible por que los accesos son controlados. Sincronización y
accesos se pueden integrar juntos, más fácilmente
Desventajas:
Los accesos se deben hacer invocando a los accesos, lo que significa más trabajo que los
métodos de páginas compartidas.