Programación Concurrente y Tiempo Real Laboratorio Sesión 4. Semáforos & Memoria Compartida [Parte 2] Escuela Superior de Informática Universidad de Castilla-La Mancha Curso 2011/2012 Grado en Ing. Informática Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Sesión 4. Semáforos y M.C. 1. 2. 3. 4. 5. Introducción ● Introducción Análisis del Problema Coordinación de Procesos Tipos de Datos Gestión de Memoria Compartida ● ● ● ● ● Problema tipo Examen de Laboratorio. Se suministra plantilla de código fuente. 80-90 Minutos. No se permiten libros o apuntes. Test de resultado determinista. Competencias a Evaluar: Resolución de Problema de Concurrencia. Dominio de llamadas POSIX. ● Construcción automática con Make. ● Dominio del Entorno de Trabajo. ● ● Curso 2011/2012 Grado en Ing. Informática Curso 2011/2012 Trp 3 de 31 Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Análisis del Problema de Ejemplo Análisis del Problema de Ejemplo Traducción Concurrente Traducción Concurrente Entero 1 2 ... 25 26 27 28 ... 51 52 53 54 55 56 57 Entero 1 2 ... 25 26 27 28 ... 51 52 53 54 55 56 57 Traducción a b ... y z A B ... Y Z . , ! ? _ Traducción a b ... y z A B ... Y Z . , ! ? _ ASCII 97 98 ... 121 122 65 66 ... 89 90 46 44 33 63 95 ASCII 97 98 ... 121 122 65 66 ... 89 90 46 44 33 63 95 Entrada Curso 2011/2012 Trp 4 de 31 Curso 2011/2012 TRADUCCIÓN Ejemplo: “26.27.2.1.56” → 122 65 98 97 63 = “zZba?” Valores ASCII Traducidos Caracteres Trp 5 de 31 Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Análisis del Problema de Ejemplo Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Análisis del Problema de Ejemplo ./exec/cliente 34.15.12.1.55 2 2 Traducción Concurrente Entero 1 2 ... 25 26 27 28 ... 51 52 53 54 55 56 Traducción a b ... y z A B ... Y Z . , ! ? 57 _ ASCII 97 98 ... 121 122 65 66 ... 89 90 46 44 33 63 95 cliente Entrada TRADUCCIÓN Ejemplo: “26.27.2.1.56” → 122 65 98 97 63 = “zZba?” Valores ASCII Traducidos cliente puntuación Caracteres traducción traducción traducción Curso 2011/2012 Trp 6 de 31 Curso 2011/2012 Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Análisis del Problema de Ejemplo ./exec/cliente 34.15.12.1.55 2 2 Tamaño Subcadena Traductores cliente Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Análisis del Problema de Ejemplo ./exec/cliente 34.15.12.1.55 2 2 Cadena a traducir Trp 7 de 31 cliente 34 15 12 1 55 Curso 2011/2012 Trp 8 de 31 Curso 2011/2012 Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Análisis del Problema de Ejemplo cliente trad1 tra c l(“ exe ductor ”) execl(“tra Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Análisis del Problema de Ejemplo ./exec/cliente 34.15.12.1.55 2 2 ) tor ” du c Trp 9 de 31 ./exec/cliente 34.15.12.1.55 2 2 trad2 trad1 cliente exe cl(“ p unt trad2 uac i ón” ) 34 15 12 1 55 34 15 12 1 55 puntuación Curso 2011/2012 Trp 10 de 31 Curso 2011/2012 Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Análisis del Problema de Ejemplo cliente Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Análisis del Problema de Ejemplo ./exec/cliente 34.15.12.1.55 2 2 trad1 ./exec/cliente 34.15.12.1.55 2 2 trad2 al 1” de l 0 e c u “trad trad1 cliente 34 15 12 1 55 trad2 al 3 ” e del 2 “traduc 34 15 12 1 55 puntuación Curso 2011/2012 Trp 11 de 31 Trp 12 de 31 puntuación Curso 2011/2012 Trp 13 de 31 Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Análisis del Problema de Ejemplo Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Análisis del Problema de Ejemplo ./exec/cliente 34.15.12.1.55 2 2 ./exec/cliente 34.15.12.1.55 2 2 trad1 trad2 cliente trad1 trad2 cliente 34 15 12 1 55 72 15 12 1 55 puntuación Curso 2011/2012 Trp 14 de 31 puntuación Curso 2011/2012 Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Análisis del Problema de Ejemplo Trp 15 de 31 Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Análisis del Problema de Ejemplo ./exec/cliente 34.15.12.1.55 2 2 ./exec/cliente 34.15.12.1.55 2 2 trad1 trad2 cliente trad1 trad2 cliente 72 15 108 1 55 72111108 1 55 puntuación Curso 2011/2012 Trp 16 de 31 puntuación Curso 2011/2012 Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Análisis del Problema de Ejemplo ./exec/cliente 34.15.12.1.55 2 2 trad1 trad2 l 4” l4a e de trad1 cliente 7211110897 55 55 7211110897 55 puntuación Curso 2011/2012 Trp 18 de 31 puntuación Curso 2011/2012 Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Análisis del Problema de Ejemplo Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC ./exec/cliente 34.15.12.1.55 2 2 trad1 trad2 “tr trad1 33 7211110897 33 puntuación Curso 2011/2012 trad2 cliente !” ido uc ad 7211110897 55 Trp 19 de 31 Análisis del Problema de Ejemplo ./exec/cliente 34.15.12.1.55 2 2 cliente trad2 ” se 55? mo e el “có duc tra uc “trad Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Análisis del Problema de Ejemplo ./exec/cliente 34.15.12.1.55 2 2 cliente Trp 17 de 31 Trp 20 de 31 puntuación Curso 2011/2012 Trp 21 de 31 Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Análisis del Problema de Ejemplo Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Análisis del Problema de Ejemplo ./exec/cliente 34.15.12.1.55 2 2 Resultado: “Hola!” ./exec/cliente 34.15.12.1.55 2 2 Resultado: “Hola!” trad1 trad2 cliente trad1 trad2 cliente 7211110897 33 7211110897 33 puntuación Curso 2011/2012 Trp 22 de 31 puntuación Curso 2011/2012 Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Coordinación de Procesos Trp 23 de 31 Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Coordinación de Procesos cliente traducción 1. Obtener cadena a traducir (línea órdenes) 2. Creación de Recursos Compartidos Semáforos Segmentos de Memoria Compartida traducción traducción 3. Lanzar N procesos de Traducción traducción 4. Lanzar 1 proceso de Puntación puntuación 5. Solicitar traducción de subvectores. 6. Obtener traducciones y mostrar resultado. Curso 2011/2012 Trp 24 de 31 Bucle 1. Obtener Orden 2. Traducir subvector Para cada carácter Si es de puntuación → Encargar a Sino traducir directamente Curso 2011/2012 Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Coordinación de Procesos puntuación Trp 25 de 31 Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Coordinación de Procesos puntuación (s) OrdenLista (s) OrdenLeida (s) Fin (mc) Orden Bucle 1. Obtener Carácter_de_Puntuación 2. Traducir Carácter_de_Puntuación trad1 trad2 ... tradn cliente (s) InicioPuntuación (s) FinPuntuación (mc) OrdenPuntuación puntuación Curso 2011/2012 Trp 26 de 31 Curso 2011/2012 Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Tipos de Datos Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Tipos de Datos (mc) Orden struct orden { int inicio; int fin; } (mc) Orden trad1 trad2 ... tradn cliente struct orden { int inicio; int fin; } cliente (mc) OrdenPuntuación char ordPun; Trp 28 de 31 trad1 trad2 ... tradn (mc) Vdatos struct vdatos { char v[MAXARRAY]; } (mc) OrdenPuntuación char ordPun; puntuación Curso 2011/2012 Trp 27 de 31 puntuación Curso 2011/2012 Trp 29 de 31 Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC Gestión de Memoria Compartida Gestión de Memoria Compartida Creación de Segmentos (cliente) Uso de segmentos creados (ej. traduccion) struct vdatos *vector; int shmMCVec; /* Creación del segmento */ shmMCVec = shm_open(MEMVEC, O_CREAT|O_RDWR, 0666); Introducción | Análisis | Coordinación | Tipos de Datos | Gestión MC struct vdatos *vector; int shmMCVec; (mc) Vdatos struct vdatos { char v[MAXARRAY]; } /* Apertura del segmento */ shmMCVec = shm_open(MEMVEC, O_CREAT|O_RDWR, 0666); (mc) Vdatos struct vdatos { char v[MAXARRAY]; } /* Tamaño */ ftruncate(shmMCVec, sizeof(struct vdatos)); /* Tamaño */ ftruncate(shmMCVec, sizeof(struct vdatos)); /* Mapeo del segmento de memoria compartida */ vector = mmap(NULL, sizeof(struct vdatos), PROT_READ | PROT_WRITE, MAP_SHARED, shmMCVec, 0); /* Mapeo del segmento de memoria compartida */ vector = mmap(NULL, sizeof(struct vdatos), PROT_READ | PROT_WRITE, MAP_SHARED, shmMCVec, 0); Eliminación de Segmentos (cliente) close(shmMCVec); Curso 2011/2012 shm_unlink(MEMVEC); Trp 30 de 31 Curso 2011/2012 Trp 31 de 31