Universidad de Las Palmas de Gran Canaria Escuela Universitaria de Informática Sistemas Operativos Segundo parcial, 11 de junio de 1993 Apellidos Nombre Grupo 1 (1'5 puntos) Responda las siguientes cuestiones sobre interbloqueo: a) Demuestre que la estrategia de ordenación lineal de recursos asegura la no ocurrencia de interbloqueo. b) Realice un análisis comparativo (ventajas e inconvenientes) entre los distintos métodos de tratamiento del interbloqueo. 2 (2 puntos) Responda a las siguientes cuestiones: ¿Qué es la espera activa en la sincronización entre procesos? ¿Por qué las soluciones al problema de la sección crítica para más de dos procesos son bastante más complicadas que las soluciones para sólo dos procesos concurrentes? ¿Qué es un semáforo? ¿Por qué cree que se estudian los semáforos en Sistemas Operativos y no en otra asignatura de Informática? La sentencia concurrente (parbegin/parend) sólo permite especificar un número fijo de procesos concurrentes. Describa una manera de especificar un número variable de procesos P(i) : i = 0,1,...N con la sentencia concurrente y en el marco de un lenguaje estructurado tipo Pascal. No emplee ninguna construcción GOTO. ¿Cómo se resolvería el mismo problema con las instrucciones fork y join? 3 (2'5 puntos) Construya un monitor que gestione una comunicación sencilla entre procesos mediante dos primitivas de envío y recepción de mensajes, cumpliendo estas especificaciones: Para las transacciones existe un tipo de datos llamado mensaje que se supone ya definido. Los procesos participantes en la comunicación poseerán identificadores enteros positivos. Existe un máximo de procesos dialogantes, llamémoslo num_proc (que es constante). El monitor contendrá un búfer de M ranuras (M será alguna constante) de tipo mensaje, como repositorio de transacciones pendientes. Podrán definirse estructuras y variables adicionales, pero ninguna más de tipo mensaje. El monitor ofrecerá dos procedimientos públicos con esta sintaxis: procedure entry enviar ( var m:mensaje, destino:integer ); procedure entry recibir ( var m:mensaje, quien_soy:integer ); El parámetro destino del procedimiento enviar indica a qué proceso se desea emitir el mensaje m. El parámetro quien_soy de recibir expresa qué proceso está demandando mensajes. El procedimiento enviar deposita el mensaje m en el búfer y lo deja disponible para su consumo; si el búfer está lleno el proceso llamador se bloquea hasta que haya hueco. Si se produce el bloqueo no se impide a otros procesos utilizar el monitor (que quizás vacíen el búfer). El procedimiento recibir bloqueará al proceso llamador hasta que exista algún mensaje destinado a tal proceso. Este bloqueo no impedirá a otros procesos utilizar el monitor si están capacitados para ello. Si existe al menos un mensaje destinado al invocante de recibir, en el parámetro m se copia el mensaje llegado en primer lugar de todos los posibles, y se elimina del búfer del monitor (un mensaje sólo se recibe una vez). Inicialmente el monitor no contiene mensajes. No es necesario definir prioridades entre emisores y receptores, pero si se atreve y tiene tiempo, déle más prioridad a los receptores. ¿Se le ocurre algún motivo para ello? Pregunta adicional: ¿qué tipo de comunicación se estaría implementando? ¿Con qué clase de canales? ¿Este monitor podría considerarse un canal? Pregunta adicional 2: ¿Puede producirse interbloqueo en este sistema? ¿y inanición? 4 (1'75 puntos) Describa detalladamente el proceso de traducción en MS-DOS de una dirección lógica de ficheros, expresada en desplazamiento de bytes a partir del origen del fichero, a una dirección física. NOTA: detalladamente quiere decir especificar de dónde y cómo se obtiene la información necesaria para cada paso. 5 (2'25 puntos) Describa algorítmicamente las siguientes tareas en Unix: a) ialloc b) fork Recuerde especificar las entradas y salidas de cada algoritmo. Tiempo de realización: 3½ horas Justifique adecuadamente todas sus respuestas. Administre bien su tiempo; procure obtener la máxima nota en el mínimo tiempo. Mucha suerte.