Objetivos
Familiarizarse con el sistema operativo Nachos y su sistema de procesos livianos, o hebras (threads), el cual se encuentra inicialmente incompleto. Observar los efectos de la falta de sincronizacin cuando se trabaja con programas concurrentes. o Implementar algunas primitivas de sincronizacin para Nachos. o Resolver de manera correcta un problema de sincronizacin utilizando las primitivas de sincronizacin o o y los threads de Nachos.
Pruebas preliminares
Luego de instalar Nachos en su directorio base (HOME ), construya el ejecutable utilizando make en el directorio code. El ejecutable de Nachos que nos interesa para esta etapa quedar en el subdirectorio threads. a Para probar que todo est bien, ejecute ./nachos desde el subdirectorio threads. Esto ejecutar una prueba a a simple de Nachos. Examinando threads/main.cc se puede ver que, luego de realizar algunas inicializaciones y lecturas de parmetros, lo que se ejecuta es la funcin ThreadTest(), la cual se encuentra dentro del archivo a o threads/threadtest.cc. Esta funcin es un ejemplo simple de un programa concurrente. En este caso o hay dos threads independientes ejecutndose al mismo tiempo, y accediendo a los mismos datos. a
En todos los casos, los valores de T , M , N y E deben ser le dos por l nea de comandos. De esta forma, la ejecucin de ./nachos -T 5 -M 12 -N 4 -E 0 debe producir una ejecucin con 5 productores y 5 cono o sumidores que insertan o retiran 4 elementos cada uno, que trabajan sobre un buer de tamao 12, y con n un comportamiento correcto. Dato. Dentro de la evaluacin de esta parte, se probar el funcionamiento de ambas implementaciones o a con un set particular de valores de T , M y N .
La entrega de esta parte consiste en un archivo similar a threadtest.cc, de nombre montanarusa.cc con la implementacin de la simulacin dentro del entorno de Nachos. Incluya cualquier archivo adicional o o que necesite para la simulacin. Tenga en cuenta que para incluir ms archivos en la compilacin de Nachos, o a o debe modicar el archivo Makefile.common.
Recomendaciones
Siga cuidadosamente las instrucciones entregadas respecto al nombre de los archivos, y de los ags que se deben recibir por l nea de comandos con el n de facilitar la correccin. o Ilustre el comportamiento de los threads mediante mensajes claros, que permitan percibir lo que ocurre. Por ejemplo: Thread x inserta elemento y en el buffer, Pasajero i hace ingreso a la monta~a rusa por vez j, o Carro r inicia recorrido con s pasajeros. n Trabaje de manera incremental y ordenada, avanzando por cada etapa del proyecto de una a la vez. Se apreciarn los comentarios en el cdigo, o bien una apropiada explicacin en el informe. Al momento a o o de la evaluacin se privilegiar el orden, la claridad del cdigo, y las partes terminadas, por sobre las o a o incompletas. Procure entender el funcionamiento inicial del cdigo antes de introducir cambios. Para esto realice o pruebas del cdigo con pequeas variaciones de las funciones ThreadTest y SimpleThread. o n No intente escribir todo el cdigo de una sola vez para probarlo al nal. Una buena tcnica es escribir o e pequeos trozos, y compilarlos y probarlos poco a poco. n
Evaluacin o
30 %. Parte 2. Threads sin sincronizacin. o 15 %. Parte 3. Locks y variables de condicin. o 45 %. Parte 4. Montaa Rusa. n 10 %. Informe y claridad de implementacin. o
Entrega
La entrega debe hacerse dejando un directorio llamado exactamente nachosP1-entrega en el directorio base (HOME) del grupo. El retiro de las tareas se realizar de forma automtica a las 23:59 PM del d de la a a a entrega, por lo que deben tener cuidado con el nombre del directorio, ya que si ste no existe, se considerar la e a entrega como no-realizada. Consulte en el sitio web por las pol ticas de entrega. Dentro del directorio de entrega debe dejarse un archivo en formato ASCII llamado informeP1.txt, con un informe breve que incluya los siguientes puntos. Instrucciones de uso de los programas. Parte 2: Descripcin breve de los cuatro escenarios pedidos, y por qu se produce el comportamiento o e errneo. o Parte 3: Descripcin de la implementacin de locks y variables de condicin. o o o Parte 4: Descripcin de la simulacin y posibles limitaciones. o o La descripcin de las primitivas de sincronizacin, as como de la simulacin pueden incluirse como o o o comentarios en el cdigo, en lugar del informe, siempre y cuando esto facilite la claridad. o En un subdirectorio llamado threads se debe dejar todos los archivos necesarios (*.h, *.cc y Makefiles) para ejecutar sus programas. Esto incluye, como m nimo, thread-array.cc, thread-list.cc, synch.h, synch.cc, y montanarusa.cc.