Title: Creacin de Procesos y Ejecucin
1 SISTEMAS DISTRIBUIDOS Y PARALELOS -2006- Dto. de
informática UNSL Argentina
2UNIDAD Nro. Pasaje de Mensajes 1
-Característica del Pasaje de Mensajes 2 -Máquina
Virtual Paralela (PVM) 3 -Programación Paralela
con Pasaje de Mensajes 4 -Message Passing
Interface (MPI)
3UNIDAD Nro. Pasaje de Mensajes (1era. Parte)
1-Características del Pasaje de
Mensajes 2-Máquina Virtual Paralela (PVM) 2.1-
Demonio PVM - Creación de Procesos 2.2- Opciones
de la librería (información, comunicación entre
pares de procesos, grupos de procesos,
comunicaciones colectivas, sincronización) 2.3-
Ejemplos
4PASAJE DE MENSAJES
- Modelo de Pasaje de Mensajes
- procesos que colaboran para resolver un problema
- espacios de memoria independientes
- coordinación y comunicación por medio de Mensajes
- Factible y apropiado
- en multiprocesadores
- en multicomputadores
- en redes de computadoras
5CARACTERÍSTICAS DEL PASAJE DE MENSAJES
- Programabilidad
- La tarea de programación es pesada ya que todos
los detalles de distribución de datos,
planificación y comunicación entre las tareas
queda en manos del programador. - Esta responsabilidad incluye el balance de carga,
replicación de datos y mantenimiento de la
coherencia - Los programas de pasaje de mensajes son propensos
a error y son difíciles de depurar
6CARACTERÍSTICAS DEL PASAJE DE MENSAJES
- Eficiencia
- Si el programador tiene suficiente tiempo para
depurar su programa, puede lograr acercarse tanto
como se pueda a una solución óptima (todo queda
en manos del programador) - En aplicaciones de intensivo cómputo, la
eficiencia es la principal razón de la
predominancia del pasaje de mensajes sobre la
programación de memoria compartida -
7CARACTERÍSTICAS DEL PASAJE DE MENSAJES
- Portabilidad
- Los programas se pueden ejecutar en SMP, Máqs.
secuenciales y en Cluster de SMP
8ESTRUCTURA GENÉRICA
- Estructura Básica de un Algoritmo Paralelo PM
- 1º Reparto de tareas y datos
- 2º Procesamiento Paralelo
- 3º Reunión y Combinación ? Resultados
- Organización del Algoritmo Paralelo
- organización maestro-esclavos
- organización nodos iguales con líder
- Modelos de escritura de los programas
- modelo MPMD
- modelo SPMD
9CREACIÓN DE PROCESOS
- Existen dos métodos para crear y comenzar la
ejecución de procesos - 1) Creación Estática
- todos los procesos son especificados a priori
de la ejecución - el sistema ejecutará con un número fijo de
procesos - la creación se realiza a nivel de la línea de
comando - Ejemplo MPI
10CREACIÓN ESTÁTICA DE PROCESOS
- Modelo de ejecución es generalmente SPMD
11CREACIÓN DINÁMICA DE PROCESOS
- 2) Creación Dinámica
- los procesos pueden ser creados y sus ejecuciones
iniciadas durante la ejecución de otros procesos - los procesos pueden ser destruidos dinámicamente
- la creación y destrucción se realiza mediante
constructores o llamadas a librerías que provean
la funcionalidad paralela - la creación y destrucción puede ser realizada
condicionalmente, por lo que el número de
procesos puede variar durante la ejecución de un
programa - Ejemplo PVM
12CREACIÓN DINÁMICA DE PROCESOS
- Modelo de ejecución es generalmente MPMD
13PASAJE DE MENSAJES
- Un pasaje de mensajes se basa en la siguientes
formas básicas de primitivas o llamadas al
sistema - send(x, id_destino)
- recv(y, id_fuente)
- Estas llamadas son comunicaciones entre pares de
procesos (pairwise). - También se pueden establecer comunicaciones
colectivas, entre un grupo de procesos
14OPCIONES DE PROGRAMACIÓN
- Diseñar y emplear un lenguaje de programación
paralelo 'ad hoc' - 2. Extender la sintaxis y las palabras reservadas
de un lenguaje secuencial de alto nivel - 3. Recurrir a un lenguaje secuencial de alto
nivel proporcionando una librería de funciones
para paso de mensajes.
15MAQUINA VIRTUAL PARALELA
16QUE ES LO NUEVO ?
- PVM es un programa que permite conectar máquinas
heterogéneas, tanto paralelas como secuenciales,
para que trabajen como un recurso computacional
único.
17CARACTERISTICAS
- Heterogeneidad
- Escalabilidad
- Múltiple representación de datos
- Tolerancia ante fallos.
18La plataforma PVM se compone de dos partes
- Un demonio pvmd que provee la conectividad de
la máquina - Librerías con procedimientos que proveen la
funcionalidad de pasaje de mensajes
19EL DEMONIO
- pvmd debe estar corriendo en todas las
computadoras que constituyan la máquina virtual. - Un usuario que desea ejecutar una aplicación PVM
ejecuta primero el demonio en una única máquina,
y éste se encarga de activar el resto de demonios
de las máquinas que forman la PVM
20MAQUINA VIRTUAL PARALELA
Estación de trabajo
pvmd
Prog (.exe)
Estación de trabajo
Estación de trabajo
21LIBRERIA
- Control de procesos
- Crear, enviar y recibir mensajes
- Información del sistema
- Configuraciones dinámicas (añadir y eliminar
-
procesadores) - Señalización
- Mensajes de error
- Empaquetar datos en mensajes
- Gestionar grupos de procesos
22Creación de Procesos y Ejecución
- Organización master - slave.
-
- Comenzar un nuevo proceso PVM
- nrop pvm_spawn(tasks, argv, flag, where,
ntasks, tids) - Terminar un proceso PVM
- pvm_exit()
-
23Información
- Conocer el ID de una tarea (proceso) PVM
-
- tid pvm_mytid() Retorna ident. de tarea
- tidp pvm_parent() Retorna ident. de
proceso - que hizo spawn o 0.
24Rutinas De Pasaje De Mensajes Básicas
-
-
- Los programas se comunican por pasaje de mensajes
- Para el envío y recepción de mensajes cada
proceso dispone de buffers para realizar la
operaciones -
25Enviar Un Mensaje
- ? 3 pasos
- bufidpvm_initsend(PvmDataDefault) Requerir un
Buffer - info pvm_pkint(int np, int nitem, 1) Llenar
el buffer - info pvm_pkstr(char c) con
los datos - info pvm_pkfloat(float f, int nitem, 1)
del mensaje - info pvm_send(tid, msgtag)
Enviar en mensaje
No Bloqueante
26Recibir Un Mensaje (1)
- ?2 pasos
- bufid pvm_recv(tid, msgtag) Espera y recibe un
mensaje - Espera hasta que un mensaje con rótulo msgtag
haya arribado - desde tid
- Cuando el mensaje arriba se crea un nuevo buffer
de recepción - donde se ubica el mensaje
-
- / Si msgtag es 1, recibe cualquier mensaje
/ - / Si tid es 1, recibe desde cualquier
fuente /
Bloqueante
27Recibir Un Mensaje
-
- info pvm_upkint(int np, int nitem, 1)
Recuperar el mensaje - info pvm_upkstr(char c) desde el buffer
- info pvm_upkfloat(float f, int nitem, 1)
- .....
- Buffer de datos activo de recepción puede
contener - múltiples tipos de datos (entero, flotante,
double, char, - byte, etc.)
28Recibir Un Mensaje(2)
- bufid pvm_nrecv(tid, msgtag) Recibe una
mensaje -
- Si el mensaje requerido no ha arribado desde tid
entonces retorna - bufid 0
- Cuando el mensaje arriba se crea un nuevo buffer
de recepción donde se - ubica el mensaje
- / Si msgtag es 1, recibe cualquier mensaje /
- / Si tid es 1, recibe desde cualquier fuente
/
No Bloqueante
29Ejemplos
30hello.c (1)
- include ltstdio.hgt
- include "pvm3.h"
- main()
-
- int i, cc, t, tid
- char buf100
- printf(Soy el proceso local tx\n",
pvm_mytid()) - cc pvm_spawn("hello_other", (char)0, 0,
"",1, tid) - if (cc1)
- cc pvm_recv(-1, -1)
- pvm_upkstr(buf)
- printf( s\n",buf)
- else
- printf(No se puede comenzar
hello_other\n) - pvm_exit()
- exit(0)
-
31hello_other.c (1)
- include "pvm3.h"
- main()
-
- int ptid
- char buf100
- ptid pvm_parent()
- strcpy(buf, "Hola mundo! desde ")
- gethostname(buf strlen(buf), 64)
- pvm_initsend(PvmDataDefault)
- pvm_pkstr(buf)
- pvm_send(ptid, 1)
- pvm_exit()
- exit(0)
32hello.c (2)
- include ltstdio.hgt
- include "pvm3.h"
- main()
-
- int i, cc, t, tid
- char buf100
- printf(Soy el proceso local tx\n",
pvm_mytid()) - cc pvm_spawn("hello_other", (char)0, 0,
"",1, tid) - if (cc1)
- cc pvm_recv(-1, -1)
- pvm_bufinfo(cc, (int)0, (int)0, t)
- pvm_upkstr(buf)
- printf(tx s\n", t,buf)
- else
- printf(No se puede comenzar
hello_other\n) - pvm_exit()
- exit(0)
-
33hello.c (3) completar!
- include ltstdio.hgt
- include "pvm3.h"
- main()
-
- int i, cc, t, tid10
- char buf100
- int ntask 4
- printf("Yo soy el proceso tx\n", pvm_mytid())
- cc pvm_spawn("hello_other", (char)0, 0,
"",ntask, tid) - /////
- pvm_bufinfo(cc, (int)0, (int)0, t)
- pvm_upkstr(buf)
- printf(desde tx s\n", t,buf)
- ////
- pvm_exit()
- exit(0)
34Grupos Dinámicos de procesos
- Las tareas pueden formar grupos y subgrupos entre
todos los procesos (procesadores virtuales) -
- Una tarea crea o se reúne a un grupo
- name pvm_joingroup(char group)
35Grupos Dinámicos de procesos
36Grupos Dinámicos de procesos
name contiene la instancia dentro del grupo de
tareas
37Comunicación Colectiva
- Un mensaje puede ser distribuido a todos los
miembros del grupo excepto a si mismo - info pvm_bcast(char group, int msgtag)
38Sincronización
- Suponga que un grupo de procesos está computando
valores y en algún punto debe esperar hasta que
todos los procesos hayan alcanzado un punto de
referencia en sus computaciones. - El mecanismo básico que implementa esta situación
se denomina barrier
39Sincronización
- info pvm_barrier(char group, int count)
40Grupos Dinámicos de procesos
Una tarea se retira de un grupo
info pvm_leavegroup(char group)