Está en la página 1de 37

¿Qué es y qué no es un

sistema distribuido?
M.C. Juan Carlos Olivares Rojas
Distribuir
• Según el diccionario: “dividir una cosa entre
varios designando lo que a cada uno
corresponde”

• Problemática: muchas tecnologías aparentan


ser distribuidas como cómputo paralelo,
concurrencia, grid computing, P2P, sistemas
con múltiples procesadores o núcleos, etc.,
pero ¿realmente lo son?
¿Qué es un Sistema Distribuido
(SD)?
• “Es una colección de computadoras
independientes que aparecen ante los
usuarios del sistema como una única
computadora” [1] (Principio de transparencia)

• El objetivo de los SDs es descentralizar el


cómputo basándose en el paradigma de
“divide y vencerás”; logrando mayor eficacia,
mayor tolerancia a fallos, seguridad, mayor
velocidad, entre otros.*
¿Qué es un Sistema Distribuido
(SD)?
• Para lograr la distribución del cómputo se
necesitan de diversas entidades que puedan
atender una determinada cantidad de
procesos en un momento determinado.

• Según [2] la mayor problemática de los SDs


es la gran heterogeneidad tanto en software y
en especial en hardware, ya que se necesita
de mucho esfuerzo para lograr la
transparencia.
Arquitecturas de cómputo
• Taxonomía de Flynn:
– SISD (Single Instruction Single Data) Procesador
único.
– SIMD (Single Instruction Multiple Data).
Procesadores vectoriales (multimedia)
– MISD (Multipe Instruction Single Data). No
implementada

– MIMD Multiple Instruction Multiple Data. Cómputo


distribuido
Cómputo Distribuido
• La distribución del cómputo puede realizarse
de diversas formas de acuerdo a su grado de
acoplamiento en:
– Fuertemente acopladas: Multiprocesadores
(memoria compartida). UMA (Uniform Memory
Acces)
– Débilmente acopladas: Multicomputadoras
(memoria privada). NUMA (Non Uniform Memory
Access)
Sistemas multiprocesadores
• Son sistemas que tienen dos o más
procesadores (CPU), comparten las misma
memoria (espacio de direcciones).

• Los sistemas multinúcleos es la nueva


tendencia en el desarrollo de sistemas
multiprocesadores. En un solo chip se tienen
varios procesadores (no es nada nuevo bajo
el sol).
Sistemas multiprocesadores

CPU 1 CPU 2 … CPU n


N1 Nn

Memoria CPU

Tarjeta madre Memoria

Tarjeta madre

Modelo de n procesadores
Modelo de n núcleos
Sistemas multicomputadoras
• Son sistemas donde cada unidad de proceso
es autónoma e independiente de las demás
pero trabajan de manera conjunta.

• La interconexión de unidades de proceso se


hace a través de redes de computadora de
preferencia de altas velocidades.

• Este es el concepto más estandarizado de un


SD.
Sistemas Distribuidos
• Generalmente están asociado al modelo
cliente/servidor (c/s). Muchos servicios de Internet
siguen este modelo: Web, e-mail, etc.

• En el modelo c/s, el proceso cliente realiza


peticiones de procesamiento al proceso servidor,
realizando éste último el trabajo pesado.

• Existen otros modelos como P2P (par a par), cluster


y grid computing.
Sistemas Distribuidos
Cliente 1
Solicitud .
Cliente Servidor
Servidor .
Respuesta
Cliente n

Modelo Cliente/Servidor Tradicional Modelo Cliente/Servidor Concurrente

Proxy en Proxy en
Cliente el lado Cliente
el lado
cliente servidor

Modelo Cliente/Servidor de n capas


Sistemas Distribuidos
C2 C0
Coordinador

C1
C1 … Cn
C2
Cn
P2P Cluster
Simétrico Asimétrico

Planificador Planificador Planificador


CPU CPU . CPU
Grid computing Memoria Memoria . MEMORIA
Disco DISCO Disco
C1 C2 . Cn
Tecnologías de Sistemas Distribuidos
• Sockets (API Berkeley, WinSocks) C, Java, etc.
• RPC (Remote Procedure Call) C
• RMI (Remote Method Invocation) Java
• DCOM (Distributed Component Object Model)
Propietario de Microsoft
• CORBA (Common Object Request Broker
Architecture) C, C++, Java, etc
• .NET Remoting C#, C++, J#, etc.
• Servicios Web (SOA), XML (SOAP, WSDL, UDDI)
Sistemas Distribuidos
• P2P (Peer to Peer) los procesos son totalmente
descentralizados, funcionan como clientes y
servidores a la vez, existen diversas arquitecturas
[3].

