unidad 4. introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/pcpa/unidad4pm.pdfva la...

37
Unidad 4. Introducción a los sistemas distribuidos

Upload: others

Post on 19-Nov-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

Unidad 4. Introducción a los

sistemas distribuidos

Page 2: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

� En el capítulo anterior se mostraron los mecanismos para sincronización entre procesos/hilos que comparten el mismo espacio de direccionamiento y la forma de concurrencia se refiere principalmente a alternancia en el tiempo (i.e. mediante cambios de contexto en una política de tiempo compartido).

� Aún cuando dos o más hilos en espacios de direccionamiento distintos no pueden interferir entre sí respecto a sus variables y por tanto no podrán ocurrir condiciones de contención, necesitan sincronizar su ejecución y establecer comunicación.

� Por ejemplo, en el caso de una pareja de productor-consumidor residiendo en máquinas separadas, los elementos producidos por el consumidor necesitan enviarse al consumidor, el cual, debe esperar (bloquearse) si el buffer (de tamaño limitado) está vacío, mientras que el productor debe esperar si el buffer está lleno.

Page 3: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

� Sin embargo, en general los hilos que se encuentran en tareas de memoria separadas no pueden utilizar semáforos o monitores para sincronizarse o comunicarse.

� En éste capítulo discutiremos el mecanismo de paso de mensajes el cual permitirá establecer comunicación y a su vez sincronización de hilos geográficamente separados, pero inclusive también puede utilizarse para coordinar hilos dentro del mismo espacio de direccionamiento, funcionando por tanto como una forma de memoria compartida.

� Primero discutiremos las diferentes presentaciones o formas de paso de mensajes y después mencionaremos las bases para la interacción en el modelo cliente/- servidor.

Page 4: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

Tipos de comunicación

� Los constructores de sincronización revisados hasta el momento están basados en la lectura y escritura de variables compartidas. Como consecuencia, son más utilizados en programas concurrentes que se ejecutan en procesadores que comparten memoria.

� Las arquitecturas de memoria distribuida son ahora muy comunes. Estos incluyen multicomputadorasde memoria distribuida. En una arquitectura distribuida, los procesadores tienen su propia memoria privada e interactúan por medio de la comunicación en red.

Page 5: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

� Por esto, los procesos no pueden comunicarse directamente por variables compartidas, necesitan

intercambiar mensajes. Con el paso de mensajes, los procesos comparten canales.

Page 6: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

� El envío de un mensaje de un proceso a otro involucra el movimiento de información de un espacio de direccionamiento a otro.

� Los programas concurrentes que emplean el paso de mensajes son llamados programas distribuidos, porque los procesos pueden distribuirse a través de los procesadores de una arquitectura de memoria distribuida.

Page 7: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

� El paso de mensajes puede ser síncrona y asíncrona. El

término síncrono se usa para rutinas que regresan cuando la transferencia del mensaje se ha terminado.

Page 8: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

� La comunicación asíncrona está determinada por el momento

en que se regresa el control. En este tipo de comunicación la

primitiva send no necesariamente debe estar sincronizada con una primitiva receive y viceversa.

Page 9: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

� Las primitivas fundamentales para transmisión de mensajes entre procesos son

1. send(destino, mensaje)

2. receive(origen, mensaje)

� en donde destino y origen indican las direcciones hacia donde sedirige el mensaje y de donde es originado, respectivamente; mensaje es una referencia al objeto que contiene el mensaje. Los términos canal, puerto y buzón describen los medios en donde los mensajes se envían y de donde se reciben.

Page 10: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

� Existen 4 aspectos de diseño principales para definir al sistema de paso de mensajes:

1. Con o sin bloqueo: estos aspectos de diseño a menudo se denominan también modalidad sincróna y asincróna respectivamente

Si las operaciones de recepción son bloqueadoras y no hay mensajes disponibles, el receptor se bloquea hasta que un mensaje llegue.Si las operaciones de emisión son bloqueadoras el emisor se bloque si no hay algún receptor listo para recibir el mensaje. Si las operaciones de emisión no son bloqueadoras, el control se regresa inmediatamente, ya que el mensaje ha sido encolado por el sistema para paso de mensajes.

Si las operaciones de recepción no son bloqueadoras, se regresa un indicador de fallo si no hay mensaje disponible.

