Sistemas Operativos II Ingenierı́a informática Práctica 3: 4: Topologı́as de red libres de ciclos: Minimum spanning trees. Calendario Comienzo: Lunes 30 de noviembre de 2009. Entrega: Lunes 11 de enero de 2010. 1. Objetivos Conocer un problema distribuido real. Implementar un algoritmo distribuido como una interaccion de automatas finitos deterministas. 2. Introducción En esta última práctica vamos a fusionar todo lo que hemos estado viendo hasta ahora. Vamos a crear un conjunto de agentes que sean capaces de comunicarse entre sı́ para alcanzar un objetivo común. Para ello usaremos lo aprendido en las prácticas 1 y 2. Además, deberán responder a los sucesos que ocurran en su entorno dependiendo del estado en que se encuentren, por lo que será necesario modelar el problema utilizando la herramienta desarrollada en la práctica 3. El problema a resolver será el de encontrar una topologı́a lógica sin ciclos en una red con redundancia. 1 3. Redes de enlace con redundancia En una red de comunicaciones se pueden distinguir varios niveles de funcionalidad. Por ejemplo, el nivel fı́sico es el de más bajo nivel, abarcando todos los dispositivos que permiten la comunicación fı́sica entre dos estaciones. El nivel de enlace es el segundo nivel, y se encarga de que dos estaciones conectadas fı́sicamente sean capaces de comunicarse libres de errores. Por encima de éste estaria ya el nivel de red, encargado de hacer que la informacion vaya saltando de estacion en estacion hasta alcanzar su destino. Bien, en esta práctica pensaremos en un problema tı́pico del nivel de enlace. Las redes ethernet se pueden entender como un conjunto de estaciones conectadas a un único cable compartido. Cuando una estación quiere mandar un mensaje a otra, construye una trama especial indicando su dirección y la direcciónd de destino. Todas las estaciones conectadas al cable están constantemente escuchando hasta que detectan una trama destinada a ellas. Por limitaciones fı́sicas no se puede hacer una red ethernet mayor de un tamaño dado, por lo que para un número grande de estaciones es necesario construir más de una red. Para hacer que dos estaciones conectadas a redes ethernet separadas puedan comunicarse, se pueden utilizar bridges. Los bridges son dispositivos que sirven precisamente de “puente” entre dos o más redes. Cuando un bridge arranca, no sabe nada de la red, solamente las interfaces que estén conectadas. Cuando escucha un mensaje de una estación por una de sus interfaces, graba la localización de esa estación. De esta manera, si en el futuro recibe un mensaje para ella proveniente de otra red, sabrá que tiene que encaminarlo por la interfaz que habı́a registrado. Si un bridge escucha un mensaje para una estación que no tiene registrada, no puede tener certeza de si estará a un lado o a otro, por lo que es necesario que reenvı́e el mensaje por todas las interfaces excepto por la que lo escuchó. Y aquı́ aparece el problema. El problema es que si existe redundancia en la red, se originará una tormenta de mensajes que no terminará nunca. Una manera de evitarlo es que todos los bridges de la red decidan desactivar algunos caminos, de tal forma que entre dos estaciones cualesquiera exista un único camino posible. 4. Ejercicios En esta última práctica habrá que implementar un algoritmo que resuelva el problema de construir un árbol mı́nimo en un grafo de manera distribuida. Los requisitos son los siguientes;: 1. Implementar un agente que sea capaz de comunicarse con otros agentes mediante TCP/IP. Deberá recibir como argumentos por lı́nea de comandos un número de puerto y, opcionalmente una lista de direcciones con el formato IP:puerto:peso. 2. El agente deberá crear un socket pasivo asociado al puerto recibido como argumento y deberá establecer conexiones con las demás direcciones especificadas. El peso representará el coste de mandar un mensaje por un camino concreto. Las dos partes de la conexión deben conocer el peso. 2 3. Si un agente recibe como argumento la palabra “end” después de todos los demás argumentos, se considerará que la red está formada y podrá empezar el algoritmo de construcción de un MST. 4. El algoritmo distribuido debe encontrar un árbol de peso mı́nimo para el grafo formado por los agentes y las conexiones entre ellos. 5. El algoritmo deberá estar implmementado como un AFD, utilizando la biblioteca implementada en la práctica 3. 6. Todos los nodos deben saber cuándo el algoritmo ha terminado. 7. Cuando el algoritmo termine, cada nodo debe imprimir por pantalla una lista especificando qué enlaces están activos y cuales no. 8. Cuando el algoritmo termine todos los agentes deben terminar limpiamente. 3