0% encontró este documento útil (0 votos)
43 vistas19 páginas

Tema 5

Este documento describe los fundamentos de la comunicación entre procesos, incluyendo comunicación síncrona y asíncrona, comunicación directa e indirecta, y el uso de buffers. También cubre conceptos como representación de datos, comunicación en grupo y servicios de comunicación.

Cargado por

anon_603131088
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
43 vistas19 páginas

Tema 5

Este documento describe los fundamentos de la comunicación entre procesos, incluyendo comunicación síncrona y asíncrona, comunicación directa e indirecta, y el uso de buffers. También cubre conceptos como representación de datos, comunicación en grupo y servicios de comunicación.

Cargado por

anon_603131088
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Contenido

Definición
Comunicación entre Procesos Fundamentos
? Comunicación Síncrona y Asíncrona
? Buffering

? Comunicación Directa e Indirecta)


Prof. Mariela J. Curiel ? Comunicación Confiable y no Confiable
? Tipos de Servicio

Contenido Definición
IPC es el conjunto de herramientas que
? Representación externa y empaquetado de
ofrece el sistema operativo para que se
los datos
comuniquen procesos que no
Comunicación en grupo comparten el mismo espacio de
? Fundamentos memoria.
? Multidifusión IP 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 Fundamentos: Comunicación
Síncrona y Asíncrona Síncrona y Asíncrona
Bloqueantes(síncronas): No bloqueantes(asíncronas):
- el emisor (send) se suspende hasta tanto el mensaje
- un send no bloqueante retorna el
no es recibido.
control al llamador inmediatamente
- Una llamada a receive no retorna hasta que el
mensaje no ha sido colocado en el buffer que antes que el mensaje sea enviado.
especifica el receptor. - Un receive no bloqueante le indica al
- En algunos sistemas el receptor puede especificar de kernel el buffer donde se dejará el
qué emisor desea recibir, en cuyo caso permanecerá mensaje y la llamada retorna
bloqueado hasta que lleguen los mensajes que le
interesan.
inmediatamente.

Fundamentos: Comunicación Fundamentos: Comunicación


Síncrona y Asíncrona Síncrona y Asíncrona
Cliente Cliente
ejecutandose Bloqueado Cliente continua Desventajas del send asíncrono: El
con su ejecución.
Send Bloqueante emisor puede llegar a no tener idea de
trap
cuándo efectivamente se ha realizado
Se está enviando
el envío.
Cliente
el mensaje
Bloqueado Solución: Se interrumpe al emisor cuando
Cliente Cliente continua
ejecutandose con su ejecución. el mensaje ha sido enviado (los
programas son engorrosos y difíciles de
Send No-bloqueante trap
Se está enviando
el mensaje
depurar)
El mensaje se copia
al buffer del kernel

2
Fundamentos: Comunicación Fundamentos: Comunicación
Síncrona y Asíncrona Síncrona y Asíncrona
Opciones: Receive asíncrono: cómo se entera el llamador
que el mensaje ha llegado?
send bloqueante (no hay problema con
- wait explícito: el receptor se bloquea
múltiples threads o procesos)
cuando él lo desea.
send no bloqueante - Adicionalmente se puede ofrecer una
send no bloqueante con interrupciones. primitivas test no bloqueante o u
conditional_receive no bloqueante.
- Usar interrupciones para avisar al receptor.

Fundamentos: Comunicación
Buffering
Síncrona y Asíncrona
? Sin Buffer
send
con bloqueo: espera hasta que el receptor haya receive(p, &m): el proceso está preparado
recibido para recibir un único mensaje y se dispone
sin bloqueo: continúa aunque el receptor no haya de un único buffer en el espacio de
recibido direcciones del usuario
receive
con bloqueo: espera hasta que el mensaje haya Cliente Dirección Servidor
del buffer
llegado.
m
sin bloqueo: continúa aunque el mensaje no
kernel
haya llegado.

3
Buffering Buffering
Las primitivas no-bloqueantes requieren De capacidad limitada: un número
determinado de buffers en el espacio de
de buffering, i.e. un lugar donde el SOP
direcciones del kernel. A este estructura se le
pueda almacenar temporalmente los denomina mailbox
mensajes que se han enviado pero no Un proceso interesado en recibir mensajes,
han sido recibidos. Los buffers pueden solicita al kernel la creación de un mailbox.
ser Todos los mensajes entrantes llegarán al
mailbox.
? De capacidad limitada
Una llamada a receive sustraerá un mensaje
? De capacidad ilimitada (teórica) del mailbox o se bloqueará si aún no hay
mensajes.

