Taller de Sistemas de Operación II
Prof. Yudith Cardinale
Abr/Jul 2011
Los sistemas distribuidos presentan características muy relevantes y diferenciables de cualquier otro tipo de sistema. La transparencia de localidad permite independizar la relación física que se establece entre piezas de software cliente y servidor, la tolerancia a fallas ofrece sistemas altamente disponibles y la sincronización distribuida permite (entre otras cosas) tomar decisiones en función a información que puede estar particionada o replicada entre varias máquinas y/o servidores.
Durante este segundo proyecto se persigue que el estudiante diseñe e implemente un sistema distribuido que cumpla con las concepciones básicas indicadas en la INTRODUCCIÓN.
Se pretende crear un Juez en Línea para el soporte de Maratones de Programación Distribuidos. En un maratón de programación participan equipos de tres estudiantes que deberán resolver la mayor cantidad de problemas, de un conjunto de problemas propuestos, durante 5 horas. Cada equipo cuenta con un computador. Una vez que un equipo termina un problema, debe enviarlo al JUEZ para que lo evalúe. Las respuestas de la evaluación pueden ser:
YES, en el caso que el problema esté correcto
Wrong Answer, en el caso que el problema no devuelva la salida correcta
Compilation Error
Runtime Error
Bad Format Output
Time Exceeded, en el caso que la ejecución no termine en el tiempo estipulado (se estipula un tiempo máximo de ejecución por cada problema)
Memory Exceeded, en el caso que durante la ejecución el proceso consuma mas memoria de lo estipulado (se estipula un máximo de memoria)
El puntaje de cada equipo se calcula en función del número de problemas resueltos y el tiempo de resolución correcta de cada problema. Por cada entrega que no sea correcta, se acumulan 20 minutos, que se sumarán al tiempo en el que la entrega sea correcta.
Componentes del Juez en Línea
Cliente: se ejecutará en las máquinas de los equipos de los estudiantes. A través del Cliente se enviarán los problemas al Juez y se recibirán las respuestas de la evaluación. Se debe visualizar el tiempo transcurrido del Maratón.
Juez principal: es el encargado de recibir los problemas y despacharlos entre los Jueces Esclavos Remotos. Debe monitorear a los Jueces Esclavos para desincorporarlos en caso de falla.
Jueces Esclavos: Se encargan de compilar, ejecutar y evaluar los problemas. Es importante que el tiempo que se tome de la ejecución se refiera al tiempo efectivo. Esto para que la carga del Juez Esclavo no afecte el tiempo de ejecución del programa a evaluar. Los Jueces esclavos serán dedicados, es decir, sólo atenderán a problemas del maratón pero deben ser concurrentes. Una vez que evalúen el problema, enviarán el resultado a los demás jueces esclavos para replcarlo, enviarán la respuesta al cliente. Si un Juez Esclavo falla, el Juez principal deberá confirmar si la respuesta a ese problema ya replicó, si no es así, enviará nuevamente el problema a otro esclavo
Puede considerar solamente programas en C, C++ o Java.
Tabla de Puntaje: debe ser visualizada por los clientes y debe estar actualizada en todo momento.
Especificaciones Técnicas
El Juez principal deberá mantener en todo momento la información actualizada de los jueces esclavos: si está ocioso, si está evaluando un problema, qué problemas ha evaluado y cualquier otra información que consideren útil.
Se sugiere que la comunicación entre los jueces esclavos se realice a través de un socket conectado a una dirección multicast, a la cual se suscribirán al momento de levantarse.
El cliente, deberá presentar una interfaz gráfica muy sencilla al usuario a través de la cual se envía el problema, se visualiza el tiempo del transcurrido del maratón y la tabla de puntaje.
Cada Juez esclavo debe registrarse con el Juez Principal al momento de levantarse. Los esclavos pueden iniciarse en cualquier momento y podrán evaluar varios problemas simultáneamente.
El Juez Principal despachará los problemas a los esvlavos en round robin
Es claro que debe haber un proceso de sincronización de relojes entre los jueces esclavos para manejar las versiones de las ejecuciones de cada problema por equipo. Cuando se vaya a guardar un resultado de una evaluación, es necesario que sea guarde en al menos 3 jueces, si no hay suficientes, se debe guardar en el Juez principal.
Uds. deben definir la estructura de datos y el protocolo necesario para cumplir con las funcionalidades requeridas. Esto da cierta libertad a la hora de definir el tipo de interacción que tendrán los servidores entre ellos. Deben proponer el diseño de todos los componentes, cumpliendo con Sincronización, Tolerancia a Fallas y Comunicación. Tiene libertad de seleccionar el lenguaje y protocolo de comunicaión que usará en el programa.
La entrega será la última semana del trimestre y deben entregar un informe con, al menos, las consideraciones de manejo de sincronización, comunicación y tolerancia a fallas.