E. U. de Informática Examen Final de Sistemas Distribuidos Departamento de Informática Aplicada 12 de septiembre de 2000 Apellidos .................................................................................................................. Nombre ..................................................................................................................... Nº de Matrícula.................... Examen de prácticas. Cliente (5 puntos) Nº Orden S.D. Tiempo estimado: 30 m 1. Explique si ha sido necesario comunicarse con el “portmapper” en alguna parte de su programa. Sí, es necesario para poder pedirle el identificador de comunicación del servicio de hora. La instrucción clte_create permite que el cliente pida al portmapper de la máquina donde reside el servidor dicho identificador. 2. ¿Cómo ha detectado que el servicio de hora no está dado de alta? Si el servicio en una máquina concreta está dado de alta, el resultado que devuelve la instrucción clte_create es el identificador de comunicación. Si el servidor no esta dado de alta, la instrucción anterior devolvería un valor null. Esto, sin embargo, no significa que siempre que la instrucción falle es que el servidor no está dado de alta, sino que puede haber ocurrido un fallo en la comunicación con el portmapper. 3. Explique dónde detecta y cómo trata la pérdida de un mensaje de respuesta a una petición de hora. Se detecta analizando el resultado de la invocación del procedimiento remoto obten_segundos_1. Si el resultado es null ha habido un problema de comunicación, por ejemplo la pérdida de un mensaje de respuesta o incluso la pérdida del mensaje de petición. 4. Suponga que en el servidor la llamada “time” falla. Describa qué recibe el cliente y cómo lo trata. Al igual que en el caso anterior, se detecta analizando el resultado del procedimiento remoto obten_segundos_1. Pero en este caso este procedimiento devuelve una estructura de tipo variante con un campo status que determina si ha habido error de ejecución remoto o no. Si la llamada time falla el servidor en este campo devuelve NO_OK y no envía ningún valor de segundos. 5. Justifique si en el programa principal del cliente pueden distinguirse entre los errores de comunicación y los errores de ejecución que provoca el servidor. No, no es posible ya que la interfaz ente el cliente y el stub del cliente hace imposible la distinción ya que en estos dos casos devuelve –1 al programa principal. Examen de prácticas. Servidor (5 puntos) Tiempo estimado: 30 m 1. ¿Qué valor o valores devuelve el servidor si la llamada al sistema time tiene éxito? El servidor devuelve un registro variante con dos campos. El primero, Status, contiene OK para indicar que existe un campo, a continuación del status, que contiene los segundos actuales. 2. ¿En qué lenguaje de especificación están descritos los perfiles de las operaciones del servicio y los códigos de error que el servidor ha de utilizar? En el lenguaje XDRL. 3. En nuestro sistema ¿Qué parte del software establece la semántica de entrega de mensajes que se va a utilizar? La establece el módulo de comunicaciones a utilizar. En nuestro caso al utilizar UDP sabemos que no es un sistema fiable de comunicaciones por lo que nuestro servicio debería presentar peraciones idempotentes. 4. Justifique si las operaciones de este servicio son idempotentes. No, ya que peticiones sucesivas de la hora dan como resultado horas distintas. 5. ¿Se podría dar de alta este servicio simultáneamente en varias máquinas con el mismo número de programa y de versión? ¿Sabría el cliente en qué máquina reside el servidor con el que se está comunicando? Sí, podrían existir tantos servidores de hora como queramos con el mismo número de programa y de versión. El cliente podría pedir la hora simultáneamente a todos y trabajar con el servidor de hora que le responda antes. El cliente sabe en que máquina reside el servidor ya que para pedir su identificador de comunicación necesita incluirlo en la instrucción clte_create.