1 IPC - Inter Process Communication Memoria – Pipes – Sockets – Rendez Vous - Mailbox.

Slides:



Advertisements
Presentaciones similares
MOVIMIENTO JOVENES DE LA CALLE CIUDAD DE GUATEMALA chi siamo quienes-somos qui sommes-nous who we are attività actividades activités activities scuola.
Advertisements

Construcción de Sistemas Distribuidos “Transacciones Distribuidas”
SIES – SISTEMA INTEGRADO DE EDUCACIÓN SUPERIOR
1 Datos sobre webloggers Datos extraidos de la encuesta a webloggers disponibles en la web de los autores.
Respuestas Jack y la mata de frijoles /60. 1.vivía 2.estaba 3.estaba 4.era 5.llamaba 6.gustaba 7.comía 8.dormía 9.gustaba 10.llamó 11.dijo 12.había 13.quería.
DATSI, FI, UPM José M. Peña Programación en C DATSI, FI, UPM José M. Peña Programación en C.
Los números del 0 al cero uno dos tres cuatro cinco 6 7 8
50 formas de decir “Te Amo”.
Curso de Java Java – Redes Rogelio Ferreira Escutia.
Tabla de Contenido Concurrencia.
1 LA UTILIZACION DE LAS TIC EN LAS MICROEMPRESAS GALLEGAS. AÑO mayo 2005.
1 INFORME RESUMEN SOBRE EL NIVEL DE UTILIZACION DE LAS TIC EN LAS EMPRESAS GALLEGAS ( Resumen PYMES ) Noviembre de 2004.
1 INFORME RESUMEN SOBRE EL NIVEL DE UTILIZACION DE LAS TIC EN LAS EMPRESAS GALLEGAS (MICROEMPRESAS, resultados provisionales) 29 de julio de 2004.
AYUDA A LA FUNCIÓN DOCENTE Internet
TEMA 2 MÚLTIPLOS Y DIVISORES
02- Plan Organización Docente v.2 Noviembre 2009 SIES – SISTEMA INTEGRADO DE EDUCACIÓN SUPERIOR.
02- PLAN DOCENTE Febrero 2009 SIES – SISTEMA INTEGRADO DE EDUCACIÓN SUPERIOR.
01- OFERTA FORMATIVA v.2 Noviembre 2009 SIES – SISTEMA INTEGRADO DE EDUCACIÓN SUPERIOR.
Respuestas Buscando a Nemo.
Memoria Compartida Llave de acceso Segmento Compartido 1234 estructura
ABECEDARIO FIGURAS GEOMÉTRICAS NÚMERO
Clase 16 Dos ciegos. El mundo es sanado. Jesús es rechazado otra vez.
Mulán /75 puntos. 1.Querían 2.Gustaban 3.Escuchó 4.Dijo 5.Tenía 6.Ayudaron 7.Maquillaron 8.Arreglaron 9.Dio 10.Estaba 11.Iba 12.Quería 13.Salió 14.Gritó
Los Objetos de la Clase Escriban la palabra (the word) en español para los objetos de la clase (#1-20).
CLASE 3 SOFTWARE DEL MICROPROCESADOR
5 pt 5 pt 5 pt 5 pt 5 pt 10 pt 10 pt 10 pt 10 pt 10 pt 15 pt 15 pt
MOVIMIENTO JOVENES DE LA CALLE CIUDAD DE GUATEMALA chi siamo quienes-somos qui sommes-nous who we are attività actividades activités activities alimentazione.
C ONFIGURACIÓN C UENTAS D E C ORREO ZTE N281. C ONFIGURACIÓN C UENTAS D E C ORREO ZTE N281 1-Ingrese a menú 2-Ingrese a Mensajes 3-Ingrese a Correo 4-Seleccione.
1. Apoyo exterior sobre ala inferior de viga de acero
Estrategias en el aula con alumnos con problemas de atención y comportamiento Curso Actividad formativa: Seminario CRA “Entreviñas” - Fuensaldaña.
Capa de Transporte.
-17 Expectativas sobre la situación económica (Europa) Septiembre 2013 Indicador > +20 Indicador 0 a +20 Indicador 0 a -20 Indicador < -20 Total Unión.
© 2006 Cisco Systems, Inc. Todos los derechos reservados.Información pública de Cisco 1 Configuración de un switch Conmutación y conexión inalámbrica de.
Phone2Wave-Server Manual de Operación.
Repaso del capítulo Primer Paso
TEMA 2 Técnicas básicas de construcción de aplicaciones distribuidas
Sockets y Threads en JAVA
Parte 3. Descripción del código de una función 1.
INFORME USDA NOVIEMBRE TRIGO 2 MERCADO INTERNACIONAL (Millones de Toneladas) 3.
Trabajar en una pequeña o mediana empresa o ISP. Capítulo 7
Calendario 2008 Imágenes variadas Venezuela Elaborado por: MSc. Lucía Osuna Wendehake psicopedagogiaconlucia.com Enero 2008.
EL OSO APRENDIZ Y SUS AMIGOS
1 PROYECTO DE PRESUPUESTO DE EGRESOS DE LA FEDERACION 2002 COORDINACIÓN DE POLITICA ECONOMICA GP-PRD.
Ecuaciones Cuadráticas
Comunicación entre procesos en Linux
Servidor.pl #!/usr/local/bin/perl use Socket; ($port) $port = 2345 unless $port; Empleamos el módulo Socket, equivalente a las definiciones que.
El Uso de las Redes Sociales Prof. Ayleen Martínez Ramos Presidenta de APEC
Comunicación y sincronización entre procesos
Cliente.pl #!/usr/local/bin/perl use Socket; ($them, $port) $port = 2345 unless $port; $them = 'localhost' unless $them; El primer argumento es.
CULENDARIO 2007 Para los Patanes.
0 1 ¿Qué hora es? By: Craig Tillmann Revised by: Malinda Seger Coppell High School Coppell, TX.
BEATRIZ LAFONT VILLODRE
¿Quién? ¿Qué? ¿Dónde? ¿Cuándo? ¿Cómo? ¿Por qué?
Servidor de Batalla Naval.
SpanishNumbers Uno 2 Dos 3 Tres 4 Quatro.
MSc. Lucía Osuna Wendehake
Calendario 2009 “Imágenes variadas” Venezuela Elaborado por: MSc. Lucía Osuna Wendehake psicopedagogiaconlucia.com Enero 2009.
CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (Seminaris de CASO) Autors Christophe Fontano Julien Alagnou Socket.
Slide 7-1 Copyright © 2003 Pearson Education, Inc. Figure: Estructuras de datos.
Multiprogramación Procesos Cecilia Hernández
Estructuras de control
Manual de Procedimientos Procedimiento de ejecución del programa de
CHAPTER 4 VOCABULARY: PART II
FUNDAMENTOS DE CALIDAD EN LA GESTIÓN PÚBLICA
Unidad III Administración de procesos
Comunicación entre Procesos por pase de mensajes Universidad Simón Bolívar Departamento de Computación y T.I Sistemas de operación III CI-4822 Prof. Yudith.
ELO3091 Interfaz de Socket Agustín J. González ELO309.
Sockets programming. Tipos de datos. Tipos de datos mas usados en programas cliente-servidor: u-char Unsigned 8-bit character. u-short Unsigned 16-bit.
LABORATORIO DE ESTRUCTURA DE COMPUTADORES II Desarrollo de aplicación Cliente-Servidor.
Nivel de Transporte en Internet
Transcripción de la presentación:

1 IPC - Inter Process Communication Memoria – Pipes – Sockets – Rendez Vous - Mailbox

2 Memoria Compartida

3 Bibliotecas #include Struct shmid_ds { –struct ipc_perm Shm_perm; (permisos) -intshm_segz(tamaño segmento) –struct XXXshm_YYY(depende de la info) –ushortshm_cpid(creador pid) –Tiempos...

4 Memoria Compartida (pasos) Obtener manejador de segmentos “Atar” seg. a una estructura de memoria Leer/Escribir “Desatar” Borrar

5 Memoria Compartida id =shmget(key, size, flag) key = ftok (file_name, id_key) size = tamaño flag = permisos int id (manejador de segmento)

6 Memoria Compartida ptr = shmat(id, addr, flag) (ata un segmento en el espacio de direcciones del proceso) Ejemplo: Struct info {int cant_lec; int cant_escr; } ; Struct info *ptr; ptr = (struct info *) shmat(id, 0, 0) Uso la memoria compartida con *ptr.cant_lec

7 Memoria Compartida shmdt(addr) desata sin borrar shmctl(id, cmd, buf) –id manejador de segmento –cmd comando –buf almacena info del estado

8 Memoria Compartida (secuencia) struct info {int cant_escr } ; struct info *ptr id = shmget(key,size,...) ptr = shmat(id, 0, 0); *ptr.cant_escr... (uso) shmdt(ptr) shmctl(id,IPC_RMID,0)

9 DSHM (Memoria compartida distribuida) Basado en páginas Mapeador de Páginas Primitivas similares a lo anterior El pedido de un página no existente genera page-fault para traer la página Mecanismos de consistencia

10 DSHM (Memoria comparida distribuida) Basada en Objetos (CORBA) (fijos)

11 DSHM (Memoria comparida distribuida) Modelo

12 DSHM (Memoria comparida distribuida) Modelos Request typeFailure semanticsDescription SynchronousAt-most-onceCaller blocks until a response is returned or an exception is raised One-wayBest effort deliveryCaller continues immediately without waiting for any response from the server Deferred synchronous At-most-onceCaller continues immediately and can later block until response is delivered

13 DSHM (Memoria comparida distribuida)

14 DSHM (Memoria comparida distribuida)

15 DSHM (Memoria comparida distribuida) Agentes (móbiles)

16 Pipes

17 Pipes #include int dup2(int fd1, int fd2);

18 Pipes (who | more) /* Archivo del programa whomore.c */ main() { int fds[2] pipe(fds); /* Hijo1 reconecta stdin a parte baja del pipe y cierra alta */ if (fork() == 0) { dup2(fds[0], 0); close(fds[1]); execlp(“more”,”more”,0); } else { /* Hijo2 reconecta stdout a parte alta del pipe y cierra baja */ if ( fork() == 0 ){ dup2(fds[1], 1); close(fds[0]); execlp(“who”, “who”, 0); } else {/* padre cierra ambas partes y espera a los hijos */ close(fds[0]); close(fds[1]); wait(0); wait(0): }

19 Pipes Las limitaciones de los pipes residen en: 1. Pipes son unidireccionales. La solución para lograr comunicación en dos sentidos es crear dos pipes. 2. Pipes no pueden autentificar al proceso con el que mantiene comunicación. 3. Pipes deben de ser pre-arreglados. Dos procesos no relacionados no pueden conectarse vía pipes, deben tener un ancestro común que cree el pipe y se los herede. 4. Pipes no trabajan a través de una red. Los dos procesos deben encontrarse en la misma máquina.

20 Sockets 1º) El proceso servidor crea un socket con nombre y espera la conexión. 2º) El proceso cliente crea un socket sin nombre. 3º) El proceso cliente realiza una petición de conexión al socket servidor. 4º) El cliente realiza la conexión a través de su socket mientras el proceso servidor mantiene el socket servidor original con nombre.

