Examen junio 2008

Anuncio
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.
Descargar