Barreras con rendezvous y locks

Anuncio
Trabajo Sistemas Operativos
Cuarto curso de Ingeniería en Telecomunicación
Problema 1: Barrera con rendezvous y locks
En programación concurrente se denomina barrera a la abstracción que permite sincronizar un conjunto de
N procesos. Cada proceso que llega a la barrera se bloquea hasta que hayan llegado los N. Una vez han llegado todos, continúan su ejecución. Este mecanismo es similar a a rendezvous, pero para N procesos y sin
que se intercambien valores. Una barrera garantiza que, una vez pasada, el código anterior a la barrera ya
se ha ejecutado.
Imaginemos que tenemos un sistema gráfico que utiliza un procesador Cell" con 8 unidades de
procesamiento (SPUs, pequeños procesadores) en su interior. En él se utilizarán 8 procesos, uno por SPU,
con memoria compartida creados con rfork(2). Cada una de estas unidades dibuja una zona de la pantalla
después de realizar ciertos cálculos de 3D. Queremos utilizar una barrera para garantizar que los redibujados de la pantalla se hacen de forma simultánea.
Los cálculos matemáticos se simularán mediante un sleep(2) de 2 segundos y el dibujado de pantalla
mediante la impresión del identificador del procesador (un entero diferente para cada uno).
La barrera se implementará mediante el uso de locks como los descritos en lock(2) y rendezvous(2)
La barrera se debe implementar en un fichero separado que contendrá al menos tres funciones:
Barrier *newbarrier(int nprocs) crea una barrera para nprocs procesos.
void waitbarrier(Barrier *b) pone a un proceso a esperar en la barrera.
Estas barreras son de un sólo uso, pero no es necesario liberarlas.
Opcionalmente, se puede implementar que la barrera se libere. Esto debe hacerlo el último proceso en
despertarse antes de retornar de waitbarrier.
Descargar