Está en la página 1de 6

Unidad 4 Memoria Compartida Distribuida

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.

4.1 Configuraciones Memoria Compartida 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.

4.1.1 De Circuitos Basados en Bus, anillo o con conmutador

 Multiprocesadores basados en un bus.

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.

La desventaja es la sobrecarga del bus.

Una solución sería equipar a cada CPU con un caché husmeador.

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.

4.2 Modelos de Consistencia

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.

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:

  Linealizable (también conocido como el estricta o consistencia atómica)

  Consistencia secuencial

 Consistencia de causalidad

  Consistencia liberada

  Consistencia eventual

  Consistencia delta

 Consistencia PRAM (también conocido como consistencia FIFO)

 Consistencia débil

  Consistencia vector campo

4.2.1 Estricta Causal Secuencial Debil, de liberación y de entrada

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. 

Es permitida con un almacenamiento causalmente consistente, pero no con un almacenamiento


secuencialmente consistente o con un almacenamiento consistente en forma estricta.

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

 Un dato almacenado secuencialmente consistente.

 Un dato almacenado que no es secuencialmente consistente.

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.

 No se permiten operaciones de escritura o lectura sobre datos hasta que no se hayan


completado operaciones previas sobre variables de sincronización.

 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.

4.3 Mcd en base a Paginas

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.

4.3.1 Diseño Replica Granularidad Consistencia, propietario y copias

El sistema operativo, y en el caso del protocolo de consistencia de entrada, por acciones de


sincronización explícitas dentro del código del usuario. El hecho que la especificación se encuentre
dispersa dificulta tanto la incorporación de nuevos protocolos de consistencia como la modificación de
los ya existentes, debido a que los componentes tienen además de su funcionalidad básica
responsabilidades que no les corresponden.
Hay dos razones principales para la replicación de datos:

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.

4.4 Mcd en Base a Variables

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.

Ejemplos: Munin y Midway

 Se recomienda la duplicación. Ésta puede ser parcial o total.

 El Algoritmo de actualización es sumamente importante.


 No hay compartición falsa dado que todos los procesos acceden a datos protegidos y
consistentes dado que la variable compartida monitoriza los accesos de escritura.

Munin

 Se basa en objetos del software (usa MMU).

  Declaraciones con “shared”.

  Una variable compartida por página (por defecto).

 Instrucciones normales de lectura y escritura.

  No hay métodos de protección especiales.

 Se manejan regiones críticas.

     Clases de variables:

 Variables ordinarias.

 Variables de datos compartidos.

  Variables de sincronización.

    Categorías de variables:

 Exclusiva para lectura.

 Migratoria.

 De escritura compartida.

 Convencional.

Midway

  Compartir estructuras de datos individuales.

  C, C++ o ML convencional con información adicional.

  Mantiene consistentes las variables compartidas de manera eficiente.

4.5 Mcd en Base a Objetos

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:

 Es mas modular que otras técnicas.

 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:

 No corre en viejos programas para multiprocesadores.

 Los accesos se deben hacer invocando a los accesos, lo que significa más trabajo que los
métodos de páginas compartidas.

También podría gustarte