21 Modelo TCP/IP

22 Trama Telnet

23 Esquema de comunicacióm sockets

24 Entrada de descriptor de socket

25 Estructura de Sockets

26 System calls socket (dominio, tipo, protocolo) Dominio = interno – externo Tipo = d-gram – stream – RAW Protocolo = UDP – TCP – ICMP Devuelve un sockdf

27 System calls socket (dominio, tipo, protocolo) bind (asocia socket con fd o puerto) listen ( long. de pedido y queda a la escucha) accept ( escucha al socket y acepta conexión hostent (obtiene información de nodo remoto)

28 Sin Conexón

29 Sin Conexión s = socket(AF_INET, SOCK_DGRAM, 0); bind (s, sender_adress, server_address-length); sendto (s, “msj”, receiver_address); Close(s) Receiver s = socket(AF_INET, SOCK_DGRAM, 0); bind (s, receiver_address, receiver_address-length); amount = recvfrom ( s, buffer, sender_address); close (s)

30 Con Conexión

31 Con Conexión Client 4) socket = (AF_INET, SOCK_STRAM, 0); 6) connect (s, server_addres, server_address_length); 7) write (s, “msj”, msg_length); close (s) Server 1) socket = (AF_INET, SOCK_STRAM, 0); 2) bind ( s, server_address, server_address_length); 3) listen (s, backlog); 5) snew = accpet (s, client_address, client_address_length); 8) nbytes = read (snew, buffer, amount); close (snew) close (s)