Comunicación Directa e
Buffering
Indirecta
Qué pasa si el mailbox Comunicación Directa : las primitivas send y
está lleno? Servidor receive especifican el proceso receptor y
Cliente
? Borrar el mensaje emisor del mensaje.
? El kernel espera un No hay entidades intermediarias
tiempo hasta contar con
espacio en el buffer. kernel El receptor debe conocer la identidad de
? No dejar a ningún
todos los posibles emisores (es una mala
Espacio
proceso enviar destinado solución para servidores)
mensajes si no hay a almacenar

espacio los mensajes send(tothisprocess, this_msg, msg_length)


receive(fromthisprocess, a_msg, &how_long)

4
Comunicación Directa e Comunicación Directa e
Indirecta Indirecta
Comunicación Indirecta : las primitivas send y El mailbox puede ser:
receive especifican un intermediario como - Privado:
destino o fuente: un mailbox. - El proceso que creo el mailbox (y su
El mailbox es un objeto del sistema creado a descendencia) son los únicos procesos que
petición de un proceso usuario. pueden utilizarlo.
Procesos diferentes pueden enviar mensajes - Deja de existir cuando el proceso que solicitó
al mismo mailbox. su creación y todos sus hijos terminan.
Un proceso puede recibir mensajes de - Se suelen llamar puertos
procesos de los cuales no conoce nada. - Ejem: sockets de BSD

Comunicación Directa e Comunicación Directa e


Indirecta Indirecta
Privado: Privado:
- Un puerto puede asociarse
- El puerto tiene exactamente un receptor pero
con una función o servicio que Proceso P
puede tener múltiples emisores. presta un proceso. También replya P Puerto 0
- Los procesos pueden utilizar múltiples puertos se puede destinar un puerto
para recibir mensajes. para recibir replys. Servicio
request P.X Puerto 1 X
- Cualquier proceso que conozca el número de - Con este esquema se debe
evitar el bloqueo innecesario Servicio
puerto de otro proceso, puede enviarle mensajes. por un puerto. Alternativas: request P.Y Puerto 2
y
- Generalmente los servidores hacen público su polling (no bloqueantes),
número de puerto para que sea utilizado por los prioridades, especificar un
clientes. subconjuntos de puertos, etc.

5
Comunicación Directa e Comunicación Directa e
Indirecta Indirecta
Público: Público:
- El propietario es el sistema operativo o subsistema - Se puede añadir fácilmente un nuevo
de comunicación. servidor en sustitución de uno que ha fallado
- Cualquier cantidad de procesos pueden enviar o - Este mailbox persiste aunque finalicen los
recibir mensajes de este tipo de buzones. procesos que solicitaron su creación.
- El sistema tiene que soportar la existencia
Mailbox
P1
global Proceso de un objeto cuyo nombre pueden conocer el
send(message) receptor resto de los procesos.
P2 Proceso
Send(message) receptor

Comunicación Confiable y No Comunicación Confiable y No


Confiable Confiable
Los mensajes se envían entre procesos Send no confiable: el sistema no ofrece
localizados en diferentes garantías sobre la entrega del mensaje. El
computadores. Éstos pueden perderse, usuario es responsable de implementar una
corromperse, llegar fuera de orden o comunicación confiable.
duplicarse. ACKs: el kernel de la máquina receptora debe
Soluciones(pérdida): enviar un acknowledgment al kernel de la
? Send no confiable máquina emisora. Cuando el kernel emisor
? Acks recibe este mensaje, desbloquea al proceso que
? Aprovechar el reply del server. realizó el send.
? Timers

6
Comunicación Confiable y No Comunicación Confiable y No
Confiable Confiable
Cliente
Servidor Aprovechar el reply del server: el reply
1 del servidor actua como un ACK. El
3 emisor permanece bloqueado hasta
4
kernel que obtiene la respuesta del servidor.
2
Servidor
Cliente

1 1. Request (client to server)


2. Reply (server to client)
1. Request (client to server) 2 3. ACK (kernel to kernel)
2. ACK (kernel to kernel) kernel 3
3. Reply (server to client)
4. ACK (kernel to kernel)

