Comunicación entre procesos.

Anuncio
Contenido
Comunicación entre Procesos
Definición
Fundamentos
? Comunicación
Síncrona y Asíncrona
? Buffering
? Comunicación
Prof. Mariela J. Curiel
? Comunicación
? Tipos
Contenido
? Representación
externa y empaquetado de
los datos
Comunicación en grupo
? Fundamentos
? Multidifusión
IP
Directa e Indirecta)
Confiable y no Confiable
de Servicio
Definición
IPC es el conjunto de herramientas que
ofrece el sistema operativo para que se
comuniquen procesos que no
comparten el mismo espacio de
memoria.
Ejemplo: pipes, sockets, etc.
Se tienen dos primitivas básicas:
send(destination, this_msg, msg_length)
receive(source, a_msg, &how_long)
1
Fundamentos: Comunicación
Síncrona y Asíncrona
Bloqueantes(síncronas):
- el emisor (send) se suspende hasta tanto el mensaje
no es recibido.
- Una llamada a receive no retorna hasta que el
mensaje no ha sido colocado en el buffer que
especifica el receptor.
- En algunos sistemas el receptor puede especificar de
qué emisor desea recibir, en cuyo caso permanecerá
bloqueado hasta que lleguen los mensajes que le
interesan.
Fundamentos: Comunicación
Síncrona y Asíncrona
Cliente
ejecutandose
Cliente
Bloqueado
Cliente continua
con su ejecución.
Send Bloqueante
trap
Se está enviando
el mensaje
Cliente
Bloqueado
Cliente
ejecutandose
Send No-bloqueante
trap
El mensaje se copia
al buffer del kernel
Cliente continua
con su ejecución.
Se está enviando
el mensaje
Fundamentos: Comunicación
Síncrona y Asíncrona
No bloqueantes(asíncronas):
- un send no bloqueante retorna el
control al llamador inmediatamente
antes que el mensaje sea enviado.
- Un receive no bloqueante le indica al
kernel el buffer donde se dejará el
mensaje y la llamada retorna
inmediatamente.
Fundamentos: Comunicación
Síncrona y Asíncrona
Desventajas del send asíncrono: El
emisor puede llegar a no tener idea de
cuándo efectivamente se ha realizado
el envío.
Solución: Se interrumpe al emisor cuando
el mensaje ha sido enviado (los
programas son engorrosos y difíciles de
depurar)
2
Fundamentos: Comunicación
Síncrona y Asíncrona
Fundamentos: Comunicación
Síncrona y Asíncrona
Opciones:
send bloqueante (no hay problema con
múltiples threads o procesos)
send no bloqueante
send no bloqueante con interrupciones.
Receive asíncrono: cómo se entera el llamador
que el mensaje ha llegado?
Fundamentos: Comunicación
Síncrona y Asíncrona
send
con bloqueo: espera hasta que el receptor haya
recibido
sin bloqueo: continúa aunque el receptor no haya
recibido
receive
con bloqueo: espera hasta que el mensaje haya
llegado.
sin bloqueo: continúa aunque el mensaje no
haya llegado.
- wait explícito: el receptor se bloquea
cuando él lo desea.
- Adicionalmente se puede ofrecer una
primitivas test no bloqueante o u
conditional_receive no bloqueante.
- Usar interrupciones para avisar al receptor.
Buffering
? Sin
Buffer
receive(p, &m): el proceso está preparado
para recibir un único mensaje y se dispone
de un único buffer en el espacio de
direcciones del usuario
Cliente
Dirección
del buffer
Servidor
m
kernel
3
Buffering
Buffering
Las primitivas no-bloqueantes requieren
de buffering, i.e. un lugar donde el SOP
pueda almacenar temporalmente los
mensajes que se han enviado pero no
han sido recibidos. Los buffers pueden
ser
? De
capacidad limitada
? De
capacidad ilimitada (teórica)
Comunicación Directa e
Indirecta
Buffering
Qué pasa si el mailbox
está lleno?
Borrar el mensaje
? El kernel espera un
tiempo hasta contar con
espacio en el buffer.
? No dejar a ningún
proceso enviar
mensajes si no hay
espacio
?
Cliente
De capacidad limitada: un número
determinado de buffers en el espacio de
direcciones del kernel. A este estructura se le
denomina mailbox
Un proceso interesado en recibir mensajes,
solicita al kernel la creación de un mailbox.
Todos los mensajes entrantes llegarán al
mailbox.
Una llamada a receive sustraerá un mensaje
del mailbox o se bloqueará si aún no hay
mensajes.
Servidor
kernel
Espacio
destinado
a almacenar
los mensajes
Comunicación Directa : las primitivas send y
receive especifican el proceso receptor y
emisor del mensaje.
No hay entidades intermediarias
El receptor debe conocer la identidad de
todos los posibles emisores (es una mala
solución para servidores)
send(tothisprocess, this_msg, msg_length)
receive(fromthisprocess, a_msg, &how_long)
4
Comunicación Directa e
Indirecta
Comunicación Directa e
Indirecta
El mailbox puede ser:
- Privado:
Comunicación Indirecta : las primitivas send y
receive especifican un intermediario como
destino o fuente: un mailbox.
El mailbox es un objeto del sistema creado a
petición de un proceso usuario.
Procesos diferentes pueden enviar mensajes
al mismo mailbox.
Un proceso puede recibir mensajes de
procesos de los cuales no conoce nada.
-
-
-
Comunicación Directa e
Indirecta
Privado:
- El puerto tiene exactamente un receptor pero
puede tener múltiples emisores.
- Los procesos pueden utilizar múltiples puertos
para recibir mensajes.
- Cualquier proceso que conozca el número de
puerto de otro proceso, puede enviarle mensajes.
- Generalmente los servidores hacen público su
número de puerto para que sea utilizado por los
clientes.
El proceso que creo el mailbox (y su
descendencia) son los únicos procesos que
pueden utilizarlo.
Deja de existir cuando el proceso que solicitó
su creación y todos sus hijos terminan.
Se suelen llamar puertos
Ejem: sockets de BSD
Comunicación Directa e
Indirecta
Privado:
-
-
Un puerto puede asociarse
con una función o servicio que
presta un proceso. También
se puede destinar un puerto
para recibir replys.
Con este esquema se debe
evitar el bloqueo innecesario
por un puerto. Alternativas:
polling (no bloqueantes),
prioridades, especificar un
subconjuntos de puertos, etc.
Proceso P
replya P Puerto 0
request P.X Puerto 1
request P.Y Puerto 2
Servicio
X
Servicio
y
5
Comunicación Directa e
Indirecta
Público:
Público:
- El propietario es el sistema operativo o subsistema
de comunicación.
- Cualquier cantidad de procesos pueden enviar o
recibir mensajes de este tipo de buzones.
P1
send(message)
Mailbox
global
P2
Send(message)
Proceso
receptor
Los mensajes se envían entre procesos
localizados en diferentes
computadores. Éstos pueden perderse,
corromperse, llegar fuera de orden o
duplicarse.
Soluciones(pérdida):
Send no confiable
Acks
? Aprovechar el reply del server.
? Timers
?
- Se puede añadir fácilmente un nuevo
servidor en sustitución de uno que ha fallado
- Este mailbox persiste aunque finalicen los
procesos que solicitaron su creación.
- El sistema tiene que soportar la existencia
de un objeto cuyo nombre pueden conocer el
resto de los procesos.
Proceso
receptor
Comunicación Confiable y No
Confiable
?
Comunicación Directa e
Indirecta
Comunicación Confiable y No
Confiable
Send no confiable: el sistema no ofrece
garantías sobre la entrega del mensaje. El
usuario es responsable de implementar una
comunicación confiable.
ACKs: el kernel de la máquina receptora debe
enviar un acknowledgment al kernel de la
máquina emisora. Cuando el kernel emisor
recibe este mensaje, desbloquea al proceso que
realizó el send.
6
Comunicación Confiable y No
Confiable
Servidor
Cliente
1
3
4
kernel
Comunicación Confiable y No
Confiable
Aprovechar el reply del server: el reply
del servidor actua como un ACK. El
emisor permanece bloqueado hasta
que obtiene la respuesta del servidor.
2
Servidor
Cliente
1.
2.
3.
1
1.
2.
3.
4.
Request (client to server)
ACK (kernel to kernel)
Reply (server to client)
ACK (kernel to kernel)
Comunicación Confiable y No
Confiable
Timers: cuando expiran se retransmite
el mensaje.
Orden de los mensajes o mensajes
duplicados: se utilizan números de
secuencia.
2
Request (client to server)
Reply (server to client)
ACK (kernel to kernel)
3
kernel
Tipos de Servicio
Se pueden definir tres tipo de servicios
básicos:
? Datagramas
? Circuito
Virtual
? Streams
7
Tipos de Servicio
Datagramas: cada mensaje se envía en
forma individual; algunos mensajes
pueden perderse, otros se duplican y
pueden llegar fuera de orden. El
servicio de datagramas puede ser
confiable o no confiable.
Tipos de Servicio
Stream: es como un circuito virtual pero
los mensajes no tienen límites. Lo que
ve el receptor es una ininterrumpida
cadena de bytes.
Tipos de Servicio
Circuito Virtual: se establece una
conexión lógica entre el emisor y el
receptor. Se garantiza que los
mensajes lleguen en secuencia, sin
pérdidas o duplicados; tal y como fluyen
las palabras en una conversación
telefónica.
Sockets
Tipos de Servicio
La abstracción de sockets se utiliza para la
comunicación UDP y TCP
La comunicación consiste entre la
transmisión de un mensaje entre un conector
de un proceso y un conector de otro proceso.
Proceso P
Puerto acordado
socket
mensaje
cliente
Servidor
Cualquier
puerto
socket
8
Tipos de Servicio
Sockets
Los conectores deben estar asociados a un
puerto local y a una dirección Internet .
Los procesos pueden usar el mismo conector
para leer y escribir mensajes.
Cada computador permite 216 puertos
Cada proceso puede utilizar varios puertos
para recibir mensajes, pero un proceso no
puede compartir puertos con otros procesos
del mismo computador.
Tipos de Servicio
Datagramas UDP
Un datagrama UDP se transmite desde el
emisor al receptor sin acuse de recibo ni
reintentos.
Cualquier proceso que necesite enviar o
recibir mensajes debe crear, primero, un
conector asociado a una dirección internet y
a un puerto local. El cliente enlaza su
conector a cualquier puerto libre y el servidor
enlaza su conector a un puerto bien
conocido.
Tipos de Servicio
Sockets
Cada conector se asocia con un
protocolo contreto que puede ser UDP
o TCP.
Tipos de Servicio
Datagramas UDP
Tamaño del mensaje: el proceso receptor
necesita especificar un buffer de tamaño
concreto en el cual se almacenará el
mensaje. La capa IP permite mensajes de
hasta 2 16 bytes. La mayoría de los entornos
impone un límite de 8K (2 13).
Bloqueo: las operaciones send son no
bloqueantes y las operaciones receive son
bloqueantes.
9
Tipos de Servicio
Datagramas UDP
Tiempo límite de espera: el receive con
bloqueo indefinido no resulta adecuado si se
presentan fallas en el emisor. Se pueden
establecer timeots en los conectores
Recibe de cualquiera: el método receive no
especifica el origen de los mensajes. Se
aceptan mensajes dirigidos al conector desde
cualquier origen. El método receive devuelve
la dirección Internet y el puerto del emisor.
Tipos de Servicio
Datagramas UDP
Ejemplos: el DNS está implementado
sobre UDP
Tipos de Servicio
Tipos de Servicio
Comunicación de STREAMS TCP
Tamaño de los mensajes: la aplicación puede
elegir la cantidad de datos que quiere escribir
o leer del stream. La implementación del
TCP subyacente decide cuántos datos
recoge antes de transmitirlos como uno o
más paquetes IP.
Mensajes perdidos: el protocolo TCP utiliza
un esquema de acuse de recibo de los
mensajes.
Comunicación de STREAMS TCP
Control de flujo: se intenta ajustar las
velocidades de los procesos que leen y
escriben.
Duplicación y ordenación de los mensajes: a
cada paquete IP se le asocia un identificador
que hace posible que se puedan detectar y
rechazar mensajes duplicados, o que se
puedan reordenar los mensajes que lleguen
duplicados.
10
Tipos de Servicio
Comunicación de STREAMS TCP
Destino de los mensajes: un par de procesos
establecen una conexión antes de que
puedan comunicarse mediante un stream.
Una vez que se establece la conexión ambos
procesos leen y escriben sin tener que
preocuparse por las direcciones IP. Se
proveen dos llamadas: connect(cliente) y
accept (servidor)
Tipos de Servicio
Cómo se aplicaría el modelo de fallos en
el caso de los datagramas UDP y de los
stream TCP?
Tipos de Servicio
Comunicación de STREAMS TCP
Concordancia de ítem de datos: los procesos
que se comunican deben estar de acuerdo
en el tipo de datos transmitidos por el stream.
Hilos:el servidor generalmente crea hilos que
continuen la comunicación con el cliente.
Cuando no se dispone de hilos se debe
comprobar si existen datos en el stream
antes de intentar leerlos; en UNIX se puede
usar select.
Representación Externa y
Empaquetado
La información en los programas se
almacena en estructuras de datos, mientras
que la información se transporta en
secuencias de bytes.
Las estructuras de datos deben ser
aplanadas (convertidas en secuencias de
bytes) antes de su transmisión.
Posteriormente se recontruyen en el destino.
11
Representación Externa y
Empaquetado
Los tipos de datos primitivos,tales como los
enteros, se almacenan en distintos orden en
los computadores: big- endian y little-endian.
También puede ser diferente la
representación de números en coma flotante.
Algunos computadores utilizan la codificación
ascii (un byte por caracter), mientras que
otros utilizan el estándar Unicode: permite
representar textos en la mayoría de los
lenguajes y utiliza dos bytes por carácter.
Representación Externa y
Empaquetado
Para hacer posible que dos computadores
puedan intercambiar datos se pueden utilizar
dos métodos:
Los valores se convierten en un formato
externo acordado antes de la transmisión y
se revierten al formato local en la recepción.
Los valores se transmiten según el formato
del emisor, junto con una indicación del
formato utilizado, y el receptor los convierte si
es necesario.
Representación Externa y
Empaquetado
Representación Externa y
Empaquetado
Al estándar acordado para la representación
de estructuras de datos y valores primitivos
se le denomina XDR (external data
representation).
El empaquetado (marshalling) consiste en
tomar una colección de ítems de datos y
ensamblarlos de un modo adecuado
(representación externa) para la transmisión
de un mensaje.
El desempaquetado (unmarshalling): es el
proceso de desensamblado en el destino
para producir una colección equivalente de
datos.
Ejemplos de representación externa de
datos:
La representación común de datos de CORBA.
Puede ser usada por una gran variedad de
lenguajes de programacion.
? La serialización de objetos en JAVA (aplanado de
objetos o jerarquias de objetos). Es de uso
exclusivo de Java.
?
12
Representación Externa y
Empaquetado
El desempaquetado y desempaquetado
se llevan a cabo en el middleware sin
participación del programador.
Los datos primitivos se pueden
empaquetar en forma binaria o en ascii
(el mensaje es más grande).
Comunicación en Grupo
r
r
s
r
r
s
r
r
r
Punto-punto
Comunicación en Grupo
Involucra múltiples procesos.
Un Grupo es una colección de procesos
que trabajan juntos.
Cuando un mensaje se envía al grupo,
lo deben recibir todos sus miembros.
Es un tipo de comunicación uno-amuchos en contraste con la
comunicación punto-punto.
Comunicación en Grupo
Los grupos son dinámicos: se pueden
crear y destruir. Un proceso se puede
unir a un grupo o puede dejar un grupo.
Un proceso puede ser miembro de
varios grupos a la vez.
Se necesitan mecanismos para manejar
grupos y la membresía a los grupos.
Uno-a-muchos
13
Comunicación en Grupo
Comunicación en Grupo
El propósito de los grupos es manejar
una colección de procesos como una
abstracción.
Un proceso puede enviar un mensaje a
un grupo de servidores sin conocer
cuántos son o dónde están.
Multicast: se crea una dirección especial de
red en la cual pueden escuchar múltiples
máquinas. Cuando un paquete se envía a
esta dirección, se entrega a todas las
máquinas escuchando por la misma.
Comunicación en Grupo
Comunicación en Grupo
Unicast: El emisor transmite paquetes
separados a cada uno de los miembros
del grupo.
Broadcast: los paquetes que contienen cierta
dirección especial se envían a todas las
máquinas. El software debe chequear si se
está o no interesado en el mensaje.
Grupos abiertos y cerrados
Grupo Abierto
No es miembro
del grupo
Grupo Cerrado
Está
permitido
14
Comunicación en Grupo
Grupos de pares vs grupos jerárquicos
Grupo Jerárquico
Comunicación en Grupo
Membresía al Grupo
Se necesitan métodos para crear y eliminar
grupos, y para que los procesos se
incorporen o salgan de un grupo.
Soluciones:
Un servidor de grupo: enfoque centralizado
Enfoque distribuido: En un grupo abierto, alguien
que desee entrar le envía un mensaje a todos
anunciando su presencia. En un grupo cerrado se
requiere de algo similar.
? Para dejar un grupo, un miembro envía un
mensaje de despedida a todos los integrantes.
?
?
Grupo de pares
Comunicación en Grupo
Membresía al Grupo
Problemas adicionales:
Si un miembro ´´se cae´´deja el grupo. No hay un
anuncio de este hecho al resto de los miembros.
? Al dejar un grupo el miembro debe dejar de recibir
mensajes.
? Al incorporarse a un grupo se deben recibir todos
los mensajes enviados al grupo.
? Qué pasa si un número importante de máquinas
falla, de forma que el mismo grupo deja de
funcionar ?
?
Comunicación en Grupo
Direccionamiento
Multicast: la dirección del grupo puede ser la
misma dirección de multicast. El mensaje se
envía sólo a quellos máquinas que esperan
recibirlo y no a otras.
Broadcast: El kernel tiene que interpretar la
dirección y si ningún proceso en la máquina
es miembro del grupo, el mensaje se borra.
0
1
2
3
4
0
1
2
x
3
4
15
Comunicación en Grupo
Comunicación en Grupo
Direccionamiento
Unicast: el kernel de la máquina emisora
deberá tener la lista de máquinas que tienen
procesos receptores del mensaje.
0
1
2
3
4
Primitivas : send, receive, group-send, groupreceive, broadcast, multicast, gather, scatter,
etc.
Atomicidad
- Cada receptor envía un Ack (funciona si ninguna
máquina falla.)
- Algoritmo simple:
Otro método de direccionamiento es que el emisor provea
En la llamada la lista de direcciones IP destino.
Comunicación en Grupo
El emisor envía un mensaje a todos los miembros.
Se inicializan timers para hacer retransmisiones.
Cuando un proceso recibe un mensaje, si no lo ha visto, lo
retransmite al resto del grupo; si ya lo ha visto, lo ignora.
Comunicación en Grupo
Orden:
1
2
A1
tiempo
0
0
A0
A1
A3
4
A3
A4
0
3
1
2
3
4
4
5
- Global time ordering: entregar todos los mensajes en el
mismo orden en el que fueron emitidos
- Consistent time order: Si dos mensajes A y B, fueron emitidos
en instantes muy cercanos en el tiempo, el sistema elige uno de ellos
Como primero y lo entrega a todo el grupo, seguido del otro
mensaje.
Escalabilidad:
Muchos algoritmos trabajan bien cuando el
número de integrantes del grupo es
pequeño...
Qué pasa cuando el número de integrantes es
de cientos o miles ?
Cuando se manejan miles de grupos?
Cuando los mensajes tienen que atravesar
varias subredes?
16
Comunicación en Grupo
Escalabilidad
Lan1
G1
Multicast
G2
Lan2
Lan 3
G3
G4
Lan 4
Gateway
Comunicación en Grupo
Multidifusión IP: una implementación de la
comunicación en grupo.
Los grupos de multidifusión se especifican
utilizando las direcciones de internet de la
clase D: una dirección donde los primeros 4
bits son 1110.
La pertenencia a los grupos de multidifusión
es dinámica: los computadores se pueden
añadir y borrar a un número arbitrario de
grupos en cualquier instante.
Comunicación en Grupo
Multidifusión IP: una implementación de la
comunicación en grupo.
Se construye sobre el protocolo IP.
Permite que el emisor transmita un único
paquete IP a un conjunto de computadoras
que forman un grupo de multidifusión.
El emisor no tiene que estar al tanto de las
entidades de los receptores individuales o
del tamaño del grupo.
Comunicación en Grupo
Multidifusión IP: una implementación de la
comunicación en grupo.
La multidifusión sólo es accesible a través de
UDP.
Un computador pertenece a un grupo de
multidifusión cuando cuando uno o más de
sus procesos tienen conectores que
pertenecen al grupo.
Cuando llega el mensaje de multidifusión el
computador los reparte a los procesos
adecuados.
17
Comunicación en Grupo
Multidifusión IP: una implementación de la
comunicación en grupo.
Los paquetes IP pueden multidifundirse tanto
en la red local como en toda Internet. La
multidifusión dirigida a internet hace uso de
las posibilidades de multidifusión de los
routers.
Las direcciones de multidifusión se pueden
reservar en forma temporal o permanente.
Existen grupos permanentes incluso cuando
no tienen ningún miembro.
Comunicación en Grupo
Multidifusión IP: Fiabilidad y orden
Cualquiera de los receptores
destinatiorios del datagrama puede
perderlo (buffer lleno)
También se puede perder un
datagrama de un router de multidifusión
a otro. Una sub-red completa perdería
el mensaje.
Comunicación en Grupo
Los mensajes de multidifusión proporcionan
una infraestructura para construir SD con las
siguientes características:
Tolerancia a fallos basada en servicios
replicados.
Búsqueda de servidores.
Mejores prestaciones basada en datos
replicados.
Propagación de notificaciones de los
eventos.
Comunicación en Grupo
Multidifusión IP: Fiabilidad y orden
Si falla un router de multidifusión, los
miembros del otro lado del router no
recibirán el mensaje.
Los paquetes enviados no llegan
necesariamente en el orden que fueron
enviados.
18
import java.net.*
Import java.io.*
Public class participanteMultidifusion {
public static void main(String arg[]){
try {
InetAddress grupo = InetAddress. getByName(args[1]);
MulticastSocket s = new MulticastSocket(6789);
s.joinGrupo(grupo);
byte [] m = args[0].getBytes();
DatagramPacket mensajeSalida =
new DatagramPacket(m, m.length, grupo, 67899);
s.send(MensajeSalida);
byte [] buffer = new byte [1000];
for (int i = 0; i < 3; i++) {
DatagramPacket mensajeEntrada =
new DatagramPacket(buffer, buffer.length);
s.receive(mensajeEntrada);
System.out.printl(“ Recibido:” +
new String(mensajeEntrada.getData));
}
s.leaveGroup(grupo);
} catch(SocketException e) {System.out.printl(…)}
} catch(IOException e) {…}
}
}
19
Descargar