Examen de programación concurrente, Septiembre 2006. ETSI Informática, UNED 1 PARTE TEÓRICA Regiones crı́ticas condicionales. Explicar su sintaxis, semántica, circuito de colas e ilustrar con un ejemplo. (2pt) Usando únicamente semáforos binarios, construir dos procedimientos genwait y gensignal para simular semáforos generales. Indicación: Puedes usar una variable para llevar un contador, un semáforo que controle la exclusión mutua en los accesos/modificaciones del contador y otro semáforo binario para bloquear/desbloquear los procesos.(2pt) EJERCICIO Una universidad tiene unos kioskos en los que hacer la matricula de forma electrónica. Cada kiosko tiene un proceso controlador que lee de un dispositivo de entrada los datos de matrı́cula, entre ellos el dni y el código de carrera, y los introduce en un buffer (común a todos los kioskos) de tamaño limitado. En otro lugar, unos procesos matriculadores leen los datos de matricula del buffer, uno de los cuales es el código de carrera elegido y comprueban si hay plazas libres en dicha carrera. Si hay plazas en la carrera se disminuye en uno el número de plazas libres en esa carrera y se guarda el dni de la persona matriculada en la lista de matriculados de esa carrera. Escribir un programa en pseudocódigo que simule el comportamiento de los controladores y los matriculadores, usando monitores. El código de lectura de los dispositivos de entrada que realizan los controladores no nos interesa, y debe indicarse mediante un comentario y unos puntos suspensivos, tras los cuales otro comentario nos informa de que tenemos los datos en una variable, por ejemplo: // Leemos los datos de matrı́cula del dispositivo de entrada ... // El DNI del estudiante está en la variable datos.dni y el código de carrera en datos.carrera Elegir adecuadamente las estructuras de datos necesarias. Como es habitual, debe conseguirse el mayor grado de concurrencia posible, manteniendo la coherencia de los datos. Para que el desarrollo y la corrección de la simulación puedan seguirse desde fuera, los procesos deben emitir por pantalla mensajes explicativos de lo que hacen, en especial en relación con la concurrencia y la sincronización de procesos. Entre otros mensajes, un proceso controlador debe indicar el dni y la carrera elegida por la persona que quiere matricularse. Cuando se intenta la operación de matriculación, el matriculador debe indicar si la matriculación ha tenido éxito o no. Deben evitarse a toda costa los interbloqueos y la inanición. (6pt)