Sistemas Distribuidos. Grado en Ingeniería Informática

Anuncio
Sistemas Distribuidos. Grado en Ingeniería Informática. Curso 2012/2013
Ejercicio Propuesto 1: Comunicación y sincronización de procesos
Se desea sincronizar N procesos ligeros que ejecutan en la misma máquina de acuerdo a los
siguientes eventos:
1. Todos los procesos deberán comenzar su ejecución al mismo tiempo.
2. Los procesos deberán realizar un total de F fases. En cada fase, un proceso iterará M veces y en
cada iteración realizará lo siguiente:
a) Incrementar un contador compartido. Para acceder a dicho contador implementará una
sección crítica usando colas de mensajes. Al inicio de cada fase el contador compartido se
inicializará a 0.
b) Esperar o bloquearse durante un tiempo aleatorio. Se proporcionará al alumno un código C
que devuelve el número de microsegundos que el proceso deberá bloquearse.
c) Al final de cada iteración, el proceso imprimirá un carácter CHAR (e.g. ‘|’). Este carácter se
deberá imprimir en la salida estándar (pantalla) en la posición siguiente a la del último
carácter escrito por ese proceso. Se proporcionará al alumno un código C para situar el
cursor en la posición correspondiente de la pantalla.
3. Los procesos que terminan cada fase deberán esperar a que el resto de procesos la completen. Es
decir, ningún proceso comenzará la fase i (i<=F) hasta que la fase i-1 haya sido completada por todos
los procesos. Este punto de sincronización se conseguirá implementando una función barrera.
4. Se vuelve al paso 2. El programa termina cuando todos los procesos completan las F fases. El
alumno deberá implementar un programa en C que satisfaga los requisitos anteriores. El programa
aceptará cuatro argumentos de entrada, y se ejecutará de la siguiente manera:
./speeds <N> <F> <M> <CHAR>
donde N es el número de procesos que deberán sincronizarse, F es el número de fases, M es el
número de veces que se itera en cada fase (equivalente al número de veces que se imprime el
carácter CHAR) y CHAR es cualquier carácter alfanumérico válido.
Se pide:
a) Decisiones de diseño para la implementación del programa speeds.
b) Código C correspondiente al programa speeds.
El alumno puede utilizar el siguiente código de apoyo:
a) Código ejecutable de prueba del programa speeds.
b) Código C correspondiente a la función gotoxy(), que situa el cursor en una posición
determinada de la pantalla y a la función get_useconds(), que devuelve el número de
microsegundos que deberá dormir el proceso utilizando usleep.
La entrega se realizará mediante Aula Global. La fecha límite de entrega es: 01/03/2013.
Descargar