1.07k likes | 1.42k Views
Memoria Compartida Distribuida. M.C. Juan Carlos Olivares Rojas. jcolivar@antares.itmorelia.edu.mx http://antares.itmorelia.edu.mx/~jcolivar Julio, 2009. Agenda. 4.1 Configuraciones de MCD. 4.2 Modelos de consistencia. 4.3 MCD en base a páginas. 4.4 MCD en base a variables.
E N D
Memoria Compartida Distribuida M.C. Juan Carlos Olivares Rojas jcolivar@antares.itmorelia.edu.mx http://antares.itmorelia.edu.mx/~jcolivar Julio, 2009
Agenda 4.1 Configuraciones de MCD. 4.2 Modelos de consistencia. 4.3 MCD en base a páginas. 4.4 MCD en base a variables. 4.5 MCD en base a objetos.
Memoria • Una de las principales características de una computadora es la capacidad que tienen para almacenar datos e información. • El primero en tener la idea de almacenar un programa en una computadora fue Jonh Von Neumman (participante en la ENIAC). • Él utilizó la memoria para almacenar datos y programas.
Memoria El otro modelo de arquitectura de computadoras conocida como Arquitectura Harvard, existe una memoria especial para datos y otra memoria para programas. Esto hace que los circuitos sean más eficientes pero más costosos a la vez. La gran mayoría de la computadoras (incluyendo las PC) utilizan la arquitectura Von Neumman.
Concepto de memoria • La memoria principal puede ser considerada como un arreglo lineal de localidades de almacenamiento de un byte de tamaño. Cada localidad de almacenamiento tiene asignada una dirección que la identifica. • La memoria principal es el lugar donde el CPU lee las instrucciones a ejecutar, así como algunos datos a emplear.
Memoria • ¿Por qué es importante la memoria? • Programas = Algoritmos + Estructuras de Datos • Estructuras de Datos (pilas, listas, colas, etc.) son memoria.
Memoria • La memoria se puede ver como un casillero en el cual se almacena información. • La memoria puede ser estática o dinámica dependiendo de cómo se gestione. • La memoria está divida en secciones de código, datos estáticos, Pila y el Heap (monton).
Conceptos de memoria • Todo sistema operativo tiene un mapa de memoria que indica como están administrada la memoria y que partes se pueden ocupar. • La filosofía del administrador de memoria consiste en optimizar el uso de este recurso, ya que la memoria es uno de los componentes críticos de todo sistema de cómputo.
Memoria • La principal problemática de la memoria principal es que no es persistente. Por este motivo se tienen que implementar estrategias de almacenamiento y recuperación de información. • Las operaciones básicas que se realizan sobre una memoria son dos: lectura (r) y escritura (w).
Memoria • Las operaciones anteriores son a nivel usuario. A nivel sistema se tienen llamadas al sistema como malloc, free, allocate, etc. También debe proporcionar opciones de bloqueo y desbloqueo (protección). • La ley de Parkinson dice: “los programas se expanden hasta llenar la memoria disponible para contenerlos”.
Memoria No por tener el doble de memoria instalada en un sistema legado, este será el doble de rápido. La memoria física es utilizado por muchos procesos en lugar de la memoria virtual. Todo proceso necesita memoria física para poderse ejecutar.
Administrador de memoria • Sirve para tener un control sobre los lugares donde están almacenados los procesos y datos que actualmente se están utilizando. • Las políticas de administración de memoria generalmente son duras, es decir no modificables, pero se pueden configurar algunos parámetros para su mejor uso.
Ejemplos de memoria • Las tendencias actuales sobre el manejo de memoria indican el uso en diversas aplicaciones: • Portapapeles: permite guardar datos y transferirlo a otros programas. • Uso de base de datos en memoria. Algunas versiones de MySQL Lite permiten hacerlo.
Ejemplos de memoria • Las computadoras actuales permiten guardar los datos al apagar una computadora, para tener un mejor desempeño (hibernación, suspensión). • Los punteros permiten desplazarnos por las localidades de memoria. Una variable es una localidad de memoria.
Mecanismos de Asignación • Un mecanismo de asignación determina la cantidad de bloques (particiones) que serán administrados en la memoria. • El esquema básico de asignación consiste en particionar (dividir) la memoria en diferentes partes. • Existen 3 mecanismos de Asignación:
Estrategias de asignación de memoria • Una estrategia de asignación de memoria determina el lugar donde será cargado un nuevo proceso en base a un criterio. Las estrategias de asignación son: • Primer ajuste. • Siguiente ajuste • Mejor ajuste • Peor ajuste
Complejidad de los mecanismos y estrategias de asignación • Cualquier método para manejar la disponibilidad de la memoria presenta inconvenientes como: • Fragmentación • Overhead • Relocalización de programas • Trashing (sacar un programa inmediatamente después de haber sido asignado memoria)
Concepto de Memoria virtual • Es un método mediante el cual, un sistema operativo simula tener mas memoria principal que la que existe físicamente. Para implementar la memoria virtual se utiliza un medio de almacenamiento secundario de alta velocidad de acceso, generalmente en disco duro de la maquina. • Se utiliza la paginación como método de administración de memoria básica y algún mecanismo de intercambio.
Espacio de Direcciones en Windows • Espacio de Direcciones de 32-bit (4 GB) • 2 GB espacio de usuarios • 2 GB sistema operativo • Espacio de Direcciones de 64-bit • 7192 GB espacio de usuario (Itanium) • 8192 GB espacione de usuario (x64) • ~6000 GB sistema operativo Espacio de Direcciones De 32-bit Único por proceso 2 GB Espacio de Procesos de Usuario Systemwide 2 GB Sistema Kernel/HAL drivers Sistema de cache
Mecanismos de Memoria Virtual • Existen 2 métodos para cargar programas en memoria: • Demanda de página:consiste en iniciar la ejecución de los procesos sin páginas cargadas, estas se irán cargando conforme el proceso las demande. • Prepaginación: consiste en que el sistema operativo predice cuales páginas se ocuparán durante la ejecución de un proceso.
Algoritmos de descarga (Reemplazo) • Se utiliza para determinar cuales páginas serán descargadas hacia el disco duro cuando se quiera cargar nuevas paginas y no haya memoria libre. Existen 3 algoritmos básicos: • MIN • FIFO • LRU
Swap • El swap es la forma en como se intercambia una partición de memoria por otra. Generalmente se utiliza en técnicas basadas en paginación. • Se ocupa de una administración adecuada del sistema de archivos para permitir paginación.
Swap • Un ejemplo claro de intercambio es la famosa función de intercambio int swap(int a, int b) { int aux = a; a = b; b = aux; }
Agenda 4.1.1 De circuitos, basados en bus, anillo o con conmutador.
Memoria Compartida Distribuida La principal problemática que se presenta entre dos o más procesos sean locales o distribuidos al compartir recursos es que cada proceso tiene su propio espacio de direcciones. Cuando se trata de procesos locales al estar físicamente en el mismo hardware el espacio de direcciones se vuelve sencillo la compartición. Esto no es sencillo en procesos distribuidos.
Memoria Compartida Distribuida En un Sistema Operativo Distribuido, una computador ejecuta los procesos en su memoria propia, pero en caso de necesitar más memoria utilizará los recursos disponibles de otra computadora. La Memoria compartida distribuida ayuda a que no se formen los famosos cuellos de botella, facilita el diseño y construcción de sistemas distribuidos.
Memoria Compartida Distribuida Visión general de la MCD
Memoria Compartida Distribuida El esquema más básico de compartición de datos en Sistemas Distribuidos es el paso de mensajes (e.g. sockets). La problemática es la latencia y la garantía de acceso (puede llegar o no el mensaje). Existen tres formas básicas de lograr compartición de memoria en ambientes distribuidos: por hardware, por sistema operativo o a nivel de usuario (software).
Memoria Compartida Distribuida La compartición de memoria se da por diversos esquemas, siendo las más comunes: por paginación, por variables compartidas y por objetos. El diseño de la granularidad de compartición así como la sincronización y manejo de consistencia son elementos importantes en el diseño de mecanismos de memoria compartida.
Memoria Compartida Distribuida Replicación (a) páginas distribuidas en 4 máquinas (b) CPU 0 lee página 10 (c) CPU 1 lee página 10
Memoria Compartida Distribuida • Pseudo-Compartición
Memoria compartida en IPC La forma más rápida de comunicar dos procesos es que compartan una zona de memoria compartida. Las primitivas para manipular memoria compartida son: shmget para crear una zona d ememoria compartida o utilizar una ya creada, shmctl para acceder y modificar la información administrativa y de control, shmat para unir una zona de memoria compartida a un proceso, y shmdt para separa una zona previamente unida.
Memoria compartida #include <sys/shm.h> int shmget(key, size, shmflg); int shmid; if((shmid = shmget(IPC_PRIVATE, 4096, IPC_CREAT | 0600)) == -1) /*Error al crear memoria compartida*/
Memoria compartida int shmctl(shmid, cmd, buf) cmd indica la operación la cual puede ser: IPC_STAT, IPC_SET, IPC_RMID, SHM_LOCK, SHM_UNLOCK. struct shmid_s *buf smctl(shmid, IPC_RMID, 0);
Memoria compartida char *shmat(shmid, shmaddr, shmflg); int shmdt(shmaddr); float *memoria; shmid = shmget(llave, MAX * sizeof(float), IPC_CREAT | 0600); memoria = shmat(shmid, 0, 0); /*Operar memoria*/ shmdt(memoria); shmctl(shmid, IPC_RMID, 0);
Arquitecturas de MCD Existen varías formas de implantar físicamente memoria compartida distribuida, a continuación se describen cada una de ellas. Memoria basada en circuitos: existe una única área de memoria y cada micro tiene su propio bus de datos y direcciones (en caso de no tenerlo se vuelve un esquema centralizado)
Arquitecturas de MCD ¿Diferencias entre UMA y NUMA? MCD basada en bus: en este esquema los micros comparten un bus de datos y direcciones por lo que es más barato de implementar, se necesita tener una memoria caché grande y sumamente rápida. MCD basada en anillos: es más tolerante a fallos, no hay coordinador central y se privilegia el uso de la memoria más cercana