Tema 8: Memoria Compartida Distribuida


LOS SISTEMAS DE SOFTWARE DSM 

Pueden ser implementados bajo un sistema operativo (SO), o como una biblioteca de programación. Los sistemas de software DSM implementados en el SO pueden concebirse como extensiones de la arquitectura de memoria virtual subyacente. Estos sistemas son transparentes al desarrollador, lo que significa que la memoria distribuida subyacente está completamente oculta para los usuarios. En contraste, los sistemas de software DSM implementados en una biblioteca no son transparentes y los desarrolladores tienen que programarlos separadamente. Sin embargo, estos últimos sistemas ofrecen mejores características de portabilidad en la implementación de sistemas DSM.


                
LOS SISTEMAS DE MEMORIA COMPARTIDA DISTRIBUIDA (MCD)       

         Son sistemas de software que emulan semántica de memoria compartida sobre hardware que ofrece soporte sólo para comunicación mediante paso de mensajes. Este modelo permite utilizar una red de estaciones de trabajo de bajo costo como una máquina paralela con grandes capacidades de procesamiento y amplia escalabilidad, siendo a la vez fácil de programar.

Cada uno de los nodos en un sistema de MCD aporta memoria local para construir un espacio global de direcciones virtuales que será empleado por los procesos que se ejecuten en el sistema. El software de MCD se encarga de interceptar las referencias a memoria que hacen los procesos y satisfacerlas, ya sea local o remotamente. Si los accesos a memoria hacen referencia a posiciones almacenadas remotamente, es necesario llevar a cabo una transferencia a través de la red con el consecuente overhead.
En los sistemas basados en páginas la granularidad de la memoria se define a nivel de página de memoria. Esto quiere decir que la mínima unidad referenciable por el sistema de MCD es la página, no pudiendo distinguir entre variables distintas almacenadas en la misma página.

A pesar de que el uso de una granularidad a nivel de página puede introducir problemas como el false sharing, también permite mantener el overhead producido por la administración de la memoria distribuida dentro de parámetros razonables. Esto se debe a que se puede hacer uso de las características de hardware para el manejo de memoria virtual, disponibles en la mayoría de los computadores.

El alto tráfico de páginas por la red que puede provocar un sistema de MCD obliga a la utilización de memoria local en cada nodo para almacenar copias de páginas frecuentemente usadas, en la misma forma en que un caché ayuda a mejorar el desempeño de un sistema multiprocesador fuertemente acoplado. Sin embargo, la incorporación de estos cachés introduce un problema de coherencia para las múltiples copias que pueden existir de cada página.

La actualización de las páginas modificadas puede llevarse a cabo de distintas maneras. En primer lugar, puede emplearse un protocolo de actualización: Se envía las páginas actualizadas a todos los nodos que mantienen copias. Otra opción es simplemente enviar mensajes de invalidación para las copias, de modo que la actualización se lleve a cabo por demanda. Finalmente, puede enviarse diffs que codifiquen los cambios a las páginas y que permitan construir la versión actualizada a partir de una página original y múltiples modificaciones. Esta última opción es la que se emplea en los protocolos que soportan múltiples escritores simultáneos sobre una página, con el objetivo de reducir el problema de false sharing. Sea cual sea el caso aquí se emplea simplemente el término actualización.
Por otra parte, el modelo de consistencia establece la forma en que se hacen visibles a los distintos nodos del sistema las actualizaciones hechas a la memoria compartida. Dado un cierto modelo de consistencia, los programadores y el sistema \acuerdan" un determinado comportamiento para la memoria. Así, bajo un modelo de consistencia estricto, cada actualización es vista en forma instantánea por todos los nodos en el sistema. Aunque éste sería el ideal para cualquier programador, en la práctica es imposible de implementar y mucho menos en una red de computadores.
Los primeros sistemas de MCD empleaban protocolos rígidos que implementaban un modelo casi estricto, el modelo de consistencia secuencial. Bajo este modelo, las actualizaciones a la memoria compartida son vistas en el mismo orden por todos los nodos. Sin embargo, este orden puede variar en distintas ejecuciones, en la misma forma en que podría variar bajo un modelo estricto dada la concurrencia con que se realizan las actualizaciones. Para poder cumplir con este modelo es necesario hacer del conocimiento de todos los nodos la ocurrencia de una actualización, provocando una alta tasa de comunicación por la red y por consiguiente un desempeño muy pobre del sistema en general. 

También se encuentra Memoria compartida basada en objetos Una alternativa al uso de páginas es tomar el objeto como base de la transferencia de memoria. Aunque el control de la memoria resulta más complejo, el resultado es al mismo tiempo modular y flexible, y la sincronización y el acceso se pueden integrar limpiamente. Otra de las restricciones de este modelo es que todos los accesos a los objetos compartidos han de realizarse mediante llamadas a los métodos de los objetos, con lo que no se admiten programas no modulares y se consideran incompatibles. 

En ese sentido 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.

No hay comentarios:

Publicar un comentario