Blogia

mcd-unerg

Definición de Memoria Compartida Distribuida

Definición de Memoria Compartida Distribuida

La memoria compartida distribuida (MCD), es reconocida como uno de los enfoques más llamativos para la creación de sistemas escalables, de alto rendimiento de sistemas multiprocesador. Los sistemas de memoria compartida distribuida, realizan una semántica de memoria compartida sobre hardware de intercambio de mensajes, ya que representan la creación hibrida de dos tipos de computación paralelos: la memoria distribuida en sistemas multiprocesador y los sistemas distribuidos. Estos proporcionan la abstracción de memoria compartida en sistemas con memorias distribuidas físicamente y combinan las mejores características de ambos enfoques. Este sistema de memoria compartida posee su propia memoria local  y se interconecta con otros procesadores por medio de un dispositivo de alta velocidad.

MODELOS DE CONSISTENCIA

Este modelo estipula los principios de garantía de consistencia que el sistema de MCD mantiene sobre los procesos que acceden a los datos que un nodo va a enviar a otro nodo, procesos que generan copias de los datos accedidos que quedan asentados en la memoria del nodo para un próximo acceso y que por consiguiente son actualizados.

 

Cabe destacar que cada nodo tiene su proceso encargado de dirigir las copias almacenadas en la memoria caché da cada computador para que el acceso a ellas se facilite, este es conocido como gestor de réplicas total, que se implementa a través una combinación del middleware (el nivel MCD en tiempo de ejecución en cada proceso) y del núcleo.

 

Además del manejo que se realiza a la caché, una implementación MCD puede acumular las actualizacio­nes y restringir los costos de comunicación por medio de la difusión de múltiples actualizaciones a la vez.

 

A través de este esquema resumiremos los diferentes modelos de consistencia existentes:

MODELO DE CONSISTENCIA

DESCRIPCIÓN

 

 

 

 

 

 

 

 

 

 

 

Modelos

que no usan

procesos de sincronización

 

Estricta

Todos los accesos compartidos se observan en el orden en el que se realizaron. Una operación de lectura sobre el dato X, retorna el valor de la última operación de escritura sobre X. Este modelo asume la existencia de un reloj físico global.

 

 

Secuencial

El resultado de cualquier operación distribuida, es el mismo que se obtiene al ejecutar las operaciones de lectura y escritura en algún orden secuencial, respetando que ambas operaciones de un mismo proceso se ejecutan en el orden que impone el proceso.

 

 

Causal

Cuando encontramos una lectura seguida por una escritura, los dos eventos están potencialmente relacionados en forma causal. Es decir, si un evento B es causado o influenciado por un evento A, la causalidad requiere que primero se vea el evento A y luego el B.

 

Pipeline RAM (PRAM)

Las escrituras realizadas por un proceso, son recibidas por el resto en el orden en el cual éstas fueron ejecutadas, no obstante, las escrituras realizadas por diferentes procesos pueden ser vistas en órdenes diferentes por todos ellos

Modelos con procesos de sincronización

 

 

Débil

Los accesos a las variables de sincronización son consistentes de forma secuencial: todos los procesos ven todos los accesos a las variables de sincronización en el mismo orden. Se da garantía que los datos compartidos están consistentes después de la operación de sincronización

 

 

 

Relajada

Los accesos a variables compartidas se protegen en secciones críticas empleando primitivas de sincronización, como locks. En este caso, todo acceso esta precedido por una operación acquire (todas las copias locales de las variables protegidas se actualizan con las variables remotas) y seguido por una operación Release (se propagan los cambios realizados a las variables protegidas al resto de las máquinas).

Casos De Estudio De Memoria Compartida Distribuida

APROXiMACiONES A LA IMPLEMENTACIÓN DE DSM

 

La memoria compartida distribuida se implementa utilizando uno de los siguientes métodos o bien una combinación de ellos, hardware especializado, memoria virtual paginada convencional o middleware:

