¿Memoria compartida o mensajes?. - UAM-I

Anuncio
> M emoria compartida o mensajes?
E liz a b e t h P ¶e r e z Co r t ¶e s y Gr a c ie la R o m ¶a n A lo n s o
U A M-Iz t a p a la p a D e p t o . d e In g . E l¶ e c t r ic a A r e a d e Co m p u t a c i¶o n y S is t e m a s
g r a c , p e c e @xa n u m .u a m .m x
Re s u me n
En e ste a rt¶ ³c ulo se
de lo s de c o munic a c
utiliz a do s e n la c o
da s: la me mo ria c o
je s.
pre se nta n y
i¶o n y sinc ro
nstruc c i¶o n
mpa rtida y
c o mpa ra n do s de lo s mo niz a c i¶o n de pro c e so s m¶a s
de a plic a c io ne s distribuie l inte rc a mbio de me nsa -
1. Introducci¶
on
Las proliferaci¶on de las redes de computadoras en
todos los ¶
ambitos productivos pone a disposici¶
on
del constructor de sistemas de c¶omputo una nueva infraestructura compuesta por varias unidades de
c¶
omputo aut¶onomas que cuentan con un enlace de
comunicaci¶
on. Las unidades de c¶omputo pueden estar en un mismo gabinete (Figura 1.1) y en ese caso
se habla de una m¶aquina paralela. Tambi¶en es posible que se encuentren en un ¶area geogr¶a¯ca relativamente reducida, como un edi¯cio, unidas por una red
local (Figura 1.2). O bien es posible que se encuentren distribuidas en una zona mas amplia, por ejemplo a nivel del planeta, y en ese caso se tendr¶
a una
red de cobertura amplia (Figura 1.3).
F ig ura 1 . A rq uite c tura s distribuida s.
² Para interconectar aplicaciones existentes, como por ejemplo una base de datos con un servicio de correo electr¶
onico. Esta conexi¶on permitir¶
a, por ejemplo, enviar un mensaje a un Jefe de almac¶en cuando la cantidad de un producto disminuya de una cota.
² Para compartir los recursos y aumentar su disponibilidad.
Para obtener bene¯cio de estas infraestructuras aparecen las aplicaciones distribuidas. Una aplicaci¶
on
distribuida est¶a formada por un conjunto de procesos1 que se ejecutan posiblemente en unidades de
c¶
omputo diferentes y aut¶onomas y que se comunican y se sincronizan para realizar una tarea com¶
un.
² Para permitir la evoluci¶
on de las aplicaciones en
funci¶
on de las necesidades.
La construcci¶
on de una aplicaci¶
on distribuida tiene similitudes con la elaboraci¶
on del plan de actividades de un grupo de personas que deben realizar un trabajo. En ambos casos, es necesario tomar decisiones acerca de qui¶en har¶
a qu¶e e identi¯car las dependencias entre las diferentes tareas para ordenarlas de modo que se obtenga un mejor
resultado.
Las aplicaciones distribuidas se construyen por diversas razones [Cou94]:
² Por la naturaleza distribuida de la aplicaci¶
on,
como en el caso de la educaci¶on a distancia.
Una decisi¶
on de gran importancia es la de seleccionar
el medio de comunicaci¶
on y sincronizaci¶
on del que va
a disponer el grupo de individuos para comunicarse.
Imaginemos el caso en el que las personas est¶an cada
una en su o¯cina y cuentan con alguno de los medios
de comunicaci¶
on siguientes:
² Para reducir costos, como en el caso de una empresa en donde los perif¶ericos se comparten v¶³a
red evitando la instalaci¶on de todos los dispositivos en todas las unidades de c¶omputo.
² Para mejorar los rendimientos, como en el caso
de aplicaciones de c¶alculo intensivo.
1U
n p r oceso es u n p r ogr am a en ejecu ci¶
on
27
28
1. Un mensajero que les lleva y les trae mensajes.
2. Un micr¶
ofono para cada qui¶en y un altavoz de
uso com¶
un.
3. Localizadores para algunos y tel¶efonos para
otros.
4. Tel¶efonos para todo mundo.
ContactoS 38, 27{34 (2000)
y posteriormente, se describe una capa de env¶³o y recepci¶
on de mensajes utilizando esos conceptos. Esta secci¶
on concluye con un ejemplo de programaci¶
on distribuida utilizando el modelo de intercambio de mensajes.
2.1 Conceptos de base
La comunicaci¶
on por env¶³o y recepci¶
on de mensajes requiere del conocimiento de los siguientes
conceptos:
5. Un pizarr¶
on en el que todos pueden leer y
escribir.
Un enlace es la conexi¶
on que permite a un proceso comunicarse con otro. Con respecto al enlace es
importante conocer:
Dependiendo de los medios de comunicaci¶on de los
que se disponga, la manera en la que se llevar¶
a a
cabo el trabajo es distinta. Por ejemplo, si se opta por el medio 3, la comunicaci¶on ser¶a unidireccional entre algunos elementos, ya que s¶olo los que tienen tel¶efono enviar¶an mensajes. En el caso 2, los elementos tendr¶
an que considerar hablar en un cierto orden para que los mensajes sean comprendidos.
² El n¶
umero de entidades [n,m] (n entidades en
un extremo del enlace y m en el otro) involucradas en la comunicaci¶
on, a esto se le llama la cardinalidad del enlace y puede ser: [1,1], [1,n], o
[n,n].
Al dise~
nar una aplicaci¶on distribuida, tambi¶en es necesario tomar una serie de decisiones y una de las
mas importantes es la manera en la cual los procesos que forman la aplicaci¶on se van a comunicar y a
sincronizar. Como en el caso de la comunicaci¶on humana, existen varias maneras en las cuales los procesos se pueden comunicar. Las opciones mas utilizadas son el intercambio de mensajes y el uso de una
memoria compartida. El objetivo de este art¶³culo es
presentar y comparar ambos modelos.
El resto de este art¶³culo se estructura de la siguiente manera: en la secci¶on 2, presentamos el modelo de
env¶³o y recepci¶
on de mensajes. En la secci¶on 3, presentamos el modelo de memoria compartida. En ambos casos se ilustra el modelo con un ejemplo. En
la secci¶
on 4, se hace una re°exi¶on acerca de las ventajas y las desventajas de cada modelo desde diferentes puntos de vista: comprensi¶on, construcci¶
on
de aplicaciones, y e¯ciencia. Finalmente, presentamos nuestras conclusiones en la secci¶on 5.
2. Modelo de env¶³o y recepci¶
on de mensajes
As¶³ como el habla es el medio m¶as natural para que
los seres humanos se comuniquen; el env¶³o y la recepci¶
on de mensajes es el medio m¶as natural para permitir la comunicaci¶on entre un conjunto de procesos que se ejecutan en unidades de c¶omputo diferentes unidas por una red.
Para poder utilizar una capa de transmisi¶on de mensajes es necesario conocer una serie de conceptos de
base. Dichos conceptos se presentan a continuaci¶
on
² La capacidad del enlace es la cantidad de informaci¶
on que puede almacenar el mensaje. Si el
enlace no almacena mensajes se dice que es de
capacidad 0. Por otro lado, si almacena, es importante saber si la capacidad es limitada o ilimitada. Y si es limitada, >qu¶e pasa cuando esa
capacidad se agota?
² El sentido del enlace indica en qu¶e sentido se
pueden enviar los mensajes. Las posibilidades
son que sea unidireccional o bidireccional.
Una cardinalidad [x,y] y un sentido unidireccional
de x a y, denotan la posibilidad de comunicaci¶
on de
x emisores hacia y receptores.
El mensaje es la unidad de informaci¶
on que, a trav¶es
del enlace, se intercambia entre los procesos. Los
aspectos importantes a conocer de los mensajes en
un sistema son:
² El tipo de mensajes que se pueden transmitir
(voz, im¶
agenes, informaci¶
on, etc.),
² El tama~
no de los mensajes y si ¶este es ¯jo o
variable y
² El tipo de env¶³o de mensaje que se hace (por
ejemplo: valor o referencia).
Una vez establecido el enlace y armado el mensaje,
se realiza el env¶³o y la comunicaci¶
on se lleva a cabo.
El evento de comunicaci¶
on puede ser:
² S¶³ncrono, si para que la comunicaci¶
on se
efect¶
ue, se requiere que tanto el receptor como el emisor est¶en listos o As¶³ncrono, si ¶esta
no es condici¶
on necesaria.
>Memoria compartida o mensajes? Elizabeth P¶erez Cort¶es y Graciela Rom¶
an Alonso.
² Directo, si el mensaje llega directamente a la
entidad receptora o Indirecto, si se almacena en
un contenedor intermedio.
² Sim¶etrico, si el emisor especi¯ca qui¶en es el destinatario de su mensaje y el receptor a su vez
decide de qui¶en recibir o Asim¶etrico, si s¶
olo el
emisor nombra al receptor y el receptor recibe mensajes que le sean enviados por cualquier
emisor.
Un sistema de env¶³o y recepci¶on de mensajes se
puede caracterizar de acuerdo a los criterios de¯nidos previamente. Una vez que se conocen todos los aspectos del enlace, los mensajes y la comunicaci¶
on en un sistema de este tipo, se est¶
a en
posibilidades de elaborar la aplicaci¶on distribuida
con base en ¶el.
Por ejemplo, se sabe que el tel¶efono es un medio de
comunicaci¶
on en donde el enlace es [1,1], bidireccional y con capacidad de almacenamiento 0; los mensajes son orales de tama~
no variable y que se transmiten por valor; la comunicaci¶on es s¶³ncrona, directa y
asim¶etrica. Por otro lado, el localizador tiene un enlace unidireccional de cardinalidad [1,n] y con capacidad de almacenamiento limitada; los mensajes que
se transmiten son textuales, de tama~
no variable pero limitado y se env¶³an por valor; mientras que la comunicaci¶
on es as¶³ncrona, indirecta y asim¶etrica.
2.2 Las capas de transmisi¶
on de mensajes
Como hab¶³amos mencionado previamente, el modelo de env¶³o y recepci¶on de mensajes es el mas natural cuando se piensa en hacer comunicar procesos que
se ejecutan en m¶aquinas conectadas por una red. Esto explica que desde los primeros tiempos se hayan
hecho esfuerzos por construir servicios de env¶³o y recepci¶
on de mensajes. Estos servicios son capas de
software que presentan al usuario programador de
aplicaciones una interfaz simpli¯cada y que ocultan
las di¯cultades de lograr una transmisi¶on de mensajes con¯able y que garantice un orden de entrega. A continuaci¶on se caracteriza una de las herramientas m¶
as conocidas que ofrece tales servicios.
Una m¶
aquina virtual paralela: PVM
PVM, (Parallel Virtual Machine) es un sistema de
env¶³o y recepci¶on de mensajes que permite a una red
de m¶
aquinas heterog¶eneas ser usadas como una sola m¶
aquina paralela. Esta herramienta es una de
las mas utilizadas para de¯nir una m¶aquina virtual
paralela. Las funciones proporcionadas por PVM
permiten crear procesos autom¶aticamente sobre la
m¶
aquina virtual y permiten, mediante el intercambio de mensajes, la comunicaci¶on y sincronizaci¶
on de
estos.
29
En PVM los procesos son denominados tareas. Con
esta herramienta es posible de¯nir grupos de procesos permitiendo establecer enlaces de comunicaci¶
on con cardinalidades diferentes: [1,1], [1,n] y [n,1].
La comunicaci¶
on es directa, puede ser sim¶etrica
o asim¶etrica mientras que el env¶³o de un mensaje es as¶³ncrono y la recepci¶
on puede ser s¶³ncrona
o as¶³ncrona. Los mensajes tienen asociado un tipo, y son de talla limitada. En el env¶³o de un mensaje, la informaci¶
on se empaqueta en un bu®er y se desempaqueta a la recepci¶
on.
Algunas de las primitivas usadas en PVM son las
siguientes:
² pvm spawn(): la cual permite la creaci¶on
din¶
amica de procesos, asociando un identi¯cador u
¶nico a cada proceso.
² pvm psend(): usada para el empaquetamiento y env¶³o de un mensaje. Entre los par¶
ametros
de esta primitiva est¶
a involucrado el (los) identi¯cador (es) del (de los) proceso(s) al cual se
le(s) enviar¶
a el mensaje.
on y de² pvm precv(): usada para la recepci¶
sempaquetamiento de mensajes.
Entre los
par¶
ametros de esta primitiva es posible indicar el identi¯cador del proceso del cual se espera un mensaje o bien, indicar que cualquier mensaje puede ser recibido.
² pvm exit(): primitiva que permite a un proceso terminar y salir de PVM.
2.3 Una suma paralela usando env¶³o y recepci¶
on de mensajes
Ilustraremos el uso de un sistema de env¶³o y recepci¶
on de mensajes con un ejemplo muy simple en el
que m procesos cooperan para calcular la suma de
N n¶
umeros enteros.
En esta aplicaci¶
on se de¯ne un proceso coordinador quien se encarga de crear un n¶
umero (nprocs)
de procesos sumadores, entre los cuales dividir¶a el
trabajo. El coordinador env¶³a un mensaje a cada
sumador conteniendo un arreglo de tama~
no MaxDatos/nprocs de n¶
umeros (previamente capturados)
para que se realice la suma. Una vez transferidos los
datos, el coordinador queda en espera de los mensajes de cada sumador conteniendo las sumas parciales calculadas y conforme las va recibiendo, calcula la suma total y la imprime.
Por otro lado, cada proceso sumador, espera el
mensaje con el arreglo de n¶
umeros a sumar y una vez
recibido, realiza la suma y ¯nalmente, env¶³a el resultado al coordinador.
30
# include \pvm3.h"
#de¯ne MaxDatos 20
#de¯ne nprocs 4
#de¯ne numdatos (int) (MaxDatos / nprocs)
int buf[1];
int tida[nprocs], datos[numdatos];
main() // Proceso coordinador
int sum=0,i,k,cc;
/*Creaci¶
on de los procesos sumadores guardando su
identi¯cador en tida[i]) */
for (i = 0; i < nprocs; i++)
cc = pvm spawn(\sumador",NULL,0,"\,1,& tida[i]);
/*Env¶³o de los n¶
umeros a sumar a cada sumador */
for (i = 0; i < nprocs; i++)
for (k=0; k<numdatos ;k++) // captura de datos
scanf(\%d",&(datos[k]));
pvm psend(tida[i],2,datos,numdatos,PVM INT);
// env¶³o
g
ContactoS 38, 27{34 (2000)
3. Modelo de memoria compartida
Como mencionamos en nuestro ejemplo, un pizarr¶on
en donde todos los involucrados en un trabajo puedan leer o escribir informaci¶
on, es tambi¶en un medio de comunicaci¶
on. En este caso, los usuarios deben acordar una manera de utilizarlo que no ocasione con°ictos. Por ejemplo, si dos usuarios requieren leer un dato, pueden hacerlo de manera simultanea, sin embargo, si ambos pretenden cambiarlo, deben hacerlo de manera secuencial, es decir, uno despu¶es del otro.
Los mecanismos de sincronizaci¶
on que permiten a un
conjunto de procesos manipular recursos de manera no con°ictiva existen desde la creaci¶
on de los sistemas operativos multitarea . En general, los sistemas de memoria compartida utilizan los mecanismos
de sincronizaci¶
on m¶
as populares (sem¶
aforos, candados, barreras, etc.). A continuaci¶
on presentamos los
conceptos de base del modelo de memoria compartida. Posteriormente describimos gen¶ericamente los
sistemas de memoria compartida y ¯nalmente ilustramos su uso.
/*Recepci¶
on de las sumas parciales y c¶alculo de la
total*/
for (i = 0; i < nprocs; i++) f
cc = pvm precv(-1,-1,buf,1,PVM INT,0,0,0);
sum += buf[0]; g
3.1 Conceptos de base
La memoria compartida puede verse como un conjunto de variables accesibles para leerse o escribirse.
Desde el punto de vista de un programador de aplicaciones distribuidas (PAD), la memoria compartida se comporta como la memoria centralizada de una
computadora tradicional.
#include <pvm3.h>
#de¯ne MaxDatos 20
#de¯ne nprocs 4
#de¯ne numdatos (int)(MaxDatos/nprocs)
Una variable que va a ser utilizada por varios procesos es una variable compartida. La regi¶
on de c¶
odigo
de un proceso que manipula una variable compartida es denominada una secci¶
on cr¶³tica. Si en un
instante dado, m¶
as de un proceso ejecuta su secci¶
on cr¶³tica, es posible que haya con°ictos en la manipulaci¶
on de las variables compartidas. Para evitar los problemas, una secci¶
on cr¶³tica debe ser ejecutada en exclusi¶
on mutua. En otras palabras, s¶olo
un procesador a la vez puede manipular las variables compartidas.
printf(\La suma total es %dfgn",sum);
pvm exit(); //sale de PVM
exit(0);
g
main (int argc,char *argv[]) // Proceso bf sumador
int datos[numdatos],i,buf[1],cc; buf[0]=0;
/* Recepci¶
on de los n¶
umeros que le corresponde
sumar*/
cc
=
pvm precv(1,2,datos,numdatos,PVM INT,0,0,0);
for (i = 0 ; i < numdatos ; i++) //Realiza la suma
buf[0] += datos[i];
/*Env¶³o
de
la
suma
al
cordinador*/
pvm psend(pvm parent(),1,buf,1,PVM INT);
pvm exit(); //sale de PVM exit(0);
g
Un mecanismo que permite garantizar la exclusi¶on
mutua es el candado. Los procesos que comparten
variables se sincronizan a trav¶es de candados; el proceso que tiene el candado tiene el derecho a manipular las variables compartidas. Un proceso solicita un candado antes de entrar a una secci¶
on cr¶³tica
y lo libera al salir. Si el candado ha sido tomado previamente, el proceso que lo solicita debe esperar en una cola.
Adem¶
as de sincronizarse para garantizar el acceso en
exclusi¶
on mutua a las variables compartidas, los procesos que forman una aplicaci¶
on distribuida se sincronizan para noti¯car eventos. Por ejemplo, cuando un proceso A debe anunciar la terminaci¶
on de
>Memoria compartida o mensajes? Elizabeth P¶erez Cort¶es y Graciela Rom¶
an Alonso.
31
² Pedir y liberar candados (Tmk lock acquire y
Tmk lock release).
As¶³ como una serie de constantes que permiten identi¯car cada proceso Tmk proc id, y saber cu¶antos
procesos est¶
an activos Tmk nprocs.
En la secci¶
on siguiente ilustramos el uso y funcionamiento de la memoria compartida realizando la misma suma paralela descrita en la secci¶
on 2.3.
F ig ura 2 : M e mo ria V irtua l D istribuida .
su tarea a otro proceso B para que ¶este tome el resultado y siga su ejecuci¶on. En este caso se dice
que los procesos A y B se sincronizan. La barrera es un mecanismo que permite este tipo de sincronizaci¶
on. Un proceso que llega a una barrera se bloquea hasta que los otros procesos alcancen la misma barrera, en ese momento, todos contin¶
uan su
ejecuci¶
on.
3.2 Los sistemas de memoria compartida
Como ya mencionamos, una red de computadoras
no tiene memoria compartida, por ende, para permitir la construcci¶on de aplicaciones distribuidas utilizando este modelo de comunicaci¶on, es necesario simularla. Esta simulaci¶on es realizada por una capa
de software denominada Sistema de Memoria Virtual Distribuida (SMVD).
Dicho de una manera muy simple, un SMVD funciona de la siguiente manera: los procesos disponen
de un espacio virtual compartido (Figura 2) dentro del cual de¯nen las variables que van a utilizar. Cuando un proceso requiere utilizar una variable compartida, el SMVD investiga en d¶
onde se
encuentra y la trae a la memoria del proceso para que ¶este pueda utilizarla. Por supuesto, esta utilizaci¶
on se permite dentro de las reglas de accesos no
con°ictivos.
TreadMarksT M
TreadMarksT M es un SMVD construido en la Universidad de Rice, EUA. Este sistema permite declarar variables compartidas y proporciona primitivas para:
² Iniciar el sistema de memoria compartida y terminarlo (Tmk startup y Tmk exit).
² Pedir
y
liberar
memoria
compartida
(Tmk malloc y Tmk free) y para copiar un valor en las memorias privadas de los otros procesadores (Tmk distribute).
² Esperar en una barrera a los otros procesos
(Tmk barrier)
3.3 Una suma paralela usando memoria compartida
Considerando el modelo de memoria compartida, para efectuar la suma paralela, los procesos comparten una estructura (shared) que contiene el arreglo
(array) en donde est¶
an los datos, un entero (sum)
que contendr¶
a el resultado y un entero (turn) que
servir¶
a para la sincronizaci¶
on de los procesos. En
funci¶
on de la cantidad de n¶
umeros (arrayDim) y
de la cantidad de procesos (Tmk nprocs), se divide el trabajo de manera que cada proceso hace la suma de una secci¶
on del arreglo (contenida entre start
y end) y en cuanto termina agrega el resultado a la
suma global.
En este programa, el proceso coordinador inicializa
las estructuras de datos mientras los dem¶
as (sumadores) esperan en la barrera. Enseguida, cada proceso sumador calcula el rango del arreglo que le corresponde sumar. Posteriormente cada proceso sumador calcula la suma parcial y la agrega a la suma global (shared->sum). Finalmente, cuando todos los sumadores agregaron su resultado, el proceso coordinador imprime la suma global.
#include <stdio.h>
#include \Tmk.h"
#de¯ne Coordinador 0
struct shared
int sum;
int turn;
int* array;
*shared;
main(int argc, char **argv)
int start, end, i, p, arrayDim = 100;
Tmk startup(argc, argv);
/* El proceso coordinador inicializa las estructuras de datos */
if (Tmk proc id == Coordinador)
shared = (struct shared *) Tmk malloc(sizeof(shared));
if (shared == NULL)
Tmk exit(-1);
shared->array = (int *) Tmk malloc(arrayDim
* sizeof(int));
if (shared->array == NULL)
Tmk exit(-1);
32
/* Se inicializa el arreglo */
for (i = 0; i < arrayDim; i++)
scanf(\%d", shared->array[i]);
shared->turn = 0;
shared->sum = 0;
/* Y comparte el apuntador com¶
un con todos los procesos */
Tmk distribute(&shared, sizeof(shared));
g
Tmk barrier(0);
/* Cada proceso determina su rango del arreglo */
f
int id0 = Tmk proc id, id1 = Tmk proc id+1;
int perProc = arrayDim / Tmk nprocs;
int leftOver = arrayDim % Tmk nprocs;
start = id0 * perProc + id0 * leftOver / Tmk nprocs;
end = id1 * perProc + id1 * leftOver / Tmk nprocs;
g
Tmk barrier(0);
g
/* Calcula la suma local y se la agrega a la suma
global */ f
int mySum = 0;
for (i = start; i < end; i++)
mySum += shared->array[i];
/* Modi¯caci¶
on de la suma global */
Tmk lock acquire(0);
shared->sum += mySum;
Tmk lock release(0);
g
Tmk barrier(0);
if (Tmk proc id == Coordinador)
printf(\Sum is %dfgn", shared->sum);
Tmk free(shared->array);
Tmk free(shared);
g
Tmk exit(0);
g
4. Comparaci¶
on de los modelos de comunicaci¶
on
Una vez que hemos presentado los modelos de comunicaci¶
on discutiremos en esta secci¶on acerca de sus
cualidades y sus defectos desde la ¶optica de un programador de aplicaciones distribuidas.
4.1 Comprensi¶
on del modelo de comunicaci¶
on
En lo que respecta a la comprensi¶on del modelo de
comunicaci¶
on, ambos modelos representan una similitud con herramientas de comunicaci¶on usuales y
por lo tanto algunos de los conceptos de base son
f¶aciles de asimilar, sin embargo, se pueden observar las siguientes diferencias:
ContactoS 38, 27{34 (2000)
² Intercambio de mensajes: El env¶³o y la
recepci¶
on de mensajes se asemeja a la manera en que las personas comunican por algunos medios (tel¶efono), esto hace que los conceptos mensaje, env¶³o y recepci¶
on sean f¶
acilmente
asimilables.
Por otro lado, para programar una capa de
env¶³o y recepci¶
on de mensajes, se tienen que
asimilar una serie de conceptos nuevos que
pueden provocar una percepci¶
on compleja del
modelo.
Otra fuente de complejidad es la necesidad de
seleccionar de entre un gran n¶
umero de combinaciones disponibles, las caracter¶³sticas (del enlace, del mensaje y del evento de comunicaci¶on)
a utilizar.
² Memoria compartida: en el caso de las variables compartidas los conceptos son pocos y simples y la manera de evitar los con°ictos tambi¶en lo es. En este modelo la di¯cultad viene de
la comprensi¶
on de las herramientas de sincronizaci¶
on y su correcto uso.
4.2 Construcci¶
on de las aplicaciones
Al construir una aplicaci¶
on, un PAD debe tomar
en cuenta seg¶
un el modelo elegido, las siguientes
consideraciones:
² Intercambio de mensajes: Una de las di¯cultades en la construcci¶
on de aplicaciones distribuidas es la existencia de varios espacios de memoria (uno por m¶
aquina) que confronta al programador con la distribuci¶
on de los datos. El
programador debe tener en cuenta en d¶onde
est¶
an los datos, cu¶
ando se requiere intercambiar datos entre procesos, a qui¶en es necesario envi¶
arselos, y qu¶e debe de enviar. Un olvido
de parte del programador en este caso puede llevar a que los diferentes procesos tengan informaci¶
on incoherente e inducir ejecuciones err¶
oneas.
Esta situaci¶
on resulta inconveniente, especialmente en los casos en los que la tarea requiere de un alto grado de comunicaci¶
on, o la utilizaci¶
on de estructuras de datos complejas. En
este u
¶ltimo caso, por ejemplo cuando se requiere transferir un ¶
arbol, es necesario aplanar
la estructura para enviarla y reconstruirla a la
recepci¶
on.
² Memoria compartida: En el caso de la memoria compartida, el PAD tiene que identi¯car
las variables compartidas y asegurarse de que
toda manipulaci¶
on de dichas variables se hace en una secci¶
on cr¶³tica.
>Memoria compartida o mensajes? Elizabeth P¶erez Cort¶es y Graciela Rom¶
an Alonso.
Dependiendo de los mecanismos de sincronizaci¶
on proporcionados por la herramienta, esto
puede ser una labor m¶as o menos complicada.
Sin embargo, es tambi¶en cierto que un error en
el uso de las herramientas de sincronizaci¶
on puede inducir comportamientos err¶oneos.
En el trabajo reportado en [3] se enuncia que los
PAD cometen menos errores programando bajo el
modelo de memoria compartida.
4.3 E¯ciencia
En una aplicaci¶on distribuida programada con transmisi¶
on de mensajes, se transmiten s¶olo los mensajes
indispensables con la cantidad de informaci¶
on necesaria. Por otro lado, un SMVD est¶a construido sobre un servicio de intercambio de mensajes y para simular la memoria compartida, los componentes del SMVD intercambian mensajes. Por lo tanto, la cantidad de mensajes y de informaci¶
on transferida en un sistema de este tipo es superior a la
transferida en el caso del modelo a intercambio de
mensajes.
Durante la u
¶ltima d¶ecada se ha hecho mucho trabajo
de investigaci¶on para mejorar el rendimiento de los
SMVD y actualmente se cuenta con productos cuyos
rendimientos est¶an en el mismo rango de los de las
capas de transmisi¶on de mensajes .
Por ejemplo, un estudio realizado por los constructores de TreadMarksT M , hecho sobre una serie de aplicaciones distribuidas, encontr¶o que si bien, en todos los casos, PVM es m¶as e¯ciente, en un 40% de las
aplicaciones la diferencia entre ambos es de s¶
olo 10%
mientras que en el otro 40% la diferencia est¶
a entre un 10% y un 30%. El restante 20% est¶
a formado por aplicaciones en donde la cantidad de c¶
alculo
es muy d¶ebil con respecto a la comunicaci¶on y el rendimiento es muy malo para ambos modelos.
5. Conclusiones
Las aplicaciones distribuidas, compuestas por un
conjunto de procesos que cooperan para realizar una
tarea, forman una parte importante de las aplicaciones que se construyen hoy en d¶³a. Este tipo de aplicaciones permite obtener un mejor bene¯cio de las infraestructuras de c¶omputo actuales. Una de las decisiones importantes en el dise~
no de una aplicaci¶
on distribuida es el modelo de comunicaci¶on y sincronizaci¶
on que los procesos utilicen.
En este art¶³culo se presentan y comparan dos modelos: intercambio de mensajes y memoria compartida. Se implant¶o una misma aplicaci¶on usando las
Herramienta PVM y TreadMarksT M que siguen respectivamente los modelos antes dichos. La aplicaci¶
on consisti¶o en sumar en paralelo los elementos de
33
un vector de enteros, proporcionando al ¯nal el resultado de la suma.
En cuanto a simplicidad el modelo de memoria compartida presenta la ventaja de tener una menor cantidad de conceptos por asimilar que el modelo de
env¶³o y recepci¶
on de mensajes. En cuanto a la construcci¶
on de las aplicaciones, si los procesos comunican con mucha frecuencia o intercambian estructuras de datos complejas es m¶
as recomendable utilizar memoria compartida. Por otro lado, el modelo de env¶³o y recepci¶
on de mensajes observa mejores rendimientos en todos los casos.
Como modelo, la memoria compartida permite concentrarse m¶
as en la acci¶
on de comunicaci¶
on y menos en el medio. Esto favorece su preferencia para estudiar aspectos de tolerancia a fallas, cuando
los elementos defectuosos est¶
an en las computadoras y no en los canales.
De lo anterior podemos deducir que para elegir el
modelo de comunicaci¶
on y sincronizaci¶
on, es indispensable tomar en cuenta el per¯l de la aplicaci¶on.
Finalizamos mencionando que la mayor parte de las
aplicaciones distribuidas est¶
an construidas sobre capas de env¶³o y recepci¶
on de mensajes dado que este tipo de comunicaci¶
on se ha usado durante mucho tiempo y por ende, las herramientas de desarrollo est¶
an mucho mas maduras. Por otro lado, la relativa novedad del modelo de memoria compartida,
la poca difusi¶
on y la falta de herramientas de desarrollo hacen que la memoria compartida sea poco utilizada. Consideramos necesaria una amplia labor de difusi¶
on.
Bibliograf¶³a
1. Bershad B. N., Zekauskas M. J. et Sawdon
W. A., Midway: Shared Memory Parallel Programming with Entry Consistency for Distributed Memory Multiprocessor, (CMU-CS-91-170),
School of Computer Science, Carnegie Mellon
University, Pittsburgh, PA 15213, septiembre
1991.
2. Carter J. B., Bennett J. K. et Zwaenepoel W.,
\Implementation and Performance of Munin",
Proceedings of the ACM Symposium on Operating Systems (SOSP), vol 13 pp. 152-164, octubre 1991.
3. Chavez Navarro Sara, Memoria Virtual Distribuida v.s. Env¶³o y Recepci¶
on de Mensajes.,
Reporte Proyecto de Investigaci¶
on 2, UAMIztapalapa, 1999.
34
4. Coulouris G., Dollimore J & Kindberg T. Distributed Systems: Concepts and Principles, Addison Wesley, 1994.
5. Geist A., Beguelin A., Dongarra J., PVM 3
User's Guide and Reference Manual, 1994.
6. Honghui Lu, Sandhya Dwarkadas, Alan L.
Cox, Willy Zwaenepoel, Message Passing Versus Distributed Shared Memory on Networks of Workstations, Proceedings of the
1995 ACM/IEEE Supercomputing Conference San Diego, California, USA Diciembre 1995.
7. Johnson K. L., Kaashoek M. F. et Wallach D.
A., \CRL: High-Performance All-Sofware Distributed Shared Memory", Proceedings of the
15th ACM Symposium on Operating Systems.
Principles, pp. 213-227, 1995.
8. Keleher P., Cox L. A. et Zwaenepoel W., \Lazy
Release Consistency for Software Distributed
Shared Memory", Proceedings of the 19th. Annual International Symposium on Computer
Architecture, pp. 13-21, 1992.
ContactoS 38, 27{34 (2000)
9. Keleher P., Cox A. L., Dwarkadas S. et Zwaenepoel W., \TreadMarks: Distributed Shared Memory on Standard Workstations and Operating
Systems", In Proceedings of the Winter 1994
USENIX Conference, pp. 115-131, enero 1994.
10. Kohl (J. A.), Geist (G. A.).- XPVM 1.0 User's
Guide. Oak Ridge National Lab.
11. Li K, et Hudak P., \Memory Coherence in Shared Virtual Memory Systems", ACM Transactions on Computer Systems, Vol. 7(4), pp 321359. noviembre 1989.
12. Silberschatz A., Peterson J. L., Galvin P. B.
Sistemas Operativos: conceptos fundamentales.
Tercera Edici¶
on, Addison Wesley Iberoamericana, 1994.
cs
Descargar