Page 11: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

� Los procesos comparten canales para realizar el paso de mensajes, los cuales pueden considerarse como una forma extendida de referencias: el envío de un mensaje es análogo a un proceso realizando un asignamiento remoto de un valor a una variable que se encuentra en otro espacio de direccionamiento. Si los send son bloqueadores entonces el proceso emisor se espera hasta que se realice el asignamiento remoto.

� El paso de mensajes asíncrono es una extensión o ampliación a las operaciones sobre semáforos P y V para incluír datos.

� Si ambas operaciones send y receive son bloqueadoras se dice que ocurre una forma de encuentro simple (simple redezvous) cuando el mensaje pasa del emisor al receptor ( de información unidireccional, ya que los hilos respectivos coinciden en puntosespecíficos de su código a la vez).

Page 12: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

� Se dice que ocurre un encuentro extendido (extended redezvous) si el emisor realiza una operación send bloqueadora seguida de un receivetambién bloqueadora, y por su parte el receptor realiza un receivebloqueadora seguido por un send bloqueadora (i.e. ocurren dos encuentros simples coordinados inmediatos).

� A menudo, a ésta forma de encuentro extendido se le denomina también RPC: invocación a procedimientos remotos, particularmente si el emisor y el receptor están en máquinas distintas conectadas por una LAN y si un hilo nuevo se crea en la máquina remota (i.e. hacia donde va la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto a beneficio del emisor.

� El soporte para ofrecer encapsular los detalles de la transmisión, de tal forma que para el programador asemeje una invocación a procedimiento convencional, lo ofrecen generalmente bibliotecas o paquetes para RPC.

Page 13: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

� En resumen, una forma de comunicación es sincróna si el emisor y receptor deben coincidir en el tiempo para el intercambio de los mensajes (una

forma de apretón de manos), mientras que se trata de tipo asincróna si el emisor continúa con la

ejecución de las siguientes instrucciones tras emitir el mensaje, el cual podrá no tener el mismo orden

respecto a otros mensajes que se hayan enviado, y el destinatario lo consultará eventualmente al revisar su buzón.

Page 14: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

� 2. Con o sin buffer: una operación send sin buffer provoca bloqueo hasta que un hilo receptor ejecute un receive. En contraste, una operación send con buffer generalmente no provoca bloqueo, pero puede ocurrir un límite en el tamaño del buffer sobre el cual el emisor se bloquee. En realidad se tienen las siguientes variantes, siendo combinaciones factibles todas excepto (b)/(c), (c)/(b) y (c)/(c).

Para send: (a) Con bloqueo: espera por el receptor ó un receptor ya está esperando. (b) Con buffer, sin bloqueos: el mensaje es almacenado en el buffer pero el

receptor no necesariamente lo ha recogido. (c) Sin buffer, sin bloqueo: se regresa un error si no hay receptor listo o esperando,

regresa `ok' si el mensaje se envió y ha sido recibido.

Para receive: (a) Con bloqueo: espera por un emisor (mensaje) (b) Con buffer, sin bloqueo: regresa error si no hay mensaje , de lo contrario

regresa `ok' (c) Sin buffer, sin bloqueo: regresa un error si no hay emisor esperando o listo,

regresa `ok' si el mensaje se envió y ha sido recibido.

Page 15: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

3. Aspectos de Nombrado/ Direccionamiento de mensajes: se deben responder las pregunta: ¿cómo establece la dirección del proceso receptor el proceso emisor? ¿cómo especifica el proceso receptor la fuente u origen deseado del mensaje? Para ello, se establece la noción de canal, puerto ó buzón antes mencionado, de tal manera que tanto el emisor como el receptor se refieren al canal en sus operaciones de comunicación:

compartidos por el emisor y receptor:

channel c;

emisor: receptor:

send(c, msg); msg = receive(c);

� A un canal compartido por un único emisor y único receptor se denomina enlace uno a uno entre 2 hilos.

Page 16: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

4. Compartimiento de canales por múltiples procesos: si el aspecto anterior (i.e. compartir canales) se extiende a varios procesos, se pueden tener

� múltiples emisores, un receptor: muchos a uno,

� múltiples receptores, un emisor: uno a muchos,

� múltiples receptores, múltiples emisores: muchos a muchos.

Page 17: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

Origen de Paso de Mensajes

� Se emplean en sistemas que no comparten reloj o memoria y por tanto no es posible la comunicación entre procesos mediante variables compartidas.

� La forma natural de comunicación es hacer que los procesos intercambien mensajes entre ellos con las

primitivas básicas de envio(send) y recepción(receive).

� Permite la portabilidad de las soluciones para diferentes arquitecturas.

Page 18: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

Inconvenientes

� Las comunicaciones se hacen mediante la

red lo que puede ocasionar:

� Perdida de mensajes

� Llegada de mensaje desordenados

� Diferencia de rendimiento

Page 19: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

Identificación en el proceso de comunicación

� Se entiende como la forma en que el emisor indica a quien va dirigido el mensaje� Comunicación directa: se caracteriza porque el emisor identifica explícitamente al

receptor del mensaje en la operación de envío. El receptor identifica el emisor del mensaje.

SintaxisSend(A, mensaje)Receive(B, mensaje)

� Comunicación Indirecta: no se identifican explícitamente a los procesos emisor y receptor. La comunicación se realiza por medio de un buzón

Sintaxis

Send(Buzon, mensaje)Receive(Buzon, mensaje)

Page 20: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

Sockets

� Los sockets son un sistema de comunicación

entre procesos de diferentes máquinas de

una red.

� Más exactamente, un socket es un punto de

comunicación por el cual un proceso puede

emitir o recibir información.

Page 21: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

Sockets

� Utilizan una serie de primitivas para:

� establecer el punto de comunicación

� conectarse a una máquina remota en un

determinado puerto que esté disponible

� escuchar en el canal

� leer o escribir y publicar información en el puerto

� desconectarse.

Page 22: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

Sockets en Java

� El paquete java.net de la plataforma Java proporciona una clase Socket, la cual implementa una de las partes de la comunicación bidireccional entre un programa Java y otro programa en la red.

� La clase Socket se sitúa en la parte más alta de una implementación dependiente de la plataforma, ocultando los detalles de cualquier sistema particular al programa Java.

� Usando la clase java.net.Socket en lugar de utilizar códigonativo de la plataforma, los programas Java pueden comunicarse a través de la red de una forma totalmente independiente de la plataforma.

Page 23: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

Sockets en Java

� Por otra parte, si intentamos conectar a través de la Web, la clase URL y clases relacionadas (URLConnection, URLEncoder) son probablemente más apropiadas que las clases de sockets.

� Pero de hecho , las clases URL no son másque una conexión a un nivel más alto a la Web y utlilizan como parte de su implementación interna los sockets.

Page 24: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

Arquitectura Cliente Servidor

Servidor

� ServerSocket(port)

� accept()

� OutputStream

� InputStream

� close()

Cliente

� Socket(host,port)

� OutputStream

� InputStream

� close()

Page 25: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

InetAddress� Proporciona objetos que se pueden utilizar para

manipular tanto direcciones IP como nombres de dominio.

� getHostName() regresa un string equivalente al nombre de dominio de la dirección IP.

� getHostAddress() regresa un string de la representación decimal de la dirección IP.

� getAddress() toma la dirección IP como un array de bytes

Page 26: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

Socket vs DatagramSocket

� Existen dos tipos de conexiones de red

� TCP: es un protocolo confiable en el que los

paquetes de los datos están garantizados al ser

enviados, si un paquete se pierde no se envia

un nuevo hasta que se mande el primero se usa

la clase Socket es más confiable que rápido

� UDP: no garantiza el envio de paquetes o el

orden en que serán enviados se usa la clase

DatagramSocket, es más rápido que confiable.

Page 27: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

DatagramSocket

� La clase de sockets datagrama puede ser utilizada para implementar datagramas no fiables (sockets UDP), no ordenados. Aunque la comunicación por estos sockets es muy rápidaporque no hay que perder tiempo estableciendo la conexión entre cliente y servidor.

� Necesita de la Clase DatagramPacket:Claseque representa un paquete datagramaconteniendo información de paquete, longitud de paquete, direcciones Internet y número de puerto.

Page 28: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

Socket vs ServerSocket

� ServerSocket es una clase que solo espera

por información que llegue hacia él. Este

objeto no realiza el servicio, sino que crea un

objeto Socket en función del cliente para

realizar toda la comunicación a través de él.

� Socket debe saber de antemano con quien

debe conectarse.

Page 29: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

Programa Cliente

Nodo Destino

Puerto Destino

Socket

Programa Servidor

Puerto Destino

ServerSocket

Puerto

Socket

1. Instanciación 2. Accept

3. Return del Accept

4. Instanciación

5. Conexión TCP

6. Comunicación

Page 30: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

Métodos de Socket

� Socket s=new Socket(): Crea un Socket por defecto y no conectado.

� Socket s=new Socket(InetAdrees direccion, int puerto): Crea y

conecta un Socket a la IP especificada y el puerto especificado.

� Socket s=new Socket(String host, int puerto); Crea y conecta un Socket al host y al puerto especificados.

� InputStream getInputStream()

� OutputStream getOutputStream()

� Las clases OutputStream e InputStream son abstractas, por lo que no podemos emplear directamente todos sus métodos por lo que se

emplea: DataOutputStream, DataInputStream,FileOutputStream

,FileInputStream

� Se ligan los flujos genéricos con uno específico

� DataInputStream Flujo= new DataInputStream(FlujoDeEntrada);

� DataOutputStream Flujo=new DataOutputStream(FlujodeSalida);

Page 31: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

Métodos de Socket� void close(): Método que cierra el Socket.

� InetAddres getInetAddress(): método que retorna la IP a la cual esta conectado el socket.

� int getPort(): Método que devuelve el puerto remoto al que esta conectado el socket.

� boolean isClosed(): Método que devuelve true si el socket estácerrado y false si no lo está.

� boolean isConnected(): Método que devuelve true si el socket estáconectado y false si no lo está.

� void shutdownInput(): Método que cierra el flujo de entrada del socket.

� void shutdownoutput(): Método que cierra el flujo de salida del socket.

Page 32: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

Métodos ServerSocket

� ServerSocket ss=new ServerSocket(int puerto): Constructor que crea un ServerSocket a la

escucha del puerto indicado.

Page 33: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

Métodos de DatagramSocket

� DatagramSocket(): constructor sin argumentos que permite que el sistema elija un puerto entre los que estén libres y selecciona una de las direcciones locales.

� DatagramSocket(int port): constructor que toma un número de puerto como argumento, apropiado para los procesos que necesitan un número de puerto (servicios).

� DatagramSocket(int port, InetAddress laddr): constructor que toma como argumentos el número de puerto y una determinada dirección local.

Page 34: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

Métodos de DatagramSocket

send(DatagramPacket p)

receive(DatagramPacket p)

Estos métodos sirven para transmitir datagramas entre un par de

conectores.

El argumento de send es una instancia de DatagramPacket

conteniendo el mensaje y el destino.

El argumento de receive es un DatagramPacket vacío en el que

colocar el mensaje, su longitud y su origen. Ambos métodos pueden

lanzar excepciones IOException

Page 35: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

Métodos de DatagramSocket

�setSoTimeout(int timeout): este método permite establecer un tiempo

de espera límite. Cuando se fija un límite, el método receive se

bloquea durante el tiempo fijado y después lanza una excepción

InterruptedIOException.

�connect(InetAddress address, int port): este método se utiliza para

conectarse a un puerto remoto y a una dirección Internet concretos, en

cuyo caso el conector sólo podrá enviar y recibir mensajes de esa

dirección.

Page 36: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

Métodos de DatagramPacket

� Constructores para datagramas que van a ser enviados: � DatagramPacket(byte[] buf, int length)

� DatagramPacket(byte[] buf, int length, InetAddressaddress, int port)

� Estos constructores crean una instancia de datagrama compuesta por una cadena de bytes que almacena el mensaje, la longitud del mensaje y la dirección de Internet y el número de puerto local del conector destino.

Page 37: Unidad 4. Introducción a los sistemas distribuidosmtovar.cs.buap.mx/doc/PCPA/Unidad4PM.pdfva la solicitud -destino del primer send-) para ejecutar el código del procedimiento remoto

Métodos de DatagramPacket

� getData() : para obtener el mensaje

contenido en el datagrama regresa el

contenido en bytes hay que convertirlo con

toString.

� getAddress() : para obtener la dirección IP.

� getPort(): para obtener el puerto.