Hardware: las arquitecturas multiprocesador de memoria compartida basadas en una arquitec­tura NUMA (por ejemplo, Dash [Lenoski y otros 1992] y PLUS [Bisiani y Ravishankar 1990] se basan en hardware especializado para proporcionar a los procesadores una visión consistente de la memoria compartida. Gestionan las instrucciones de acceso a memoria LOAD y STORE de forma que se comuniquen con la memoria remota y los módulos de caché según sea necesa­rio para almacenar y obtener datos. Esta comunicación se realiza sobre sistemas de intercone­xión de alta velocidad similares a una red. El prototipo del multiprocesador Dash tiene 64 no­dos; conectados mediante una arquitectura NUMA.

Memoria virtual paginada: muchos sistemas, incluyendo Ivy [Li y Hudak 1989], Munin [Carter y otros 1991], Mirage [Fleisch y Popek 1989], Clouds [Dasgupta y otros 1991], Choices [Sane y otros 1990], COOL (Lea y otros 1993] y Mether [Minnich y Farber 1989], implementan DSM como una región de memoria virtual que ocupa el mismo rango de direcciones en el espacio de direcciones de cada proceso participante. Este tipo de implementación normalmente sólo es factible sobre una colección de computadores homogéneos con formatos de datos y de paginación comunes.

Middleware: algunos lenguajes del tipo de Orca [Bal y otros 1990] y middleware como Linda [Carriero y Gelernter 1989] junto con sus derivados JavaSpaces y TSpaces [Wyckoff y otros 1998] proporcionan DSM sin necesidad de soporte hardware o de paginación, de una forma independiente de la plataforma. En este tipo de implementación, la computación se implementa mediante la comunicación entre instancias del nivel de soporte de usuario en los clientes y los servidores. Los procesos realizan llamadas a este nivel cuando acceden a datos en DSM. Las instancias de este nivel en los diferentes computadores acceden a los datos locales y se intercambian información siempre que sea necesario para el mantenimiento de la consistencia.

Con soporte hardware, se pueden utilizar técnicas software de alto nivel para minimizar la cantidad de comunicación entre componentes de una implementación DSM.

La aproximación basada en páginas tiene la ventaja de que no impone una estructura particular en la DSM, que se muestra como una secuencia de bytes. Inicialmente permite que los programas diseñados para multiprocesadores de memoria compartida se ejecuten en computadores sin memo­ria compartida, con muy poca o ninguna adaptación. Los micronúcleos como Mach y Chorus proporcionan soporte nativo para DSM (y otras abstracciones de memoria). Actualmente, los sistemas DSM basados en páginas son implementados en su mayor parte en el nivel de usuario debido a su mayor flexibili­dad. La implementación utiliza el soporte del núcleo para los manejadores de fallos de las páginas de nivel de usuario. UNIX y algunas variantes de Windows proporcionan esta posibilidad. Los mi­croprocesadores con espacios de direcciones de 64-bits amplían el ámbito de los sistemas DSM basados en páginas mediante la relajación de las restricciones en la gestión del espacio de direccio­nes [Bartoli y otros 1993].

La implementación de una memoria distribuida consta de:

·         Acceso compartido a la memoria à comunicación Inter-procesos.

·         Ningún procesador puede acceder directamente a la memoria de otro procesador à NORMA (NO Remote Memory Access) Systems.

·         Los procesadores hacen referencia a su propia memoria local. Hay que aumentar software para que, cuando un procesador haga referencia a una página remota, esta página sea recuperada.

·         El espacio de direccionamiento común es particionado en pedazos.

·         Cada pedazo es situado en una estación.

·         Cuando un procesador hace referencia a una pagina no local à "trap" (page fault).

 

Memoria Compartida Distribuida Basada en Objetos

Puesto que en muchos lenguajes de programación los datos se encuentran organizados como objetos y no como variables simples, los sistemas de MCD basados en objetos intentan transportar datos por la red utilizando como unidad de manipulación el objeto y no las páginas o las variables.

 

Los procesos que se ejecutan en los distintos computadores que componen el sistema tienen acceso a un espacio de objetos compartidos, en lugar de a un espacio lineal de direcciones. El sistema es responsable de la ubicación y administración de es- tos objetos compartidos. Un proceso puede invocar métodos de un objeto compartido, independientemente de la ubicación del proceso y del objeto. Los objetos están protegidos por el ocultamiento de información, por lo que los procesos no pueden acceder directamente al estado interno de ningún objeto compartido. Esto facilita algunas optimizaciones dentro del sistema. Por ejemplo, puede relajarse el modelo de consistencia sin que el programador tenga conocimiento alguno. Al igual que en el caso de la granularidad a nivel de variables compartidas, cuando se utiliza el objeto como unidad para compartir es posible eliminar el false sharing.

 

Además, también en este caso es factible utilizar un protocolo de actualización en vez de uno de invalidación. Sin embargo, quizás la mayor ventaja de este modelo es su modularidad y flexibilidad, a la vez que permite una integración limpia con la sincronización.

 

La principal desventaja es el aumento en el overhead que se produce por la manipulación aun más indirecta de la memoria. En realidad, este es un problema inherente al uso de objetos.

 

Un ejemplo de un sistema de MCD basado en objetos es Linda [11], un sistema basado en una memoria compartida altamente estructurada y que es accedida a través de un pequeño conjunto de primitivas que se agregan a lenguajes tradicionales como C y Fortran. El espacio de objetos se llama tuple space, o espacio de tuplas. Los procesos pueden insertar y remover tuplas al espacio, desde cualquier computador.

MCD Basada en Variables Compartidas

          El problema del false sharing puede eliminarse si se utiliza una granularidad mas fina, tan fina como las entidades que usualmente se comparten en los programas paralelos: Las variables. De ser ası, el problema ahora consiste en como mantener registro de las variables replicadas. Ademas, es probable que sea mas conveniente utilizar una polıtica de actualizacion y no de invalidacion, puesto que en la implementacion debe ser posible identificar escrituras a variables individuales.

         Un ejemplo de un sistema de MCD que utiliza una granularidad a nivel de variable compartida es Munin, una de las primeras implementaciones de MCD. Munin permite la ubicacion de variables individuales en paginas diferentes, de modo que se pueda utilizar el hardware de paginacion para identificar los accesos a las variables compartidas

Memoria Compartida Distribuida Basada en Páginas

Memoria Compartida Distribuida Basada en Páginas

           Este modelo 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.

           Para implementar un sistema de MCD es posible hacer uso del hardware de administración de memoria. La gran mayoría de los computadores modernos basan su arquitectura de memoria en paginación o alguna variante de paginación.

   En este tipo de sistemas, el hardware ofrece una serie de facilidades relacionadas con las páginas de memoria, normalmente aprovechadas únicamente

por el sistema operativo.

          En un sistema de MCD basado en páginas, la unidad de memoria que utiliza el sistema es, precisamente, la página. Las páginas migran dinámicamente a través de la red en demanda, puesto que en realidad los procesos pueden acceder únicamente a páginas almacenadas en la memoria local del computador donde se están ejecutando.

            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.

            Este sistema parece más eficiente que el acceso a la memoria virtual en disco, pero en la realidad ha mostrado ser un sistema demasiado lento en ciertas aplicaciones, ya que provoca un tráfico de páginas excesivo. 

           Para mejorar el rendimiento se sugiere dividir el espacio de direcciones en una zona local y privada y una zona de memoria compartida, que se usará únicamente por procesos que necesiten compartir datos. Esta abstracción se acerca a la idea de programación mediante la declaración explícita de datos públicos y privados, y minimiza el envío de información, ya que sólo se enviarán los datos que realmente vayan a compartirse.