Tarea 2 CC41B


Plazo: 2 semanas

Descripción

Se trata de modificar el monitor del nSystem para que acepte condiciones con "prioridades" que ayuden a implementar más simplemente la tarea1.

Igual que antes, se busca 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 usando monitores del nSystem con condiciones con prioridades se les entrega, y ustedes deben usar ese mismo programa sin modificarlo.

La tarea2 consiste en modificar el nSystem para incluir en los monitores condiciones con prioridades y probarlas con el archivo de ejemplo.

Agregamos a los monitores dos funciones más sobre las condiciones:

void nWaitConditionPrior(nCondition cond, int prior);
/*
 * Espera sobre la condicion cond con prioridad prior
 */
void nSignalConditionPrior(nCondition cond, int prior); 
/*
 * Señala la condicion cond con prioridad prior
 */

Estas funciones son una extensión a las condiciones originales, las funciones habituales (sin prioridades) siguen funcionando y son equivalentes a usar estas con prioridad cero (0). Las prioridades van de 0 a 10.

La prioridad permite despertar a ciertas tareas antes que a otras. La regla es: al hacer Signal con prioridad "i" despierto a una tarea que espera con prioridad "i" si la hay. Si no hay, despierto a cualquier tarea que esté esperando esta condición (independientemente de su prioridad) si la hay. Si no hay tareas esperando, no hago nada.

Se incluye un Makefile y otros archivos para compilarlos en tarea2.tgz, lo que incluye una versión de nSystem modificado para tener estas primitivas.

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.

Pruebas

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

% ./nautos2 50 6 | wish

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.

Deben entregar solamente el nMonitor.c modificado.