Beruflich Dokumente
Kultur Dokumente
Proyecto Unidad #1
Introduccin
Como se ha visto a lo largo del curso, hemos trabajado bastante los aspectos de hilos (en adelante threads), semforos, sincronizacin, y retardos. Por esto, se presenta en este documento el primer proyecto perteneciente a la unidad 1 del mdulo de Sistemas Operativos, en el cual se abarcan todas las reas antes mencionadas.
Las Restricciones
Algunas de las caractersticas que deba poseer nuestro programa fueron las siguientes: 1. La implementacin concurrente del escenario antes expuesto, utilizando pthreads y sus primitivas de sincronizacin. 2. Representar, a los actores del programa (Oso y Abejas) como threads independientes. 3. Utilizar semforos para la sincronizacin de ser necesaria. 4. As como tambin, usar retardos para una mejor evaluacin. 5. El ingreso de los datos n y H (vistos en la seccin de problemtica), debieron ser ingresados a travs de la lnea de comandos del programa. 6. A su vez, se deba mostrar por pantalla salidas que permitieran seguir la ejecucin del programa. 7. Y finalmente, que nuestra solucin estuviera libre de deadlock. En cuanto a la forma de trabajo y entrega, se debi trabajar individualmente con fecha de entrega a ms tardar el da 29 de Noviembre de 2011, a las 10:00 hrs.
Sistemas Operativos
Pgina 2
Y el mtodo para la creacin de los threads, dando como ejemplo el thread Oso...
/* * Creacin del thread oso. * Existe solamente un oso comiln. */ printf("main(): creando thread oso\n"); printf("Oso durmiendo... zZz...\n"); if(pthread_create(&bruin, NULL, bear, NULL)){
Sistemas Operativos
Pgina 3
Por otro lado, utilic dos funciones para los hilos, una denominada bee, encargada de generar las porciones portions, y de decidir en algn momento de la ejecucin si se deba llamar a otra abeja para seguir produciendo o bien despertar al oso para que comiera...
//Funcion de los threads abeja. void *bee(void *honey){ long full = (long)honey; while(1){ p(&mutex); portions++; printf("Se almacena la porcion %d en el recipiente...\n", portions); if(portions == full){ printf("Recipiente lleno, ultima abeja le avisa al oso!\n"); sleep(rand()%MAX_DELAY); //Retraso en ir a avisarle al oso. v(&recipient); } else{ sleep(rand()%MAX_DELAY); //Retraso en almacenar la miel cada abeja. v(&mutex); //Continua la siguiente abeja. } } }
Y la otra descrita como bear, que slo se encarga de que cuando el thread oso recibe el recipiente, vaciarlo y avisar a las abejas de que ya comi...
//Funcin del thread oso. void *bear(void * aux){ while(1){ p(&recipient); //Oso despierta, y pide el recipiente. portions = 0; printf("El oso se ha comido todo el recipiente!, vuelve a dormir... zZz...\n\n"); sleep(rand()%MAX_DELAY); //Retraso en que el oso se quede dormido. v(&mutex); } }
La funcin principal main slo se encarga de inicializar y crear algunas cosas, adems de recibir los parmetros necesarios para buena ejecucin del programa.
Sistemas Operativos
Pgina 4
Las Limitaciones
o Si bien, el programa qued funcionando con las entregas solicitadas, qued un aspecto por mejorar que es la verificacin ms completa de las entradas, es decir, revisar que los parmetros que el usuario ingresa sean realmente enteros vlidos. Como solucin, ms adelante se debera incorporar una funcin de verificacin de enteros a partir del string que ingresa el usuario.
o Otro punto, es la cota mxima que le di al tamao de la lista de threads de abejas. Obviamente es configurable, pero no se especificaban limitaciones en el enunciado. En consecuencia, decid dejarle un mximo de 100. Como agregu anteriormente, esta parte del programa es configurable, slo dej una cota de 100 por defecto, simplemente para efectos de tiempo, ya que utilizamos en el proyecto retardos de tiempo para una mejor visualizacin de las salidas y la sincronizacin.
Sistemas Operativos
Pgina 5