Solución problemas segundo parcial

Anuncio
Solución, problemas examen de ssoo, segundo parcial 8/6/2009
1)
Disco tipo Unix de 23 cabezas, 29 sectores, 213 pistas
Formato: 1 + 1 + mapa nodos-i + nodos-i + mapa bloque de datos + bloques de datos
Bloques de 211 bytes
Sectores de 29 bytes
Nodo-i de 27 bytes: 12 +BSI+BDI+BTI , punteros de 4 bytes
La zona de nodos-i ocupa 217 bloques
a) Número de ficheros que se pueden crear como máximo
Nº nodos-i = (217 bloques * 211 bytes/bloque ) / 27 bytes/nodo-i = 221 nodos-i
----> 221 ficheros
b) Tamaño en bloques de la zona de mapa de bits de nodos-í
221 nodos-i necesitan 221 bits
221 bits = 218 bytes = 27 bloques
c) Tamaño de la zona de mapa de bits de bloques libres y de la zona de datos
El disco tiene un tamaño de 223 bloques (= 225 sectores
= 23 cabezas * 29 sectores * 213 cilindros)
El tamaño total, suma de ambas zonas será
223 – ( 1+1+ 27 + 217 ) = 8257406 bloques
Estos bloques se reparten entre zona de datos y mapa de bits correspondiente
Como 1 bloque almacena 214 bits, planteamos la siguiente ecuación:
X+ 214 X = 8257406 X = 8257406 / (1+214) = 503.96
Nos queda por tanto
504 bloques para mapa de bits de bloques libres y
8256902 (=8257406 -504) bloques para la zona de datos
1
d)¿Cuántos bloques incluyendo datos y metadatos necesitaríamos para crear un
fichero escribiendo un único byte con valor uno en la posición 2097152?
En este caso todos los punteros excepto el que corresponde con el bloque que aloja al
byte con valor uno estarían con valor NULL
El byte 2097152 se aloja en el bloque 1024 (contando desde 0) . Por tanto se trata del
puntero 1024 del nodo-i (contando desde el puntero 0). Este puntero se encuentra
ubicado en la estructura doblemente indirecta del nodo-i puesto que cada bloque del
nodo-i almacena 512 punteros:
12 punteros en el nodo-i
512 punteros en la estructura simplemente indirecta
262144 punteros (512*512) en la estructura doblemente indirecta
Finalmente tendremos el nodo-i en el siguiente estado
Nodoi
12 punteros a NULL
Puntero BSI a NULL (corresponde con 512 punteros)
Puntero BDI ------> bloque ----- >bloque ------> bloque de datos
Necesitamos por tanto 3 bloques: 2 bloques de metadatos en el nodo-i y 1 bloque de
datos con el byte de valor uno
e) ¿Cuántos bloques incluyendo datos y metadatos ocuparía un fichero de 64 MiB
totalmente lleno de unos?
26 220 bytes = 215 bloques que necesitarían 215 punteros, desde el puntero 0 al
puntero 32767
Estos 32768 punteros se reparten así:
12 punteros en el nodo-i
512 en el bloque de la estructura simplemente indirecta
32244 punteros en 63 bloques de la estructura doblemente indirecta
Po tanto el nodo-i necesita en total 1 + (1 + 63) bloques de metadatos que sumados a los
32768 bloques de datos hacen un total de 32833 bloques
f) ¿Cuántos bloques hay que pedir para leer el byte 4299210752?
Ese byte corresponde con el primer byte del bloque 2099224 empezando por el bloque
0. Los 2099225 punteros se reparten así:
2
12 punteros en el nodo-i
512 en el bloque de la estructura simplemente indirecta
262144 (=512*512) punteros en la estructura doblemente indirecta
1836557 punteros restantes en la estructura triplemente indirecta
Por tanto el puntero 2099224 se aloja en la estructura triplemente indirecta
Puntero BTI ------> bloque ----- >bloque ------> bloque ------> bloque de datos
del nodo-i
Necesitamos pedir 4 bloques: los 3 bloques de metadatos del nodo-i y el bloque de
datos que almacena el byte 4299210752 suponiendo que el nodo-i ya está en memoria
2)
Disco de 23 cabezas, 27 sectores, 213 pistas
Bloques de 212 bytes
Direcciones de bloque de 4 bytes
Velocidad de giro: 7200 rpm
Tiempo de búsqueda (en ms): 0.5 + 0.005 * nº de cilindros recorridos
Inicialmente las cabezas se encuentran en el cilindro 50
No conocemos el ritmo de acceso a los bloques -> cada acceso a un bloque conlleva
1 latencia + 1 transferencia
a) Suponiendo que el SF es del tipo asignación contigua, calcule el tiempo en leer
15200 bytes a partir de la posición 7860000 de un fichero cuyo primer bloque es el
bloque 11776 del disco.
Solución:
Calculamos previamente el tiempo de latencia y el tiempo de transferencia de un bloque
Latencia = tiempo en dar media vuelta = 1/240 segundos (7200/60 = 120 rps)
= 1000/240 ms
Transferencia = tiempo en dar una vuelta / número de bloques en una pista
= 1/1920 segundos (= (1/120 segundos) / 16 bloques por pista )
= 1000/1920 ms
3
Tendremos que
a1) movernos desde el cilindro 50 hasta el cilindro correspondiente a la posición
7860000 del fichero.
a2) traer a memoria los 15200 bytes.
a1) Para calcular el cilindro correspondiente a la posición 7860000 del fichero
necesitamos conocer el bloque del disco que aloja el byte 7860000 del fichero.
Cada cilindro almacena 128 bloques puesto que cada cilindro consta de 210 sectores
(=23 cabezas*27sectores por pista) y un bloque es equivalente a 8 sectores
El bloque 0 del fichero corresponde con el bloque 11776 del disco según el enunciado.
El byte 7860000 del fichero se encuentra en el bloque 1918 del fichero
(7860000/4096=1918.9) que corresponderá con el bloque 13694 (11776+ 1918) del
disco el cual se encuentra alojado en el cilindro 106 (13694/128 = 106.9)
Tenemos que movernos por tanto desde el cilindro 50 al cilindro 106
a2) Traer a memoria los 15200 bytes se traduce en traer a memoria 5 bloques del disco:
bloques 13694, 13695, 13696, 13697, 13698 (los tres primeros en el cilindro 106 y los
dos últimos en el cilindro 107)
El byte 7875199 (= 7860000+15199) del fichero se encuentra alojado en el bloque
1922 (7875199/4096=1922.6) del fichero que corresponde con el bloque 13698
(11776+1922) del disco.
El costo en tiempo de transferir estos 5 bloques se desglosa de la siguiente forma
a21 movernos del cilindro 106 al 107
a22 añadir 5 latencias y 5 transferencias
----------------------------------------Total a1 + a2:
0.5 + 0.005 (106-50) ms
+
0.5 + 0.005 (107-106) + 5 * (1000/240 + 1000/1920 ) ms
------------------------------------------------------------------------Total = 24.72 ms
4
b) Repita los cálculos suponiendo que el SF es del tipo lista ligada. Suponga que los
bloques del fichero se encuentran aleatoriamente distribuidos por los 100 primeros
cilindros del disco y que el tiempo medio de búsqueda es de 0.75 ms
Solución:
Tendremos que llegar al bloque que aloja el byte 7875199 (= 7860000+15199)
Ahora el bloque almacena 4092 bytes ya que necesita también espacio para el puntero al
siguiente bloque (4 bytes)
El bloque del fichero correspondiente será el bloque 1924 (empezando a contar desde el
bloque 0)
(7860000+15199) / 4092 = 1924.5
Tenemos que traer por tanto 1925 bloques a memoria. Cada bloque conlleva su tiempo
de búsqueda, su tiempo de latencia y su tiempo de transferencia
Total = (0.75 + 1000/240 + 1000/1920) *1925 = 10467.19 ms
3) Tenemos un reloj que funciona como oscilador de 12 Mhz trabajando en modo
onda cuadrada. El SO lleva la hora mediante un registro con los segundos hasta el
momento de arranque y otro con las marcas desde ese momento. El instante de
referencia es las 00.00h del 1/1/2009. El ordenador se arrancó a las 13.15h del
2/6/2009 y actualmente son las 15.00h del 3/6/2009. En el contador de segundos
tenemos 13180500 y en el de marcas 11124000. Responda a las siguientes
cuestiones:
a) ¿Cuál es el valor del divisor del contador (registro R)?
Solución:
Desde el momento en que arrancó hasta la hora actual han pasado 92700 segundos ( 1
día , 1 hora, 45 minutos) que equivalen según indica el enunciado a 11124000 marcas.
Esto nos da un total de 120 marcas por segundo (=11124000/92700)
R= frecuencia a la entrada / frecuencia a la salida = 12000000 hz / 120 hz= 100000
b) Estamos usando alarmas implementadas por el método de la lista ligada. En el
momento de arrancar el ordenador se han puesto automáticamente 4 alarmas para
dispararse respectivamente 30 minutos, 50 minutos, 45 minutos y 2 horas después;
100 minutos después insertamos otras dos alarmas para en 60 y 100 minutos
respectivamente. Dibuja AQUÍ cómo queda la lista de alarmas después de esa
inserción con los valores en marcas de reloj.
5
Solución:
En minutos quedaría
70 min ---- 40 min ----- 40 min
En segundos
4200 seg ----- 2400 seg ------ 2400 seg
En marcas que es lo que nos piden ( 120 marcas por segundo)
504000 marcas ----- 288000 marcas ---- 288000 marcas
4) Se tiene un sistema Linux en el que existen tres usuarios. U1, U2, U3. El usuario
U1 pertenece al grupo G1, U2 al grupo G2 y el usuario U3 al grupo G3. Los
siguientes ficheros se encuentran en el directorio D1 que pertenece al usuario U2 y
al grupo G3, y tiene los permisos r-x rwx r-x
prop
rwrwx
rws
r-s
rwr-r--
grupo
rwr-s
r-s
r-x
r-r---s
otros
r---x
--x
r-------x
propietario
U2
U1
U2
U2
U2
U3
U3
grupo
G1
G1
G2
G3
G2
G3
G1
fichero
F1
rm
S1
S2
F2
F3
S3
S1, S2 y S3 son tres intérpretes de órdenes. Dibujar la matriz de cambio de
dominio teniendo en cuenta que el operador de cambio de dominio es el shell que
da lugar a dicho cambio. Considérese en la matriz que un dominio está formado
por un par <UID,GID>
Solución:
U1G1
U1G1
U2G2
U3G3
U2G1
U2G3
U2G2
S1
U3G3
U2G1
U2G3
S3
S1
S1
S1
S2
S3
Desde U3G3 no se puede pasar mediante S3 al dominio U3G1 puesto que lo primero
que se indica en S3 es que U3 no puede ejecutar S3
6
Descargar