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