PCTR P2 B02 Semaforos MC Plantilla
Universidad de Castilla-La Mancha
Programación Concurrente y de Tiempo Real
Modelo B02 – Semáforos y Memoria Compartida
Prueba de Laboratorio
Modelo B02 – Semáforos y Memoria Compartida
APELLIDOS: ___________________________________________________________________
NOMBRE:
_____________________________ GRUPO DE LABORATORIO: __________
Indicaciones:
●
●
●
●Calificación
No se permiten libros, apuntes ni teléfonos móviles.
Cuando tenga una solución al ejercicio (compilación + ejecución) muéstrela al profesor.
Debe anotar su solución por escrito en el espacio disponible en este cuestionario.
Tiempo para realizar la prueba: 90 minutos.
Enunciado
Construya, utilizando ANSI C estándar, los ejecutables que modelen un sistema que calcule la fracción
canónica(irreducible) a partir de la descomposición del numerador y denominador como producto de sus
factores primos del modo que se detalla a continuación:
•
•
Un proceso manager recibe el numerador y el denominador de una fracción. Éstos se deberán
descomponer factorialmente y sus potencias deberán ser reducidas. Para ello, se lanzará una serie de
procesos factorer. Habrá un proceso factorer paracada número primo, es decir, uno para el 2, otro
para el 3, otro para el 5, etc. hasta N_PRIME_NUMBERS.
Cada uno de estos procesos factorer se encarga de calcular cuántas veces el numerador y el
denominador que el proceso manager ha recibido son divisibles entre el número primo que dicho
proceso factorer debe procesar, y que le ha sido indicado por el proceso manager. A continuación,
deberá eliminaraquél con menor exponente, dejando la diferencia al contrario. Por ejemplo, si el
proceso manager recibe los números 28 y 42, entonces se tendrá que calcular:
2
1
1
28
2 ∗7
2
= 1 1 1= 1
42 2 ∗3 ∗7 3
Para ello, el proceso factorer encargado de procesar el nº primo 2 deberá calcular que puede dividir el
numerador 2 veces y el denominador 1 vez, dejando en el numerador 2 1; el proceso factorerencargado de
procesar el nº primo 3 deberá calcular que puede dividir el numerador 0 veces y el denominador 1 vez,
dejando en el denominador 31; y el proceso factorer encargado de procesar el nº primo 7 deberá calcular que
puede dividir el numerador 1 vez y el denominador 1 vez, eliminando por completo las potencias asociadas a
éste.
Para facilitar la implementación, dispone de vectores paraalmacenar los exponentes de las potencias de
los números primos en los que se descomponen el numerador y denominador (ver struct TData_t). Así, los
valores ya simplificados para los datos del ejemplo anterior serán (para los 4 primeros números primos):
Numerador: 21 30 50 70 → vector numerator_exponent [1, 0, 0, 0]
Denominador: 20 31 50 70 → vector denominator_exponent [0, 1, 0, 0]
Consideraciones:
•
••
No es obligatorio, aunque sí muy recomendable, realizar la comprobación de errores.
Preste especial atención a lograr el máximo paralelismo posible en la solución.
Utilice la primitiva memcpy en el proceso factorer para copiar, en una variable local, la orden recibida del
proceso manager.
Página 1 de 10
Escuela Superior de Informática
Universidad de Castilla-La Mancha
Programación Concurrentey de Tiempo Real
Modelo B02 – 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 no debe ser
modificado (salvo la inicialización de los semáforos en el proceso manager). Únicamente debe incorporar su código en
la sección indicada. No realice comprobación de errores en los parámetros.
Indique acontinuación el valor de inicialización de los semáforos (código en manager.c):
Línea Código
Semáforo
Uso
371
SEM_TASK_READY
Nueva orden; despierta a un proceso factorer
372
SEM_TASK_READ
Indica al manager que la orden fue leída
373
SEM_TASK_PROCESSED
El proceso factorer terminó su trabajo
Inicialización
Test de Resultado Correcto
Una vez resuelto el ejercicio, si ejecuta el...
Regístrate para leer el documento completo.