32 Intercambio de Mensajes (Rendez Vous) send y receive bloqueantes tarea Productor; begin ; Send msg to Consumidor end; tarea Consumidor; begin Receive msg from Productor; end;

33 Intercambio de Mensajes (Rendez Vous) send y receive bloqueantes Abstracción V(x) P(y) SEND P(x) V(y) RECEIVE

34 Intercambio de Mensajes (Rendez Vous extendido) send y receive bloqueantes Abstracción (necesita conocer un ack) V(x) SEND P(y) P(x) RECEIVE If ok Then V(y)

35 Intercambio de Mensajes (Rendez Vous asimétrico) Tarea T1; begin Send x to T2; end; Tarea T2; begin Accept Send (x); y := x; end;

36 Intercambio de Mensajes (Rendez Vous asimétrica y semisincrónica) Asimétrica: un send asincrónico continua su ejecución sin bloquearse. En el caso de receive asincrónico el receptor continúa su ejecución aunque no haya llegado nada Semisincrónica: send no bloqueantes y receive bloqueantes

37 Comunicación indirecta Mailbox Indirecto: La comunicación se mantiene a través de una estructura de datos compartida (llamada mailbox) Ventaja: desacopla al emisor y al receptor, permitiendo mayor flexibilidad en el uso de los mensajes. Desventaja: Centraliza. La utilización del mailbox es posible en las modalidades: –Uno a uno, también llamado enlace privado. –Muchos a uno, que corresponde al modelo cliente/servidor. –Uno a muchos, también llamado broadcast. –Muchos a muchos, que se puede visualizar como la posibilidad de tener muchos servidores Por lo general los mailbox manejan disciplinas de colas en modalidad FIFO, pero también es posible el manejo por prioridades.