Comunicación Confiable y No
Tipos de Servicio
Confiable
Timers: cuando expiran se retransmite Se pueden definir tres tipo de servicios
el mensaje. básicos:
Orden de los mensajes o mensajes ? Datagramas

duplicados: se utilizan números de ? Circuito Virtual


secuencia. ? Streams

7
Tipos de Servicio Tipos de Servicio
Datagramas: cada mensaje se envía en Circuito Virtual: se establece una
forma individual; algunos mensajes conexión lógica entre el emisor y el
pueden perderse, otros se duplican y receptor. Se garantiza que los
pueden llegar fuera de orden. El mensajes lleguen en secuencia, sin
servicio de datagramas puede ser pérdidas o duplicados; tal y como fluyen
confiable o no confiable. las palabras en una conversación
telefónica.

Tipos de Servicio Sockets Tipos de Servicio


La abstracción de sockets se utiliza para la
Stream: es como un circuito virtual pero comunicación UDP y TCP
los mensajes no tienen límites. Lo que La comunicación consiste entre la
ve el receptor es una ininterrumpida transmisión de un mensaje entre un conector
cadena de bytes. de un proceso y un conector de otro proceso.
Proceso P
Puerto acordado
socket
mensaje
cliente Servidor

Cualquier socket
puerto

8
Tipos de Servicio Tipos de Servicio
Sockets Sockets
Los conectores deben estar asociados a un
puerto local y a una dirección Internet .
Cada conector se asocia con un
Los procesos pueden usar el mismo conector
protocolo contreto que puede ser UDP
para leer y escribir mensajes. o TCP.
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 Tipos de Servicio


Datagramas UDP Datagramas UDP
Un datagrama UDP se transmite desde el Tamaño del mensaje: el proceso receptor
emisor al receptor sin acuse de recibo ni necesita especificar un buffer de tamaño
reintentos. concreto en el cual se almacenará el
Cualquier proceso que necesite enviar o mensaje. La capa IP permite mensajes de
recibir mensajes debe crear, primero, un hasta 2 16 bytes. La mayoría de los entornos
conector asociado a una dirección internet y impone un límite de 8K (2 13).
a un puerto local. El cliente enlaza su Bloqueo: las operaciones send son no
conector a cualquier puerto libre y el servidor bloqueantes y las operaciones receive son
enlaza su conector a un puerto bien bloqueantes.
conocido.

9
Tipos de Servicio Tipos de Servicio
Datagramas UDP Datagramas UDP
Tiempo límite de espera: el receive con
bloqueo indefinido no resulta adecuado si se
Ejemplos: el DNS está implementado
presentan fallas en el emisor. Se pueden sobre UDP
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 Tipos de Servicio


Comunicación de STREAMS TCP Comunicación de STREAMS TCP
Tamaño de los mensajes: la aplicación puede Control de flujo: se intenta ajustar las
elegir la cantidad de datos que quiere escribir velocidades de los procesos que leen y
o leer del stream. La implementación del escriben.
TCP subyacente decide cuántos datos Duplicación y ordenación de los mensajes: a
recoge antes de transmitirlos como uno o cada paquete IP se le asocia un identificador
más paquetes IP. que hace posible que se puedan detectar y
Mensajes perdidos: el protocolo TCP utiliza rechazar mensajes duplicados, o que se
un esquema de acuse de recibo de los puedan reordenar los mensajes que lleguen
mensajes. duplicados.

10
Tipos de Servicio Tipos de Servicio
Comunicación de STREAMS TCP Comunicación de STREAMS TCP
Destino de los mensajes: un par de procesos Concordancia de ítem de datos: los procesos
establecen una conexión antes de que que se comunican deben estar de acuerdo
puedan comunicarse mediante un stream. en el tipo de datos transmitidos por el stream.
Una vez que se establece la conexión ambos Hilos:el servidor generalmente crea hilos que
procesos leen y escriben sin tener que continuen la comunicación con el cliente.
Cuando no se dispone de hilos se debe
preocuparse por las direcciones IP. Se
comprobar si existen datos en el stream
proveen dos llamadas: connect(cliente) y antes de intentar leerlos; en UNIX se puede
accept (servidor) usar select.

