EJERCICIO DE SEMAFOROS Y MEMORIA COMPARTIDA
Universidad de Castilla-La Mancha
Programación Concurrente y Tiempo Real
Examen Práctica Semáforos y Memoria Compartida
Examen de Laboratorio – 22 de Marzo de 2013
Examen de Semáforos y Memoria Compartida
APELLIDOS: ___________________________________________________________________
NOMBRE: ___________________________________________ DNI:______________________
Indicaciones:
●
●
●
●
Calificación
Quite de la mesa cualquier libro, apunte y/o teléfono móvil.
Debe anotar su solución por escrito en el espacio disponible en este cuestionario.
Cuando tenga una solución al ejercicio muéstrela al profesor (compilación + ejecución).
Tiempo para realizar el examen: 1 hora y 30 minutos.
Enunciado
Construya, utilizando ANSI C estándar,dos ejecutables que modelen el siguiente sistema de
procesamiento concurrente. La simulación constará de un proceso cliente que creará un vector
que contendrá los n primeros elementos de la sucesión de Fibonacci1. A continuación, la suma de
estos n elementos será calculada concurrentemente por un conjunto de procesos de sumatorio.
El usuario ejecutará un proceso cliente indicándole tresparámetros:
./exec/cliente
Este proceso cliente creará un vector con tantos elementos como se indique en n_elem_fib,
representando cada uno de ellos al elementos correspondiente de la sucesión de Fibonacci. En
n_proc_sumatorio se indicará el número de procesos de sumatorio que se lanzarán para su
cálculo. Finalmente, tamsv será el tamaño máximo de cada subvector (cada proceso sumatorio calculará un sumatorio parcial cuyo resultado actualizará convenientemente el campo result de
una variable de memoria compartida).
Los procesos sumatorio atenderán peticiones de cálculo de sumatorios parciales hasta que el
cliente les envíe la señal de terminación (señal SIGINT). En cada petición, el proceso cliente les
indicará el índice de inicio y fin de cada subvector, actualizando éstos en elcampo result el
resultado parcial del sumatorio.
Consideraciones:
•
•
1
No es obligatorio realizar la comprobación de errores.
Preste especial atención a lograr el máximo paralelismo posible en la solución.
La sucesión de Fibonacci es una sucesión infinita de número naturales que comienza con 0 y 1 y, a partir de éstos,
cada elemento es la suma de los dos anteriores (0, 1, 2, 3, 5,8, 13, 21, 34, 55, 89, 143, ...)
Página 1 de 7
Escuela Superior de Informática
Universidad de Castilla-La Mancha
Programación Concurrente y Tiempo Real
Examen Práctica Semáforos y Memoria Compartida
Resolución
Utilice el código fuente suministrado a continuación como plantilla para resolver el ejercicio. Este
código fuente no contiene errores y no debe ser modificado (salvo lainicialización de los semáforos
en el proceso cliente). Únicamente debe incorporar su código en la sección indicada.
Indique a continuación el valor de inicialización de los semáforos (código en cliente.c):
Línea de Código
Semáforo
Uso
Inicialización
192
ordenlista
Despierta a un proceso de sumatorio
193
ordenleida
Indica al cliente que la orden fue leída
194fin
El sumatorio del subvector fue
calculado
195
mutex
Exclusión mutua para actualizar el
campo result
Test de Resultado Correcto
Una vez resuelto el ejercicio, si ejecuta el comando ./exec/cliente 10 3 3 el resultado debe ser
algo similar a (naturalmente cambiará el PID de los procesos sumatorio y probablemente el orden
de atención de las peticiones):[PID 30146] Ini 0 Fin 2 ResParcial 2
[PID 30145] Ini 3 Fin 5 ResParcial 10
[PID 30144] Ini 6 Fin 8 ResParcial 42
[PID 30146] Ini 9 Fin 9 ResParcial 34
Resultado: 88
0
1
1
[PID 30146]
Ini 0 Fin 2
R. Parcial 2
2
3
5
8
[PID 30145]
Ini 3 Fin 5
R. parcial 10
+
+
13
21
34
[PID 30144] [PID 30146]
Ini 6 Fin 8
Ini 9 Fin 9
R. parcial 42 R. parcial 34
88
+
+...
Regístrate para leer el documento completo.