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