Sistemas operativos unidad 4
• 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.
• 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.
Visión general de la MCD
• 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).
• 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.
Replicación
(a) páginas distribuidas en 4 máquinas
(b) CPU 0 lee página 10
(c) CPU 1 lee página 10
• 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.
#include
int shmget(key, size, shmflg);
int shmid;
if((shmid = shmget(IPC_PRIVATE, 4096, IPC_CREAT | 0600)) == -1)
/*Error al crear 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);
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
Existen varias formas de implantar físicamentememoria 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).
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 necesitatener una memoria caché grande y sumamente rápida. 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....
Regístrate para leer el documento completo.