• Cluster es una agrupación de computadoras


intercomunicadas entre sí a través de un nodo
central y cuyo objetivo es realizar una tarea
específica.

• Grid computing es muy parecido a P2P y al cluster.


Sistemas Distribuidos
• Grid computing se parece al cluster en que
consisten en una asociación de
computadoras con la única diferencia de que
no existe un nodo centralizador. Está
característica lo asemeja a P2P [4].

• La idea del grid es que el poder de cómputo


siempre esté presente a semejanza de la red
eléctrica.
¿Es el cómputo paralelo un sistema
distribuido?
• Sí y No. Depende de la implementación.

• Los objetivos de la programación en paralelo


de acuerdo con [5] son:
– Reducir el tiempo de procesamiento utilizado por
un algoritmo convencional
– Reducir la complejidad del algoritmo
Paralelismo
A P1

B P2 Homoparalelismo

A B C D
C P3

D P4

A P1

B P2
A B C D Hetereoparalelismo
C P3

D P4
Paralelismo
• El problema del paralelismo radica en que
muchos algoritmos no pueden paralelizarse
(son serializable o secuenciales) [6].

• Existen dos tecnologías para realizar


paralelismo:
– PVM (Parallel Virtual Machine) [7]
– MPI (Message Parking Interface) [8][9][10]
Algoritmo paralelos
for(int i = 0; i < 4; i++)
{
aleatorio(i);
}

aleatorio(1)  micro1
aleatorio(2)  micro2
aleatorio(3)  micro3
aleatorio(4)  en espera

• Compilador optimizado. Sistemas Operativos


optimizados
Algoritmos paralelos
• Instrucciones como while son más difíciles de
paralelizar por que depende de la condición.

• No siempre los compiladores pueden


paralelizar de manera automática un
algoritmo.

• En algunas ocasiones se invierte más tiempo


tratando de paralelizar un algoritmo que
ejecutándolo de manera secuencial.
Algoritmos paralelos
//Procesador uno //Procesador uno
for( i=0; i<N/2; i++) for( i=0; i<N/2; i++)
{ {
a[i]= c+i; a[i]= c+i;
} }

//Procesador dos //Procesador dos


for( ; i<N; i++) for( i = N/2; i<N; i++)
{ {
a[i]= c+i; a[i]= c+i;
} }
Algoritmos paralelos
A[0] = C; • ¿Por qué no se puede
paralelizar?
//Procesador uno
for( i=1; i<N/2; i++) • Por que el segundo
{ proceso depende del
resultado del primero.
a[i]= a[i-1]+1;
}
• Si se puede si se encuentra
un algoritmo que permita
//Procesador 2 encontrar el valor de a[N/2]
for( i=N/2; i<N; i++) directo.
N /2
{

}
a[i]= a[i-1]+1; ∑i
i =C
Caso práctico MPI
• LAM/MPI, MPICH, MPICH2

• mpd –ncpus=procesadores &


• mpdtrace -1

• mpicc holamundo.c –o holamundo


