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.