Representación Externa y
Tipos de Servicio
Empaquetado
Cómo se aplicaría el modelo de fallos en La información en los programas se
el caso de los datagramas UDP y de los almacena en estructuras de datos, mientras
que la información se transporta en
stream TCP?
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 Representación Externa y
Empaquetado Empaquetado
Los tipos de datos primitivos,tales como los Para hacer posible que dos computadores
enteros, se almacenan en distintos orden en puedan intercambiar datos se pueden utilizar
los computadores: big- endian y little-endian. dos métodos:
También puede ser diferente la Los valores se convierten en un formato
representación de números en coma flotante. externo acordado antes de la transmisión y
Algunos computadores utilizan la codificación se revierten al formato local en la recepción.
ascii (un byte por caracter), mientras que Los valores se transmiten según el formato
otros utilizan el estándar Unicode: permite del emisor, junto con una indicación del
representar textos en la mayoría de los formato utilizado, y el receptor los convierte si
lenguajes y utiliza dos bytes por carácter. es necesario.

Representación Externa y Representación Externa y


Empaquetado Empaquetado
Al estándar acordado para la representación El desempaquetado (unmarshalling): es el
de estructuras de datos y valores primitivos proceso de desensamblado en el destino
se le denomina XDR (external data para producir una colección equivalente de
representation). datos.
Ejemplos de representación externa de
El empaquetado (marshalling) consiste en
datos:
tomar una colección de ítems de datos y
? La representación común de datos de CORBA.
ensamblarlos de un modo adecuado Puede ser usada por una gran variedad de
(representación externa) para la transmisión lenguajes de programacion.
de un mensaje. ? 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
Comunicación en Grupo
Empaquetado
El desempaquetado y desempaquetado Involucra múltiples procesos.
se llevan a cabo en el middleware sin Un Grupo es una colección de procesos
participación del programador. que trabajan juntos.
Los datos primitivos se pueden Cuando un mensaje se envía al grupo,
empaquetar en forma binaria o en ascii lo deben recibir todos sus miembros.
(el mensaje es más grande). Es un tipo de comunicación uno-a-
muchos en contraste con la
comunicación punto-punto.

Comunicación en Grupo Comunicación en Grupo

r
Los grupos son dinámicos: se pueden
crear y destruir. Un proceso se puede
r r
s r s
unir a un grupo o puede dejar un grupo.
Un proceso puede ser miembro de
r r
r varios grupos a la vez.
Punto-punto 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 Multicast: se crea una dirección especial de
una colección de procesos como una red en la cual pueden escuchar múltiples
máquinas. Cuando un paquete se envía a
abstracción.
esta dirección, se entrega a todas las
Un proceso puede enviar un mensaje a máquinas escuchando por la misma.
un grupo de servidores sin conocer Broadcast: los paquetes que contienen cierta
cuántos son o dónde están. dirección especial se envían a todas las
máquinas. El software debe chequear si se
está o no interesado en el mensaje.

Comunicación en Grupo Comunicación en Grupo


Unicast: El emisor transmite paquetes Grupos abiertos y cerrados
separados a cada uno de los miembros Grupo Abierto
del grupo. No es miembro
del grupo

Está
Grupo Cerrado permitido

14
Comunicación en Grupo Comunicación en Grupo
Membresía al Grupo
Grupos de pares vs grupos jerárquicos Se necesitan métodos para crear y eliminar
Grupo Jerárquico 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
Grupo de pares requiere de algo similar.
? Para dejar un grupo, un miembro envía un
mensaje de despedida a todos los integrantes.

Comunicación en Grupo Comunicación en Grupo


Membresía al Grupo Direccionamiento
Problemas adicionales: Multicast: la dirección del grupo puede ser la
? Si un miembro ´´se cae´´deja el grupo. No hay un misma dirección de multicast. El mensaje se
anuncio de este hecho al resto de los miembros. envía sólo a quellos máquinas que esperan
? Al dejar un grupo el miembro debe dejar de recibir
recibirlo y no a otras.
mensajes. Broadcast: El kernel tiene que interpretar la
? Al incorporarse a un grupo se deben recibir todos dirección y si ningún proceso en la máquina
los mensajes enviados al grupo. es miembro del grupo, el mensaje se borra.
? Qué pasa si un número importante de máquinas
falla, de forma que el mismo grupo deja de 0 1 2 3 4
0 1 2 3 4
funcionar ? x