• mpirun –np 10 ./holamnudo
Holamundo.c en MPI
#include <stdio.h>
#include “mpi.h”
int main(int argc, char **argv)
{
int procesos, rango, tam;
char nombre[MPI_MAX_PROCESSOR_NAME];
MPI_Iinit (&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &procesos);
MPI_Comm_rank(MPI_COMM_WORLD, &rango;
MPI_Get_processor_name(nombre, &tam);
MPI_barrier(MPI_COMM_WORLD);
printf(“Hola, mudo!, soy %d de %d y me ejecuto en:%s\n”, rango,
procesos, nombre);
MPI_Finalize();
return 0;
}
Esquema de un programa en MPI
Esquema de un programa en MPI
/*Cabecera de MPI*/
#include <mpi.h>
int main(int argc, char **argv)
{
int quiensoy, tamano;
MPI_Status estado;
/*Inicializamos MPI*/
MPI_Init(&argc, &argv);
/*Preguntamos quienes somos*/
MPI_Comm_rank(MPI_COMM_WORLD, &quiensoy);

/*Nos esperamos hasta quetodos hayan inicializado MPI*/


MPI_Barrier(MPI_COMM_WORLD);
/*Preguntamos cuanto somos*/
MPI_Comm_size(MPI_COMM_WORLD, &tamano);
/*PROGRAMA*/
Esquema de un programa en MPI
if(quiensoy == root)
{
/*Inicialización estrructuras repartidor
Reparte tareas
Espera resultados
Visualiza resultados*/
}
else
{
/*recibe la tarea
realiza cálculos
manda resultados*/
}
/*Finaliza el programa*/
MPI_Finalize();
exit(0);
}
¿Existe un rendimiento extra al
utilizar multiprocesadores?
• Las aplicaciones deben estar optimizadas para
poder ejecutarse en diferentes procesadores.

• Algunos sistemas operativos permiten ejecutar hilos


o procesos hijos en diversos procesadores

• El rendimiento no es del todo proporcional a la


cantidad de procesadores (un sistema con 4
procesadores no es 4 veces mejor que un sistema
de un solo procesador).
¿No existe cómputo distribuido en un
único procesador?
• Formalmente no, se tiene el concepto de
concurrencia y multitarea.

• En el pasado las computadoras sólo podían


realizar una tarea a la vez. Existía mucho
tiempo muerto al acceder recursos

• Se reparte el tiempo de CPU aparentando


que varios procesos se ejecutan al mismo
tiempo.
¿No existe cómputo distribuido en un
único procesador?
• Se debe tomar en cuenta la comunicación
interprocesos (IPC) el cual consiste de
mecanismo para controlar los procesos que
se ejecutan (sockets, semáforos, colas, etc.)

• Es posible ejecutar n procesos distribuidos en


una sola computadora, ya que cada proceso
tiene su propio espacio de direcciones y
cuentan con una interfaz de red local.
Conclusiones
• SD es aquel cuyas entidades de
procesamiento son autónomas,
independientes, no comparten memoria y
están interconectadas por una red de
computadoras (pudiendo estar distribuidas
geográficamente alrededor del mundo)

• Algunas tecnologías no son propiamente


distribuidas. El uso de sistemas distribuidos y
tecnologías afines va en amplio aumento.
¿Preguntas?
Referencias
• [1] A. Tanenbaum, “Sistemas Operativos
Distribuidos”, Prentice Hall, México, 1996, pp. 617,
ISBN: 0-13-219908-4

• [2] G. Colouris, et al., “Sistemas Distribuídos.


Conceptos y Diseño”, tercera edición, Pearson
Addison Wesley, Espana, 2005, pp. 726, ISBN: 84-
7829-049-4

• [3] R. Millán, “Domine las redes P2P”, Alfaomega,


México, 2006, ISBN: 970-15-1206-5, pp. 330.
Referencias
• [4] C. Pérez, “Oracel 10g. Administración y
Análisis de Bases de Datos”, Alfaomega Ra-
Ma, México, 2005, ISBN: 970-15-1102-6, pp.
671

• [5] G. Salazar y V. Ayala Ramírez,


“Programación en paralelo en sistemas
multiproceso”, VI CIECE, Morelia, Michoacán,
México, 1996, pp. 279-285.
Referencias
• [6] R. Sedgewick, “Algoritmos en C++”,
Pearson Educación, México, 2000, ISBN:
968-444-401-X, pp. 726.

• [7] M. Farías, P. Rayon y M. Lazo,


“Programación paralela de un algoritmo para
el cálculo de testores con PVM”, Temas
selectos (selected works ) de investigaciñon
C.I.C. 1997, pp. 118-125, ISBN: 970-18-
3427-5
Referencias
• [8] S. Gómez, “Programación paralela(I)”,
revista sólo programadores, año 12, segunda
época, no. 135, España, pp. 54-60.

• [9] D. Santo, “Message Passing Interface(II)


Configurando y compilando MPI”, revista
Mundo Linux, año VIII, no. 90, pp. 42-47

• [10] D. Santo, “Message Passing Interface(III)


Programando para MPI”, revista Mundo
Linux, año VIII, no. 91, pp. 28-33.
Contacto
• E-mail: jcolivar@itmorelia.edu.mx
• MSN: juancarlosolivares@hotmail.com
• Skype: juancarlosolivares

• Instituto Tecnológico de Morelia


• Departamento de Sistemas y Computación
• Av. Tecnológico 1500 Col. Lomás de
Santiaguito
• Morelia, Michoacán, México
Curriculum Vitae
• M.C. en Ciencias de la Computación, CENIDET
2006
• Ing. Sistemas Computacionales, I.T. Morelia

• Profesor tiempo parcial I.T. Morelia


• Profesor tiempo parcial UNID Morelia

• Áreas de investigación: Sistemas Distribuidos,


Cómputo Móvil, Redes Inalámbricas, Base de Datos
y Sistemas Empotrados.

También podría gustarte