38 Comunicación indirecta Mailbox Es posible manejar los modelos de: Exclusión Productor – Consumidor Lectores - Escritores

39 Mailbox excluyente Se utilizan receive bloqueantes y send no bloqueantes. El mailbox se lo utiliza como contenedor de un token. /* programa exclusion-mutua */ int n= /* número de procesos */ void p(int i) { mensaje msj; while (cierto) { receive (exmut, msj); /*si el mailbox está vacío el proceso se detiene */ /* sección crítica */ send (exmut, msj); /* resto */ } void main () { crear-mailbox (exmut); send (exmut, token); parbegin (p1, p2, p3,..., pn); }

40 Mailbox Productor - Consumidor Se utilizan receive bloqueantes y send no bloqueantes. Se utilizan dos buzones, puede_consumir y puede_producir Capacidad = /* capacidad del buffer */; Int i; Void productor() { mensaje msjp; while (cierto); { receive (puede_producir, msjp); msjp = producir(); send (puede-consumir, msjp); }

41 Mailbox Productor - Consumidor void consumidor() { mensaje msjc; while (cierto) { receive (puede_consumir, msjc); consumir(msjc); send (puede_producir, token); }

42 Mailbox Productor - Consumidor void main() { crear_mailbox (puede_producir); crear_mailbox (puede_consumir); for (int i = 1, i <= capacidad; i++) send (puede_producir, token); send (puede_consumir, null); parbegin (productor, consumidor) parend; }

43 Mailbox Lectores - Escritores Se utilizan 3 mailbox pedir_lectura pedir-escritura y terminado. Además de los procesos lector y escritor se utiliza uno auxiliar llamado controlador que actúa según el valor de una variable cont, según lo siguiente: Cont > 0 no hay escritores esperando Cont = 0 pendientes escrituras, esperar terminado Cont < 0 escritor en espera Cantidad máxima de lectores = 100

44 Mailbox Lectores - Escritores void lector(int i) { mensaje msjl; while (cierto) { msjl = i; send (pedir-lectura, msjl); receive (buzón[i], msjl); LEER; msjl = i; send (terminado, msjl); }

45 Mailbox Lectores - Escritores void escritor(int j) { mensaje msje; while (cierto) { msje=j; send (pedir_escritura, msje); receive (buzón[j], msje); ESCRIBIR; msje = j; send (terminado, msje) }

46 Mailbox Lectores - Escritores void controlador() { while(cierto) { if cont > 0 { if (!vacío (terminado)) { receive (terminado, msj); cont++ } else if (!vacío (pedir_escritura))

47 Mailbox Lectores - Escritores { receive (pedir_escritura, msj); escritor_id = msj-id; cont = cont – 100; } else if (!vacío (pedir_lectura)) { receive (pedir_lectura, msj)); cont--; send(msj_id, “OK”); }

48 Mailbox Lectores - Escritores if (cont == 0) { send (escritor_id, “OK”); receive (terminado, msj); cont = 100; } while (cont < 0) { receive (terminado, msj); cont ++; }