8x1 - Escuela Superior de Informática - Universidad de Castilla

Anuncio
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
Descargar