15
Comunicación en Grupo Comunicación en Grupo
Direccionamiento Primitivas : send, receive, group-send, group-
Unicast: el kernel de la máquina emisora receive, broadcast, multicast, gather, scatter,
deberá tener la lista de máquinas que tienen etc.
procesos receptores del mensaje. Atomicidad
0 1 2 3 4
- Cada receptor envía un Ack (funciona si ninguna
máquina falla.)
- Algoritmo simple:
El emisor envía un mensaje a todos los miembros.
Otro método de direccionamiento es que el emisor provea Se inicializan timers para hacer retransmisiones.
En la llamada la lista de direcciones IP destino. 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 Comunicación en Grupo


Orden:
1
2 Escalabilidad:
A1
tiempo
A0
0 3 Muchos algoritmos trabajan bien cuando el
0 1 2 3 4
0 A1 4 4 número de integrantes del grupo es
A3
A3 5 pequeño...
A4
Qué pasa cuando el número de integrantes es
- Global time ordering: entregar todos los mensajes en el de cientos o miles ?
mismo orden en el que fueron emitidos Cuando se manejan miles de grupos?
- Consistent time order: Si dos mensajes A y B, fueron emitidos Cuando los mensajes tienen que atravesar
en instantes muy cercanos en el tiempo, el sistema elige uno de ellos varias subredes?
Como primero y lo entrega a todo el grupo, seguido del otro
mensaje.

16
Comunicación en Grupo Comunicación en Grupo
Multidifusión IP: una implementación de la
Escalabilidad comunicación en grupo.
Se construye sobre el protocolo IP.
Lan1
Permite que el emisor transmita un único
G1 G2
paquete IP a un conjunto de computadoras
Multicast Lan2 Lan 3 que forman un grupo de multidifusión.
G3 G4 El emisor no tiene que estar al tanto de las
Lan 4 entidades de los receptores individuales o
Gateway
del tamaño del grupo.

Comunicación en Grupo Comunicación en Grupo


Multidifusión IP: una implementación de la Multidifusión IP: una implementación de la
comunicación en grupo. comunicación en grupo.
Los grupos de multidifusión se especifican La multidifusión sólo es accesible a través de
utilizando las direcciones de internet de la UDP.
clase D: una dirección donde los primeros 4 Un computador pertenece a un grupo de
bits son 1110. multidifusión cuando cuando uno o más de
La pertenencia a los grupos de multidifusión sus procesos tienen conectores que
es dinámica: los computadores se pueden pertenecen al grupo.
añadir y borrar a un número arbitrario de Cuando llega el mensaje de multidifusión el
grupos en cualquier instante. computador los reparte a los procesos
adecuados.

17
Comunicación en Grupo Comunicación en Grupo
Multidifusión IP: una implementación de la Los mensajes de multidifusión proporcionan
comunicación en grupo. una infraestructura para construir SD con las
Los paquetes IP pueden multidifundirse tanto siguientes características:
en la red local como en toda Internet. La Tolerancia a fallos basada en servicios
multidifusión dirigida a internet hace uso de replicados.
las posibilidades de multidifusión de los Búsqueda de servidores.
routers.
Mejores prestaciones basada en datos
Las direcciones de multidifusión se pueden replicados.
reservar en forma temporal o permanente. Propagación de notificaciones de los
Existen grupos permanentes incluso cuando
eventos.
no tienen ningún miembro.

Comunicación en Grupo Comunicación en Grupo


Multidifusión IP: Fiabilidad y orden Multidifusión IP: Fiabilidad y orden
Cualquiera de los receptores Si falla un router de multidifusión, los
destinatiorios del datagrama puede miembros del otro lado del router no
perderlo (buffer lleno)
recibirán el mensaje.
También se puede perder un
Los paquetes enviados no llegan
datagrama de un router de multidifusión
a otro. Una sub-red completa perdería necesariamente en el orden que fueron
el mensaje. enviados.

18
import [Link].*
Import [Link].* for (int i = 0; i < 3; i++) {
Public class participanteMultidifusion { DatagramPacket mensajeEntrada =
public static void main(String arg[]){ new DatagramPacket(buffer, [Link]);
try { [Link](mensajeEntrada);
InetAddress grupo = InetAddress. getByName(args[1]); [Link](“ Recibido:” +
MulticastSocket s = new MulticastSocket(6789); new String([Link]));
[Link](grupo); }
byte [] m = args[0].getBytes();
DatagramPacket mensajeSalida = [Link](grupo);
new DatagramPacket(m, [Link], grupo, 67899); } catch(SocketException e) {[Link](…)}
[Link](MensajeSalida); } catch(IOException e) {…}
byte [] buffer = new byte [1000]; }
}

19

También podría gustarte