1 Sistemas Operativos II Nombre: 2 3 4 5 6 7 8 Junio 2008 ITIS Castellano Problema 1 [1,5 puntos] 1. ¿Para qué sirve un Descriptor de Dispositivo? ¿Qué funciones del sistema operativo acceden a ellos y para qué? 2. Considera la siguiente afirmación: Cuando se instala un nuevo driver para un dispositivo, hay que modificar la Rutina de E/S que ejecutan los procesos que acceden a ese dispositivo. Discute si esta afirmación es cierta o falsa. 3. Considera la siguiente afirmación: Los cambios de contexto tienen mayor repercusión sobre la pérdida de rendimiento de un sistema con memoria virtual que sobre la de un sistema sin memoria virtual. Discute si esta afirmación es cierta o falsa. 4. Menciona un mecanismo de gestión de la memoria que permita limitar el nivel de multiprogramación. 5. Explica qué parámetro(s) de rendimiento mejora una herramienta de “compactación” de ficheros como el defragmentador del disco de Windows. 6. Los sistemas de ficheros tipo Unix utilizan enlaces hardware de los directorios a los ficheros, mientras que los sistemas basados en FAT sólo pueden proporcionar enlaces software. Explica en qué consiste el mecanismo de Unix que permite soportar esta característica. Problema 2 [2 puntos] Considera un sistema operativo con una política de tiempo compartido (q=1) sin expulsión por evento. En el sistema hay tres procesos, P1, P2, P3, que ejecutan el código que se especifica abajo y que comienzan su ejecución en el instante 0, encontrándose en la cola de preparados en ese orden. 1. P1 P2 P3 { ... /*2 ticks de cálculo*/ bajar(sem1); ... /*3 ticks de cálculo*/ subir(sem1); } { bajar(sem2); ... /*4 ticks de cálculo*/ subir(sem2); bajar(sem1); ... /*1 tick de cálculo*/ subir(sem1); } { bajar(sem1); ... /*2 ticks de cálculo*/ bajar(sem2); ... /*5 ticks de cálculo*/ subir(sem1); ... /*3 ticks de cálculo*/ subir(sem2); } Representa en el diagrama de abajo la ejecución de estos procesos dibujando los estados por los que pasa cada proceso. Considera que todos los semáforos son de tipo ‘mutex’ y están inicializados a uno. Anota sobre el diagrama cuándo se ejecutan las operaciones de sincronización, y, cuando se produzca un bloqueo, el semáforo que lo provoca. Notas: El tiempo de ejecución de subir() y bajar() es despreciable. Si la ejecución de subir() o bajar() coincide con el fin de quantum, considera que se ejecutan antes del fin de quantum. P1 P2 P3 4 8 Preparado 12 16 20 En ejecución 24 28 32 Bloqueado 2. Calcula la tasa de CPU de cada proceso. 3. Calcula el tiempo de respuesta medio (sólo para la primera vez que los procesos entran a la CPU). 4. ¿Se puede acotar el tiempo de respuesta de un proceso en este sistema? En su caso, para N procesos, ¿cuál sería la cota (en ticks)? 5. ¿Es esta política de planificación adecuada para aplicaciones de tiempo real? ¿Por qué? 6. ¿Se ha producido alguna situación de interbloqueo durante la ejecución del apartado 1? ¿Puede suceder un problema de interbloqueo en cualquier ejecución de estos procesos? Razona la respuesta. 7. Supón que modificamos la política de planificación introduciendo prioridades estáticas y expulsión por evento (manteniendo la expulsión por tiempo). Comenta cómo afectaría esto a la cota del tiempo de respuesta y al soporte para tiempo real. Problema 3 [0,5 puntos] En un sistema operativo un recurso se identifica como Ri, siendo i un entero entre 0 y N-1. Un proceso P posee una estructura de datos Ap que contiene el conjunto de recursos que P tiene asignados en un momento dado. Cuando un proceso P quiere acceder a un recurso Ri, gobernado por un semáforo sem_ Ri, se ejecuta el siguiente protocolo: if existe un Rk ∈ Ap tal que k>i, then P ejecuta una excepción y termina; else, P ejecuta bajar(sem_ Ri); Basándote en las condiciones para el interbloqueo, demuestra que si todos los procesos del sistema siguen esta estrategia, el sistema está libre de interbloqueos. Problema 4 [1,5 puntos] El disco duro de un PC tiene una geometría de 8000 cilindros, 10 pistas por cilindro, y 330 sectores de 512 bytes por pista. El disco gira a 6000 r.p.m. (revoluciones por minuto) y requiere un tiempo medio de 3 ms para posicionar el cabezal de lectura/escritura sobre un cilindro determinado. La velocidad media de transmisión por DMA es de 10 Mbytes por segundo. En este disco se ubica una partición de swap para la gestión de la memoria virtual. Cuando se produce un fallo de página, si la página víctima ha sido modificada, la rutina de tratamiento de fallo la escribe inmediatamente en disco. Las páginas son de 512 bytes, que coincide con el tamaño de bloque que trata el driver del disco. 1. Calcula el tiempo medio para leer una página en el disco. 2. Teniendo en cuenta que un 25% de las páginas elegidas como víctimas han sido modificadas, calcula el tiempo medio de tratamiento de un fallo de página. Considera despreciable el tiempo de ejecución del código de la rutina de tratamiento. 3. A partir del resultado obtenido en el apartado anterior, considerando un tiempo de acceso a memoria paginada es de 0,01 µs y una probabilidad de fallo de página de 2·10-5, calcula el tiempo medio de acceso a memoria virtual. (Si no has resuelto el apartado 2, utiliza el resultado obtenido en el apartado 1 como tiempo medio de tratamiento del fallo de página; si tampoco has resuelto éste, considera 10 ms como tiempo de fallo.) 4. Hemos instalado un nuevo controlador en el disco capaz de manejar transferencias de 32 sectores contiguos de una sola vez. Para aprovechar el nuevo hardware, modificamos el tamaño de página a 16 Kbytes. (a) Calcula ahora el tiempo medio de lectura de una página. (b) ¿Produce esto una mejora del rendimiento temporal del sistema de memoria virtual? En concreto, comenta cómo afecta a la productividad (throughput), medida en bytes/segundo, con respecto al caso del apartado 1. Problema 5 [1,5 puntos] En un sistema con memoria virtual segmentada-paginada se dispone de direcciones lógicas capaces de direccionar 4 Gytes. La memoria física está limitada a 512 Mbytes. Teniendo en cuenta que trabaja con páginas de 16 Kytes, y que un proceso puede tener un máximo de 8 segmentos, responde razonadamente a los siguientes apartados: 1. Estructura de las direcciones virtual y física. 2. Tamaño de una tabla de páginas. 3. Tamaño de una tabla de segmentos, procurando que sea mínimo. 4. ¿Podemos tener un proceso de 1 Gbyte en este sistema? ¿Y uno de 8 Gbytes? 5. Describe un ejemplo de un proceso con tres segmentos y un total de 80 Kbytes de memoria ocupada que tenga una fragmentación interna del 10%. Dibuja las tablas de segmentos y páginas y los marcos de páginas en memoria física para ese proceso. 6. ¿Cuál sería el mecanismo más adecuado para la gestión del espacio libre? ¿Por qué? Problema 6 [1 punto] Considerando en todos los casos un tamaño de bloque de 4 Kbytes, calcula el espacio de direccionamiento y el tamaño máximo representable de un fichero para los sistemas de ficheros que se muestran en la tabla. Razona los cálculos en el margen derecho. Capacidad de Tamaño máximo de direccionamiento un fichero FAT 16 FAT 32 UNIX (16 bits) UNIX (32 bits) Problema 7 [1 punto] En un sistema de ficheros de UNIX de 32 bits y un tamaño de bloque es de 4 Kbytes, tenemos almacenados tres ficheros, cuya longitud se indica en la tabla. Calcula para cada caso, sobre la tabla adjunta, el número de bloques (de datos y de índices) necesarios para almacenarlos, la fragmentación interna y el número de bloques que hay que leer para acceder al primer byte y al último de cada fichero (considerando los i-nodos ya cargados en memoria). Longitud (en bytes) Fich1 25 Fich2 41.000 Fich3 1.100.000 Número de bloques Fragmentación interna Número de bloques a leer para acceder al primer byte Número de bloques a leer para acceder al último byte Problema 8 [1 punto] En un sistema paginado con memoria virtual tenemos las siguientes definiciones: struct ent_tp { /* cada entrada de una TP */ UN_BIT bit_V; /* bit de validez */ UN_BIT bit_R; /* bit de referencia */ UN_BIT bit_M; /* bit de modificado */ unsigned marco; /* número de marco */ } TP [N_PROCS][LON_TP]; /* tablas de páginas para todos los procesos */ int turno[NUM_PROC]; int pag_victima(int p) /* Algoritmo de reemplazo. p: número de proceso */ { int i; for (;;) { if (TP[p][turno[p]].bit_V) { if (TP[p][turno[p]].bit_R { TP[p][turno[p]].bit_R= 0; /* bit R= 0 */ turno[p]= (turno[p]+1)% LON_TP; } else { i= turno[p]; turno[p]= (turno[p]+1)% LON_TP; return (i); } } else turno[p]= (turno[p]+1)% LON_TP; } 1. ¿Qué política de reemplazo implementa la función pag_victima()? Razona la respuesta. 2. ¿Implementa asignación local o asignación global? Razona la respuesta y comenta brevemente cómo se implementaría el caso contrario.