Tarea 1 CC41B


Plazo: 2 semanas

Descripción

Se trata de coordinar varias tareas concurrentes que intentan entrar a un tunel, desde dos lugares diferentes (los verdes y los rojos). Una vez dentro del túnel, siguen avanzando una detrás de la otra. El objetivo es lograr que, si no hay congestión, entre el que va llegando, sin esperar. Cuando hay congestión, deben turnarse uno por medio (una verde y una roja).

Se define congestión como que hay alguien esperando entrar del otro color que uno.

Cada pelota es una tarea independiente que quiere avanzar, pero debe esperar su turno. Al salir del túnel debe morir.

Un programa que resuelve esto mismo en secuencial se les entrega de ejemplo, pero es injusto y no implementa bien la parte de congestión. Si aumentan las probabilidades de llegadas (en el código del main) verán como favorece a los verdes.

Se incluye un Makefile y otros archivos para compilarlos en tarea1.tgz, los comandos reciben de argumentos el número total de pelotas a generar y el largo del túnel.

Wish y TK

Para ver la animación necesitan tener TCL/TK instalados en su computador, particularmente el comando "wish". Si no lo tienen, pueden probar la tarea, pero se pierden la diversión.

Se les entrega un archivo wish.c que genera los comandos para animar esto para el wish. Este archivo deberán modificarlo para permitir que los threads puedan invocarlo sin estorbarse. La nueva versión deben entregarla junto con la tarea.

Pruebas

Para probar la versión secuencial hagan:

% ./autos2 50 6 | wish

Para probar el ejecutable que usa nSystem e implementa el algoritmo correcto:

% ./nautos2 50 6 | wish

El código de la versión secuencial es para que saquen ejemplos de cómo manejar la animación de las pelotas, pero el código del algoritmo mismo no es muy útil, ya que el algoritmo está malo y además es muy distinto manejar esto en secuencial que con threads (las colas, el ciclo principal, etc no se aplican cuando hay threads).

Condiciones de Entrega

La tarea debe realizarse en C usando el Nano System. Los fuentes y ejemplos del nSystem los obtienen de la página de Luis Mateu:

http://www.dcc.uchile.cl/~lmateu/CC41B/download/nSystem2005sp2.tgz

La tarea debe entregarse antes del plazo final a través de U-cursos y debe compilar sin errores y ejecutar, o no será evaluada. Si tienen una tarea que funciona en parte, pero no completa, entréguenla a tiempo y obtendrán algo de nota.