Problemas de Sistemas de Archivo SO2 Abril 2.000 PROBLEMAS RESUELTOS Cuestión 1 Dado un disco de cabeza móvil con 200 cilindros, numerados de 0 a 199 se considera que: Actualmente sirve una solicitud en el cilindro 143. Previamente se solicitó el acceso al cilindro 125. La cola de solicitudes se mantiene en orden FIFO: 86, 147, 91, 177, 94, 150, 102, 175, 130. Se pide: Determinar el movimiento total de la cabeza necesario para satisfacer estas solicitudes con los siguientes algoritmos de planificación de disco: – FCFS. – SSTF. – SCAN. – LOOK. – C-SCAN. Cuestión 2 Dado un disco de cabeza móvil con 200 cilindros, numerados de 0 a 199 y con un tiempo promedio de acceso (rotación + transferencia) de 20 unidades de tiempo se trata de determinar el tiempo total de servicio que se requiere para atender las siguientes peticiones: (0,30), (40,10), (45,40), (60, 60), (100,50), (120, 5), (140, 100), (160, 120) donde la primera componente de cada petición se refiere al instante de tiempo en el que se efectúa dicha petición y la segunda componente indica el cilindro al que se pretende acceder. Se considera que el tiempo de posicionamiento entre cilindros contiguos es igual a 1 unidad de tiempo. Aplicar para el cálculo del tiempo total de servicio los siguientes algoritmos: FCFS. SSTF. SCAN. LOOK. 1 C-SCAN. Nota: El cabezal del disco se encuentra inicialmente posicionado en el cilindro 0 y el servicio de las peticiones se realiza en el sentido de números de cilindro crecientes. Cuestión 3 Dada una estructura de disco de doble cara con 80 cilindros y 18 sectores por pista y un tamaño de sector de 512 bytes, se pide: Determinar la capacidad del disco. Dada la correspondencia entre sectores fı́sicos y lógicos, se trata de determinar la dirección fı́sica (cilindro, cabeza, sector) del número de sector lógico 1234. De forma análoga se desea determinar cual es el número de sector lógico asociado a la dirección fı́sica (47, 1, 15). Cilindro 0 ........ 0 0 ........ 0 1 ........ ........ 79 Cabeza 0 ........ 0 1 ........ 1 0 ........ ........ 1 Sector 0 ........ 17 0 ........ 17 0 ........ ........ 17 Sector lógico 0 ............. 17 18 ............. 35 36 ............. ............. 2879 Cuestión 4 Dado un disco de 20 Mb de capacidad total con los siguientes parámetros: Clusters (bloques) de tamaño 1K. Sectores de 512 bytes. Números de bloque de 16 bits. Se pide: Calcular el número de bloques necesarios para la gestión de bloques libres mediante: – Lista enlazada. – Mapa de bits. Determinar la estructura del disco si lo utilizamos enteramente para MS-DOS: – Calcular el número de sectores reservados a la FAT y su copia. – Calcular el número de sectores reservados para el directorio raı́z (considerar un máximo de 512 entradas). – Determinar el número de clusters de datos disponibles. Calcular el mejor y peor caso en el número de accesos a bloques de disco para leer el 33 MS-DOS situado en el directorio raı́z en el siguiente caso: – Suponiendo que la caché de la FAT en memoria es 1K. 2 cluster de un fichero Realizar el mismo cálculo si el fichero se encuentra en el directorio \PRUEBA que contiene 33 entradas en total. NOTA: En los dos últimos apartados de esta cuestión 4 se asumirá que las lecturas en la FAT y en el directorio raı́z obtienen un bloque entero, en lugar de un solo sector. Cuestión 5 Determinar el tamaño máximo teórico (sin tener en cuenta el tamaño real que tendrá el dispositivo sobre el que deba residir el fichero) de un fichero UNIX, especificando los bloques direccionados con cada tipo de puntero. Los parámetros corresponden a los siguientes valores: Punteros a zonas de datos de 32 bits. Tamaño de bloque 1K (1 zona = 1 bloque). Estructura de nodo-i: – 10 punteros directos. – 1 puntero indirecto. – 1 puntero indirecto doble. – 1 puntero indirecto triple. Realizar el mismo cálculo para un fichero en MINIX con los siguientes parámetros: Punteros a zonas de datos de 16 bits. Tamaño de bloque 1K (1 zona = 1 bloque). Estructura de nodo-i: – 7 punteros directos. – 1 puntero indirecto. – 1 puntero indirecto doble. Cuestión 6 Determinar la estructura de un disco de 20 Mb en MINIX con los siguientes parámetros: Punteros a zonas de datos de 16 bits. Tamaño de bloque 1K (1 zona = 1 bloque). Tamaño de nodo-i de 32 bytes. Número máximo de nodos-i: 512. Se pide: Especifique claramente todas las estructuras de datos que forman el sistema de archivos y los bloques que ocupan. En caso de resultar dañada la estructura del mapa de bits de zonas, piense la forma de reconstruirla con la información de la que se dispone en el resto de estructuras del sistema de archivos (se supone que éstas se conservan inalteradas). 3 Cuestión 7 Suponga que se ha desarrollado una versión de MINIX en la cual el tamaño del bloque se ha cambiado a 128 bytes (1 bloque = 1 zona). Suponga también que se dispone de un disco duro (/dev/hd5) formateado con bloques de 128 bytes, con capacidad para almacenar 10240 bloques con un número máximo de ficheros posibles igual a 127. En este disco existen tres directorios: Directorio / Directorio /bin Directorio /lib Con 10 entradas (todas las entradas incluidas) Con 16 entradas (ı́dem) Con 20 entradas (ı́dem) La longitud de todos los ficheros es de 768 bytes, salvo dos ficheros, /bin/mediano y /bin/grande cuyas longitudes respectivas son 1024 bytes y 10240 bytes. SE PIDE: 1. Cómo está estructurado el disco. 2. Número de bloques para el mapa de nodos-i. 3. Número de bloques para el mapa de zonas. 4. Número de bloques de nodos-i. 5. Número total de zonas de datos. 6. Número de nodos-i utilizados. 7. Número de zonas utilizadas para: (a) Contener datos convencionales de ficheros regulares. (b) Contener entradas de directorios. (c) Contener referencias a otros bloques. Justifique adecuadamente sus respuestas. Cuestión 8 En el sistema operativo MINIX se introducen los siguientes cambios en el diseño del sistema de ficheros: El tamaño de bloque se reduce a 32 bytes. El tamaño de una entrada de directorio se reduce a 8 bytes (2 bytes para el número de nodo-i y 6 para el nombre del fichero). El tamaño del nodo-i se reduce a 16 bytes. Los primeros 8 bytes se emplean para almacenar información general (atributos de fichero), representada en la figura por XX, y los 8 bytes restantes para almacenar los punteros a las zonas pertenecientes al fichero: dos punteros directos, un indirecto simple y un indirecto doble, tal y como muestra la figura: XX número de zona 0 número de zona 1 indirecto indirecto doble 4 A continuación se indican los contenidos de los bloques de un dispositivo de bloques que contiene un sistema de ficheros MINIX. El tamaño de este dispositivo de bloques es de 32K y el número máximo de ficheros que puede contener es 99. Únicamente se han representado los contenidos relevantes para la resolución del problema, indicándose con un – los campos vacı́os. La leyenda superior B- i indica que el número de bloque es el i, y el resto indica el contenido del bloque. B- 7 00 0 0 0 0 XX 57 – – – B- 8 XX 58 – – – XX 59 60 61 – B- 57 1 1 2 3 . .. bin users B- 62 12 13 14 15 dso06 dso07 dso08 dso09 B- 15 XX 64 – – – XX 88 – – – B- 58 2 1 4 5 B- 63 16 17 18 19 B- 17 XX 65 66 67 68 XX 90 – – – B- 61 62 63 – – – – – – – – – – – – – – B- 67 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 B- 68 85 86 87 – – – – – – – – – – – – – . .. cc mined B- 59 3 1 6 7 . .. dso00 dso01 B- 60 8 9 10 11 dso02 dso03 dso04 dso05 dso10 dso11 dso12 dso13 B- 64 16 3 20 – . .. msh.c – B- 88 17 3 21 – . .. msh.c – SE PIDE: 1. Obtener el árbol de directorios contenido en el dispositivo de bloques. 2. Indicar, ordenadamente, los números de bloque a los que se ha de acceder al ejecutar la llamada open("/users/dso11/msh.c", O RDONLY) y el motivo por el que se accede a dichos bloques. 3. Indicar el tamaño en bloques del fichero /users/dso10/msh.c. NOTA: En esta cuestión se asume que el nodo-i n 0 ocupa espacio en el área de nodos-i. En la práctica este nodo-i no utiliza espacio en ningún sistema UNIX, ya que el valor cero se utiliza para indicar que una entrada de directorio ha sido borrada. Sin embargo, en este problema los cálculos serán más sencillos si asumimos que también ocupará espacio. Cuestión 9 Se desea diseñar un sistema de archivo UNIX para unos discos de 320 Kb cuyos bloques van a ser de 1 Kb (1 zona = 1 bloque). 5 SE PIDE: 1. ¿ Cuál podrá ser el tamaño mı́nimo de un puntero a zona ? 2. ¿ Cuántos punteros podrán ubicarse en una misma zona ? 3. Si se necesita 32 bytes por cada nodo-i y de ellos 16 pueden destinarse a punteros a zona, ¿ qué esquema de los siguientes es preferible y por qué ? (a) Que todos los punteros sean directos. (b) Todos los punteros directos, excepto un puntero indirecto simple. (c) Todos los punteros directos, excepto dos punteros indirectos simples. (d) Todos los punteros directos, excepto un puntero indirecto simple y otro indirecto doble. Cuestión 10 Se tiene un dispositivo de almacenamiento de 32 Kb, con bloques de 512 bytes (1 zona = 1 bloque). Este dispositivo va a ser inicializado para poder utilizar un sistema de archivo similar al de MINIX con entradas de directorio de 16 bytes, un máximo de 31 archivos y nodos-i de 16 bytes de los cuales 60 bits pueden dedicarse a punteros directos a zona. Se supone que el tamaño de los punteros a zona es el mı́nimo posible. SE PIDE: 1. Decidir cómo quedará estructurado el disco. Es decir, cuántos bloques se dedican a cada una de las estructuras que mantiene el sistema de archivo. 2. ¿ Cuál será el tamaño máximo de un archivo ? 3. Asumiendo que no se permite crear enlaces fı́sicos, ¿ cuántas entradas podrá tener como máximo un directorio ? ¿ Cuántos bloques podrá llegar a ocupar ? 4. ¿ Cuántos bloques pueden llegar a quedar libres si se crea el máximo número de archivos posible, pero todos ellos con tamaño mı́nimo ? 5. Determinar cómo quedarán los mapas de bits de nodos-i y de zonas después de realizar las acciones que se citan a continuación (y en ese orden). Se supone que un 1 en el mapa de bits indica que el elemento representado está libre. Además, se supone que siempre se utiliza el nodo-i o zona libre con número más bajo. Comentar también qué bloques tiene asignados cada archivo. Las acciones son las siguientes: Inicializar el disco. Crear un directorio /dir1. Crear un directorio /dir2. Crear y escribir un archivo /dir1/a de 2.000 bytes. Borrar el directorio /dir2. Crear y escribir un archivo /dir1/b de 4.900 bytes. Crear y escribir un archivo /dir1/c de 3.500 bytes. Borrar el archivo /dir1/a. Añadir datos al archivo /dir1/c. Se añade 1 Kb al final del archivo. 6. Determinar el contenido de los archivos de tipo directorio que hayan quedado tras realizar las acciones citadas en el punto anterior. 6 Cuestión 11 Dado un disco de cabezal móvil con 100 cilindros, numerados del 0 al 99 donde: Actualmente se está sirviendo una petición sobre el cilindro 50. La petición anterior fue realizada sobre el cilindro 30. Quedan las siguiente peticiones por atender: 81, 23, 95, 70 y 48. SE PIDE: 1. Determinar cuántos cilindros se recorrerán para servir estas peticiones utilizando: SSTF y LOOK. 2. Decidir si alguna de las dos estrategias anteriores es la óptima. En caso negativo, describir una estrategia óptima para el caso en que se conozcan las peticiones a atender. Decidir si esta estrategia sigue siendo válida si llegan más peticiones mientras se están sirviendo las ya encoladas. Cuestión 12 Se tiene un sistema de archivo UNIX sobre un dispositivo con los directorios que a continuación se describen y donde sólo se han usado los nodos-i que aparecen en tales entradas de directorio. Además, se supone que cuando se necesita crear un nuevo archivo, este utiliza el nodo-i libre con el número más pequeño posible. 1 1 2 4 5 6 . .. users unix dev bin 2 1 10 12 . .. felipe alfonso 5 1 11 13 11 . .. tty0 tty1 console 6 1 20 21 22 23 . .. ls cat less sh 10 2 23 25 . .. mysh ed 12 2 . .. SE PIDE: 1. Dibujar la estructura de directorios. 2. Determinar cómo quedarán, dando su contenido, los archivos tipo directorio tras realizar sobre el sistema los siguientes mandatos: $ $ $ $ $ $ $ $ cp ln mv rm rm ln cp mv /users/felipe/mysh /users/alfonso/sh /users/alfonso/sh /users/alfonso/bash /users/felipe/ed /bin /dev/tty0 /bin/sh -s /unix /users/alfonso/sistema /users/felipe/* /users /bin/cat /unix Nota: Se supone que el usuario que efectúa estas operaciones posee los derechos de acceso necesarios para que ninguna de ellas provoque un error. 7 SOLUCIONES Cuestión 1 1. Algoritmo FCFS: Las peticiones se sirven en orden de llegada. Cil. actual 143 86 147 91 177 94 150 102 175 Cil. a servir 86 147 91 177 94 150 102 175 130 Desplaz. 143 - 86 = 147 - 86 = 147 - 91 = 177 - 91 = 177 - 94 = 150 - 94 = 150 - 102 = 175 - 102 = 175 - 130 = TOTAL: (cil.) 57 61 56 86 83 56 48 73 45 565 2. Algoritmo SSTF: Se sirve primero aquella petición que implique un menor desplazamiento. El asterisco (*) simboliza la posición actual de la cabeza de lectura/escritura. El cilindro a servir aparece subrayado. Cil. actual 143 147 150 130 102 94 91 86 175 Cilindros pendientes 86, 91, 94, 102, 130, *, 147, 150, 175, 177 86, 91, 94, 102, 130, *, 150, 175, 177 86, 91, 94, 102, 130, *, 175, 177 86, 91, 94, 102, *, 175, 177 86, 91, 94, *, 175, 177 86, 91, *, 175, 177 86, *, 175, 177 *, 175, 177 *, 177 Desplaz. 147 - 143 = 150 - 147 = 150 - 130 = 130 - 102 = 102 - 94 = 94 - 91 = 91 - 86 = 175 - 86 = 177 - 175 = TOTAL: (cil.) 4 3 20 28 8 3 5 89 2 162 3. Algoritmo SCAN: Ya que el último cilindro servido fue el 125 y nos encontramos en el 143, supondremos que la dirección de servicio es ascendente. Se realizan dos pasadas, la primera ascendente en la que servimos todas los cilindros entre la posición actual y el final del disco (cilindro 199). Tras esto partimos del cilindro 199 en dirección descendente y servimos todos los cilindros pendientes. Direc. servicio Ascendente Descendente Cilindros servidos 147, 150, 175 y 177 130, 102, 94, 91 y 86 Desplaz. 199 - 143 = 199 - 86 = TOTAL: (cil.) 56 113 169 4. Algoritmo LOOK: Igual que el anterior, pero al servir en orden ascendente no llegamos al final del disco sino que invertimos el sentido de servicio al llegar al cilindro 177. Direc. servicio Ascendente Descendente Cilindros servidos 147, 150, 175 y 177 130, 102, 94, 91 y 86 8 Desplaz. 177 - 143 = 177 - 86 = TOTAL: (cil.) 34 91 125 5. Algoritmo SCAN circular (C-SCAN): Suponemos sentido de servicio ascendente. Al llegar al último cilindro del disco (el 199), volvemos al cilindro 0 sin servir ninguna petición y desde allı́ iniciamos de nuevo el servicio en orden ascendente. Direc. servicio Ascendente Descendente Ascendente Cilindros servidos 147, 150, 175 y 177 Ninguno 86, 91, 94, 102 y 130 Desplaz. 199 - 143 = 199 - 0 = 130 - 0 = TOTAL: (cil.) 56 199 130 385 Cuestión 2 Emplearemos las siguientes abreviaturas: CA: Cilindro actual. CS: Cilindro a servir. Desp: Desplazamiento en cilindros desde el actual al que debe ser servido. TS: Tiempo de servicio del cilindro a servir. Incluye posicionamiento, rotación y transferencia. Su valor será igual, en este problema, a: !#"$&% (' )*+-,/. 1. Algoritmo FCFS: Inst. 0 50 90 140 180 210 275 390 430 CA 0 30 10 40 60 50 5 100 120 Cola petic. 30 10, 40 40, 60 60, 50, 5, 100 50, 5, 100, 120 5, 100, 120 100, 120 120 Vacı́a CS 30 10 40 60 50 5 100 120 - Desp 30 20 30 20 10 45 95 20 - TS 50 40 50 40 30 65 115 40 - Inst. 0 50 80 120 150 210 235 350 390 CA 0 30 40 60 50 10 5 100 120 Cola petic. *, 30 10, *, 40 10, *, 60 5, 10, 50, * 5, 10, *, 100 5, *, 100, 120 *, 100, 120 *, 120 Vacı́a CS 30 40 60 50 10 5 100 120 - Desp 30 10 20 10 40 5 95 20 - TS 50 30 40 30 60 25 115 40 - 2. Algoritmo SSTF: 3. Algoritmo SCAN: Suponemos que una vez se ha programado una operación SEEK sobre el controlador de disco no hay manera de abortarla. Además, cuando no queden peticiones en el sentido actual, se programa un SEEK hasta el final del disco en ese sentido. 9 Inst. 0 50 80 120 259 358 398 468 528 553 CA 0 30 40 60 199 120 100 50 10 5 Cola petic. 0 , 30 10, 0 , 40 10, 0 , 60 5, 10, 50, 0 5, 10, 50, 100, 120, 5, 10, 50, 100, 1 5, 10, 50, 1 5, 10, 1 5, 1 Vacı́a CS 30 40 60 199 120 100 50 10 5 1 Desp 30 10 20 139 79 20 50 40 5 - TS 50 30 40 139 99 40 70 60 25 - 4. Algoritmo LOOK: Inst. 0 50 80 120 150 210 235 350 390 CA 0 30 40 60 50 10 5 100 120 Cola petic. 0 , 30 10, 0 , 40 10, 0 , 60 5, 10, 50, 1 5, 10, 1 , 100 5, 1 , 100, 120 0 , 100, 120 0 , 120 Vacı́a CS 30 40 60 50 10 5 100 120 - Desp 30 10 20 10 40 5 95 20 - TS 50 30 40 30 60 25 115 40 - 5. Algoritmo C-SCAN: Suponemos que una vez se ha programado una operación SEEK sobre el controlador de disco no hay manera de abortarla. Además, cuando no queden peticiones en el sentido actual, se programa un SEEK hasta el final del disco en ese sentido. Inst. 0 50 80 120 259 458 483 508 568 638 678 CA 0 30 40 60 199 0 5 10 50 100 120 Cola petic. 0 , 30 10, 0 , 40 10, 0 , 60 5, 10, 50, 0 5, 10, 50, 100, 120, 1 0 , 5, 10, 50, 100, 120 0 , 10, 50, 100, 120 0 , 50, 100, 120 0 , 100, 120 0 , 120 Vacı́a CS 30 40 60 199 0 5 10 50 100 120 - Desp 30 10 20 139 199 5 5 40 50 20 - TS 50 30 40 139 199 25 25 60 70 40 - Cuestión 3 1. Capacidad del disco. Tendremos que averiguar cuantos sectores tiene el disco y después multiplicar la cifra obtenida por el tamaño del sector. Ası́: Núm. sectores 2.880 = = Núm. caras 2 * * Núm. cilindros 80 * * Sectores / pista 18 La capacidad del disco en Kb será: 2.880 * 0.5 = 1.440 Kb ya que el tamaño de sector es de medio Kb. 10 2. Dirección fı́sica del bloque lógico 1234. Suponemos un solo sector por bloque. Las direcciones fı́sicas tienen la siguiente estructura: (núm. cilindro, núm. cara, núm. sector) Además, la numeración se sigue del siguiente modo: hasta que no se han numerado todos los sectores de una cara no se pasa a la siguiente cara del mismo cilindro y hasta que no se hayan numerado todas las caras de un cilindro no se pasa al siguiente. Por tanto, para obtener la dirección fı́sica efectuaremos lo siguiente: (a) Dividiremos la dirección lógica por el número de sectores por pista. O sea: 1234 div 18 = 68 1234 mod 18 = 10 Esto quiere decir que con la dirección lógica 1234 se han podido “llenar” 68 caras y se está referenciando el undécimo sector (ya que empezamos a numerarlos a partir de cero) de la sexagésima novena cara. (b) Dividiremos el número de caras “completas” obtenido en el punto anterior por el número de caras por cilindro que admite el disco. Ası́: 68 div 2 = 34 68 mod 2 = 0 Esto se interpreta como que hemos podido “completar” 34 cilindros y estamos en la primera cara del trigésimo quinto. Por tanto, la dirección fı́sica pedida es: ( 34, 0, 10 ) Es decir, cilindro 34, cara 0, sector 10. 3. Dirección lógica para la dirección fı́sica ( 47, 1, 15 ). Suponiendo direcciones fı́sicas de la forma ( i, j, k ), basta con aplicar la fórmula: 243 5 -66768!:9;=<;>?@BACD7E>GF*>H87E9JIK9 2ML FNOP9Q El resultado obtenido es: 243 R'6S '=T @ ' D,UPVHW/Q X'6S '6T Y SZR'*S ' W ' . (' W/, S Con lo que el número de bloque lógico es el 1725. Cuestión 4 1. Bloques necesarios si se utiliza lista enlazada. La lista enlazada propiamente dicha utiliza un puntero al final de cada bloque para enlazarlo con el siguiente bloque libre. O sea, se utilizan los propios bloques libres para mantenerlos en la lista. Por tanto, no es necesario ningún bloque adicional para mantener el control sobre qué bloques tenemos libres. En algunos casos, para compactar la lista, se utilizan unos pocos bloques libres para guardar (de manera similar a un ı́ndice enlazado) todos los números de los bloques disponibles. Esto no aporta ninguna variación al caso comentado en el párrafo anterior, pues estos bloques se van liberando a medida que se van asignando bloques disponibles. Al final, si se asignan todos los bloques a ficheros, no queda ningún bloque dedicado a mantener la lista enlazada. 11 2. Bloques necesarios si se utiliza mapa de bits. El tamaño de bloque es de 1.024 bytes, con lo que en cada bloque tendremos 8.192 bits para mantener el mapa. Nuestro disco tiene 20 Mb. Eso representa 20 * 1.024 bloques, o sea, 20.480 bloques. Por tanto, utilizando mapa de bits necesitamos: 243 ' ,/.U .G,V T ' . ,V G ,$. T ,\[ S 3 IKN_*`a 0^] 3. Estructura del disco. (a) Tamaño de la FAT (en sectores): Como utilizamos números de cluster de 16 bits, en un sector de 512 bytes se podrán mantener 256 números de cluster. Por tanto, tendremos 256 entradas de la FAT en cada sector. El número de clusters en nuestro disco ha sido calculado previamente y es igual a 20480. (En la práctica es ligeramente inferior, puesto que la información mantenida en la cabecera no se organiza en clusters, sino en sectores, y no puede utilizarse para mantener ficheros. Sin embargo, esto no afecta demasiado a la hora de efectuar los cálculos: el número correcto de clusters es 20383 como veremos dentro de un momento, pero al dividirlo entre 256 y redondearlo hacia arriba dará el mismo resultado.) Por tanto: >GbdcMegf `b[ 7EIi`g=<;=F/ 2 <F*> L >H*8$667E<;N*F h ,$./V , T S$j . T . (b) Directorio raı́z (en sectores): Una entrada de directorio MS-DOS ocupa 32 bytes. Por tanto, en un sector tendremos: 2 <F> L >H8/6*7#<;N*F >Gbk;; >Gb ;" ml# SH' , X'=j ] , Si el directorio raı́z mantiene un máximo de 512 entradas, deberemos asignarle: 2 `b[n=*7#<;N*F SH' '=j , ] , (c) Clusters de datos: Del total de 20480 bloques que posee el disco, tenemos reservados los siguientes: Por el sector de arranque primario o MBR (Master Boot Record): 1 sector (medio bloque). Por el sector de arranque de la partición DOS: 1 sector (medio bloque). Por la FAT y su copia: 80 + 80 = 160 sectores (80 bloques). Por el directorio raı́z: 32 sectores (16 bloques). O sea, en total 97 bloques. Por tanto, para clusters de datos tendremos 20480 - 97 = 20383 clusters. 4. Mejor y peor caso para leer el cluster 33 de un archivo del directorio raı́z. Mejor caso Tarea Lectura y búsqueda del archivo en el primer bloque del directorio raı́z. Encontramos la entrada de directorio de ese archivo en este primer bloque del raı́z. Obtenemos, por tanto, el número del primer cluster del archivo. Recorrido de la FAT para buscar el trigésimo tercer cluster del archivo. Todos los números de cluster explorados se encuentran en la caché para la FAT. Acceso al cluster pedido. 12 Accesos 1 Acumul. 1 0 1 1 2 Peor caso Tarea Lectura y búsqueda del archivo en los sectores del directorio raı́z (Existen 16 bloques en el raı́z). Encontramos la entrada de directorio del archivo en el último bloque del directorio. Recorrido de la FAT para buscar el trigésimo tercer cluster del archivo. Todos los números de cluster explorados se encuentran en distintos bloques de la FAT y, además, el primero de ellos no estaba en la caché. Acceso al cluster pedido. Accesos 16 Acumul. 16 32 48 1 37 Accesos 1 Acumul. 1 1 2 0 2 1 3 5. Ídem pero suponiendo que el archivo se encuentra en \PRUEBA. Mejor caso Tarea Lectura y búsqueda del directorio \PRUEBA en el primer bloque del directorio raı́z. Econtramos su entrada de directorio en este primer bloque. Leemos su entrada de directorio y obtenemos su primer número de cluster. Buscamos la entrada del archivo en el primer cluster del directorio \PRUEBA y lo encontramos. Recorrido de la FAT para buscar el trigésimo tercer cluster del archivo. Todos los números de cluster explorados se encuentran en la caché para la FAT. Acceso al cluster pedido. Peor caso. Recuérdese que en un cluster de 1Kb podemos guardar hasta 32 entradas de directorio. Esto implica que el directorio \PRUEBA necesita dos clusters. Tarea Lectura y búsqueda del directorio \PRUEBA en los bloques del directorio raı́z. Encontramos el directorio en el último bloque del directorio raı́z. Con ello obtenemos el número de su primer cluster. Buscamos el archivo entre las primeras 32 entradas del directorio \PRUEBA y no lo encontramos. Buscamos en la FAT el número del siguiente cluster del directorio. No está en la caché. Leemos la última entrada del directorio (en el segundo de sus clusters) y encontramos allı́ el archivo buscado. Recorrido de la FAT para buscar el trigésimo tercer bloque del archivo. Todos los números de cluster explorados se encuentran en distintos bloques de la FAT y, además, el primero de ellos no estaba en la caché. Acceso al cluster pedido. 13 Accesos 16 Acumul. 16 1 17 1 18 1 19 32 51 1 52 Cuestión 5 Para determinar el tamaño máximo de un archivo en un sistema UNIX debemos tener en cuenta dos cifras: El número máximo de bloques que puede llegarse a mantener. Esto se determina a partir del tamaño de los punteros a zona, ya que no podremos tener una partición de disco mayor que este lı́mite y un archivo no puede extenderse por más de una partición. Cuántos punteros a zona pueden llegarse a guardar a partir de un nodo-i, teniendo en cuenta los niveles de indirección que pueden mantenerse. El tamaño máximo del archivo será el menor de estos dos valores. Veamos los dos casos presentados: UNIX. Según el lı́mite debido al tamaño de puntero, tenemos que el tamaño máximo serı́a: tam. partición = 2 op bloques = 4 Gbloques Mq 4 Tbytes Según el número de punteros tendremos: En una misma zona podrá llegar a haber 1024 / 4 = 256 punteros a zona, ya que una zona tiene 1024 bytes y cada puntero ocupa 4. Por tanto, el número de punteros a zona será: Tipo de puntero Directos en nodo-i. Indirecto simple. Indirecto doble. Indirecto triple. TOTAL: Punteros directos 10 256 256 p = 65.536 256 o = 16.777.216 16.843.018 Por tanto, esta cifra obtenida es menor que la anterior y el tamaño máximo del archivo será de: 16.843.018 bloques = 16.842.018 Kb Mq 16’064 Gbytes MINIX. Debido al tamaño de puntero, el tamaño máximo es en este caso: tam. partición = 2 r&s bloques = 64 Kbloques 4q 64 Mbytes Según el número de punteros tendremos: En una zona podrá haber 1024 / 2 = 512 punteros a zona, ya que una zona tiene 1024 bytes y cada puntero ocupa 2. Tipo de puntero Directos en nodo-i. Indirecto simple. Indirecto doble. TOTAL: Esto hace un total de 262.663 bloques 4q Punteros directos 7 512 512 p = 262.144 262.663 256’5 Mbytes. En este caso, el lı́mite lo proporciona el tamaño de la partición. Con esto el tamaño máximo queda en 64 Mbytes. 14 Cuestión 6 1. Estructura del disco. Un disco MINIX tiene las siguientes partes: (a) Bloque de arranque: (b) Superbloque: 1. 1. 1 (c) Mapa de bits para nodos-i: . Necesitamos un bit por archivo. Como el disco únicamente va a permitir 512 archivos, basta con 512 bits. En la práctica, el autor de MINIX añadió una entrada más en el mapa de bits, correspondiente al nodo-i 0. Por tanto, en el mapa existirı́an realmente 513 bits, aunque en disco sólo se necesitarı́a espacio para guardar 512 nodos-i. En este sistema un bloque tiene 1024 bytes (8192 bits), con lo que el mapa cabe en un solo bloque. 3 (d) Mapa de bits para zonas: . Un disco de 20 Mb tiene 20480 bloques de 1 Kb. En cada bloque caben 8 * 1024 bits. Por tanto, se tendrá: ' ,/.U .t,V T ' . ,V G 243 ,/. T ,\[ S 0u] 16 (e) Bloques para nodos-i: . Como cada nodo-i ocupa 32 bytes, en un bloque cabrán 1024 / 32 = 32 nodos-i. Si vamos a tener 512 nodos-i, necesitaremos: 243 wv SH' , ('=j ] ,yx 20458 (f) Bloques para datos: . Únicamente hay que descontar los bloques vistos en los puntos anteriores de la capacidad total del disco. 243 ,/.$V T .{z|@ ' ' ' ] '6j Q ,/./V T .{z},t, ,$./V S$T 2. Reconstrucción del mapa de bits de zonas. Suponiendo que el resto del disco no ha resultado dañado, se podrı́a realizar lo siguiente: (a) Reinicializar todo el mapa de bits de zonas de manera que todos las zonas de disco aparezcan como libres. (b) Siguiendo el mapa de bits para nodos-i, recorrer todos los nodos-i utilizados. Para cada uno de ellos habrá que consultar sus punteros directos a zona y marcar tales zonas como ocupadas en el mapa de bits que se dañó. Lo mismo para los punteros indirecto simple e indirecto doble, bajando hasta el nivel de zona de punteros directos. De esta manera todas las zonas utilizadas por todos los archivos son marcadas en el mapa de bits como “en uso”. Una vez terminados estos dos pasos, el mapa de bits para zonas estará recuperado. Cuestión 7 Dado que ha cambiado el tamaño del bloque, es necesario en primer lugar calcular la cantidad de elementos que puede contener un bloque en función de su tipo: tipo de bloque tamaño del elemento número de elementos mapas de bits 1 bit 1024 nodos-i 32 bytes 4 entradas de directorios 16 bytes 8 referencias a zonas 2 bytes 64 datos 1 byte 128 15 1. Cómo está estructurado el disco Bloque de arranque- Superbloque- Mapa de nodos-i- Mapa de zonas- Nodos-i- Datos 2. Número de bloques del mapa de nodos-i. 1 El número máximo de nodos-i necesarios es igual a 127. Por lo tanto, basta un solo bloque para contener el mapa de nodos-i, puesto que tiene capacidad para 1024 bits. 3. Número de bloques del mapa de zonas. 10 El número total de zonas (bloques) es igual a 10.240. Como cada bloque tiene capacidad para 1024 bits, son necesarios 10 bloques para albergar todo el mapa de zonas. 4. Número de bloques de nodos-i. 32 El número máximo de nodos-i necesarios es igual a 127. Puesto que un bloque tiene capacidad para 4 nodos-i, son necesarios 32 para contener todos los nodos-i. 5. Número total de bloques de datos. 10.195 Se han consumido en los apartados anteriores 1, 10 y 32 bloques. Junto con los bloques de arranque y superbloque, dan un total de 45 bloques consumidos. Siendo el total de bloques igual a 10.240, quedan 10.195 bloques de datos, los cuales se pueden utilizar para albergar datos convencionales, entradas de directorios o referencias a otros bloques. 6. Número de nodos-i utilizados. 41 Un nodo-i por cada directorio o fichero regular. Directorio raı́z (/) Directorio /bin Directorio /lib Ficheros regulares de / 10 - 2 (. y ..) -2 (/bin y /lib) Ficheros regulares de /bin 16 - 2 (. y ..) Ficheros regulares de /lib 20 - 2 (. y ..) TOTAL 1 1 1 6 14 18 41 7. Número de bloques utilizados para: (a) Contener datos convencionales de ficheros regulares. 304 El número de ficheros regulares es igual a 38. (41 menos 3 directorios). La ocupación en disco de los datos de estos ficheros es la siguiente: 36 ficheros regulares de 768 bytes (6 bloques) 216 1 fichero regular de 1024 bytes (8 bloques) 8 1 fichero regular de 10240 bytes (80 bloques) 80 TOTAL 304 (b) Contener entradas de directorios. Directorio raı́z (/) 10 entradas Directorio /bin 16 entradas Directorio /lib 20 entradas TOTAL 7 2 2 3 7 (c) Contener referencias a otros bloques. 4 Los ficheros regulares de 768 bytes no utilizan los punteros indirectos del nodo-i, puesto que ocupan 6 zonas y en el nodo-i en MINIX existen 7 referencias directas. El fichero /bin/mediano necesita 8 zonas de datos. Las primeras 7 zonas son referenciados directamente en el nodo-i. El bloque número 7 necesita la referencia simple indirecta del nodo-i. Esta referencia necesita una zona de datos, cuyos primeros dos bytes apuntan a la zona número 7 del fichero, y el resto del bloque no se utiliza. El fichero /bin/grande necesita 80 zonas de datos. 16 Las primeras 7 zonas son referenciadas directamente en el nodo-i. Las 64 zonas siguientes necesitan la referencia simple indirecta del nodo-i. Esta referencia necesita una zona de datos, que se utiliza completamente. Las últimas 9 zonas necesitan la referencia doble indirecta del nodo-i. Esta referencia necesita una zona de datos, cuyos primeros dos bytes apuntan a otra zona de datos, que contiene las últimas 9 referencias del fichero. Cuestión 8 El primer paso para resolver el problema consistirá en determinar qué bloques son utilizados para mantener los nodos-i y otras estructuras al principio del disco. Veamos: Supondremos que el bloque de arranque sigue siendo único: Necesitamos también un bloque para el superbloque: 1. 1. Mapa de bits para nodos-i: 1. Como únicamente necesitamos 100 nodos-i y un bloque tiene 32 * 8 = 256 bits, basta con un bloque para mantener esta información. Mapa de bits para zonas de datos: 4. Si el dispositivo tiene 32 Kb y el tamaño de bloque es de 32 bytes, tendrá 1024 bloques. Si cada bloque puede mantener 256 bits, el mapa necesita 1024 / 256 = 4 bloques. Bloques para nodos-i: 50. Si hay 100 nodos-i y en cada bloque caben 2, necesitaremos 100 / 2 = 50 bloques. Bloques para datos: 967. Los bloques ya citados contabilizan un total de 57. Si el dispositivo tiene 1024, la diferencia 1024 - 57 = 967 será la cantidad de bloques para datos (zonas) que tendrá el dispositivo. Con esto sabemos que: Los bloques del 0 al 6 se utilizan para mantener el bloque de arranque, el superbloque y los mapas de bits. El bloque 7 será el primero que mantenga nodos-i. En concreto mantendrá los nodos-i 0 y 1. En general, el bloque i entre 7 y 56, mantiene los nodos-i: (2*i - 14) y (2*i - 13). El bloque 57 será el primero que mantenga zonas para datos, directorios y zonas de punteros a zona. 1. Árbol de directorios. Veamos sobre qué archivos mantenemos información. Según lo dicho anteriormente los bloques 7, 8, 15 y 17 mantienen los nodos-i (0, 1), (2, 3), (16, 17) y (20, 21). Contrastando esta información con los bloques 57 a 60, 62 a 64 y 88, puede decirse que: El bloque 57 mantiene el directorio raı́z, puesto que utiliza el nodo-i 1 y sus entradas . y .. apuntan a dicho nodo-i. Tiene únicamente dos subdirectorios: bin (nodo-i 2) y users (nodo-i 3). Consultando el nodo-i 2, vemos que el directorio /bin está guardado en la zona 58 y que sólo tiene esa zona. Mantiene dos entradas: cc (nodo-i 4) y mined (nodo-i 5), pero no podemos decir nada más sobre ellas porque no sabemos nada de sus nodos-i. 17 Consultando el nodo-i 3 vemos que el directorio /users está guardado en las zonas 59, 60, 62 y 63 (en este orden), ya que el número 61 se utiliza como puntero indirecto a zona. Por tanto, este directorio tiene 16 entradas que corresponden a ., .., y 14 archivos cuyo nombre va de dso00 a dso13. El bloque 15 nos proporciona los nodos-i 16 y 17, correspondientes a los directorios /users/dso10 y /users/dso11 respectivamente. Ambos ocupan una zona únicamente. En ambos casos encontramos un único archivo msh.c dentro de cada directorio. El bloque 17 mantiene los nodos-i de estos dos archivos. Deberemos usarlo para tener una idea del tamaño de ambos archivos. Por lo dicho hasta ahora, la estructura de directorios debe ser la siguiente (se adjunta el número de nodo-i correspondiente a cada archivo): 1 / 2 3 bin 4 cc users 5 mined 6 dso00 ... 16 dso10 17 dso11 20 msh.c 2. Ejecución de open( "/users/dso11/msh.c", O RDONLY ). Veamos qué accesos deben realizarse: Bloque 57 8 59 60 61 62 63 15 88 17 Explicación Lectura del directorio raı́z. Encontramos entrada users. Lectura del nodo-i 3. Encontramos números de zona donde leer el directorio users. Buscamos en las primeras dos entradas el archivo dso11. No lo encontramos. Buscamos en las siguientes cuatro entradas. Tampoco tenemos suerte. Leemos la zona que mantiene los siguientes punteros directos. Buscamos en las siguientes cuatro entradas. No lo encontramos. Buscamos en las siguientes cuatro entradas. Encontramos entrada. Sabemos que el número de nodo-i es 17 y que estará en el bloque 15. Encontramos que la zona para el directorio dso11 es el 88. Buscamos entrada msh.c en el directorio y la encontramos. El nodo-i a cargar para realizar la apertura es el 21. Leemos el nodo-i 21 en el bloque 17. Con esto terminamos. 3. Tamaño en zonas de /users/dso10/msh.c. 18 ... 21 msh.c 19 dso13 Sabemos que cada zona de disco puede mantener 16 punteros a otras zonas. Partiendo de la información del nodo-i 20, en el bloque 17, podemos saber: Las zonas 65 y 66 son las dos primeras del archivo. El número 67 es un puntero indirecto. En él se mantienen los siguientes 16 números de zona. El número 68 es un puntero doble indirecto. Su contenido nos da los números de tres zonas más que contienen ya punteros directos. Por tanto, sabemos que el archivo tendrá 32 zonas más (cuyos números están guardados en las zonas 85 y 86). El número 87 es un puntero indirecto. No sabemos nada de su contenido. Sin embargo, como mı́nimo tendrá un puntero directo válido y como máximo 16. Acumulando lo dicho anteriormente tendremos: Que el fichero utiliza las zonas 67, 68, 85, 86 y 87 como zonas con punteros a zona. Por tanto, 5 zonas se necesitan para esto. Que el fichero utiliza 2 + 16 + 2*16 = 50 zonas de datos, referenciados por el nodo-i o por las zonas de punteros 67, 85 y 86, mientras que la zona 87 aportará entre 1 y 16 zonas más. O sea se emplean entre 51 y 66 zonas de datos. Esto hace que el total oscile entre 56 y 71 zonas. Cuestión 9 1. Tamaño mı́nimo del puntero a zona. En el disco tendremos 320 bloques, ya que su capacidad total es de 320 Kb y el tamaño de bloque (y de zona) es de 1Kb. Para mantener 320 bloques necesitamos al menos 9 bits, ya que 2 ~ = 256 (con 8 bits únicamente se pueden referenciar 256 bloques diferentes) mientras que 2 = 512 (con 9 bits se podrı́an referenciar 512 bloques). 2. Punteros por zona. En una zona podremos mantener: 2 >Gb[ tN 2 > >Gb[ :` 2 <;6* F N T ' .t,V Y Y ' .:[ , 0 Y ' .` 2 <;6FN/ 3. Tipo de punteros en el nodo-i. Si tenemos 16 bytes para punteros, podremos llegar a mantener en un mismo nodo-i: 2 '6j Y T ' , T Y (' V:[n, 0 ' V` 2 <;6FN/ Las alternativas presentadas se convierten ası́ en las siguientes: (a) 14 punteros directos. Permite un tamaño máximo del archivo de 14 Kb, pero los números de bloque están todos accesibles una vez se carga el nodo-i en memoria. El único problema es que el tamaño máximo del archivo es excesivamente pequeño. (b) 13 punteros directos y uno indirecto simple. Esta opción es la más adecuada, puesto que si el tamaño del archivo no supera los 13 Kb, todos sus punteros se mantienen en el nodo-i. En caso de que el archivo sea mayor basta con mantener un puntero indirecto simple ya que esto admitirı́a 910 punteros directos más. Obviamente, como la capacidad del disco es de 320 bloques, nunca se llegarı́a a requerir más bloques de punteros. 19 (c) 12 punteros directos y 2 indirectos simples. No es conveniente, puesto que el segundo puntero indirecto nunca se usarı́a y se obligarı́a a usar un bloque de punteros para los archivos con más de 12 Kb, mientras con la opción anterior esto no era necesario hasta sobrepasar los 13 Kb. (d) 12 punteros directos, 1 indirecto simple y 1 indirecto doble. Ocurre lo mismo que en el caso anterior. Cuestión 10 1. Estructura del disco. El disco tendrá: op#r; !p& r&p = 64 bloques. Estos se descomponen del siguiente modo: 1 bloque de arranque. 1 superbloque. 1 bloque para el mapa de nodos-i. Tendremos 31 nodos-i, por tanto necesitamos 31 bits para “mapearlos”. Además, en MINIX el nodo-i número cero, a pesar de no existir, ocupaba espacio en el mapa. Por tanto, habrá 32 bits en el mapa. Con un bloque tenemos suficiente. 1 bloque para mapa de zonas de datos. Como máximo tendrı́amos 64 bits (algunos no hacen falta puesto que están ocupados por el bloque de arranque, el superbloque, los mapas, etc.). Con un bloque volvemos a tener bastante. 1 bloque para nodos-i. Tendremos 31 nodos-i y cada uno de ellos necesita 16 bytes. Por tanto, se necesitan 496 bytes para almacenarlos, con lo que se usará un bloque. 59 bloques para datos. Del total de 64 bloques del disco, 5 ya están ocupados. Por tanto, quedan 59 para datos. 2. Tamaño máximo de archivo. Necesitamos conocer cuántos bloques podremos referenciar mediante los 60 bits que mantiene un nodo-i para punteros directos. El tamaño de un puntero a bloque será: 64 bloques 0 2 s bloques 0 punteros de 6 bits Tenemos 60 bits disponibles. Ası́ tendremos: 60 / 6 = 10 punteros directos. Como cada bloque es de 512 bytes, el archivo podrá llegar a 5 Kb. 3. Máximo número de entradas en un directorio. En principio este valor no está limitado. Únicamente depende del número de archivos que se puedan crear. En nuestro caso, sólo podremos crear 31 archivos. Si todos los archivos se encontraran en el directorio raı́z tendrı́amos: Las entradas . y .. que se referirı́an al propio archivo del directorio raı́z. 30 entradas más que acogerı́an al resto de archivos. Esto supone un total de 32 es lo mismo, 1 bloque. entradas. Como cada entrada necesita 16 bytes, esto supondrı́a 512 bytes; o lo que 20 4. Máximo número de zonas libres si se crean todos los archivos posibles. Podremos llegar a crear 31 archivos. De ellos, al menos uno será un directorio (el directorio raı́z). Los treinta restantes pueden ser archivos regulares. En UNIX se permite crear un archivo de longitud cero. Es más, este tipo de archivos no requieren ninguna zona de datos. Por tanto, si los 30 archivos regulares tienen tamaño mı́nimo no están ocupando zonas de datos. Por todo lo anterior, estos archivos solamente ocuparán la zona necesaria para el directorio raı́z. Como tenı́amos 59 zonas para datos, quedarán libres 58 zonas. 5. Mapas de bits. En el mapa de bits para nodos-i tenemos la siguiente situación: El nodo-i 0 se considera en uso. Aparece en el mapa como usado, pero en la práctica no existe tal nodo-i. El nodo-i 1 mantiene el directorio raı́z. El nodo-i 2 mantiene el directorio /dir1. El nodo-i 3 mantiene el archivo /dir1/b. El nodo-i 5 mantiene el archivo /dir1/c. Respecto al mapa de bloques de datos (zonas), sabemos lo siguiente (recuérdese que la primera zona del mapa corresponde al primer bloque de datos; en nuestro caso el 5): El directorio raı́z está en la zona 5. El directorio /dir1 está en la zona 6. El archivo /dir1/b está en las zonas 7, 12, 13, 14, 15, 16, 17, 18, 19 y 20. El archivo /dir1/c está en las zonas 21, 22, 23, 24, 25, 26, 27, 8 y 9. Los mapas de bits serán: Mapa de nodos-i 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 Mapa de zonas 0 0 0 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 – – – 6. Contenido de los archivos directorio del punto anterior. Será el siguiente: 1 1 2 . .. dir1 Cuestión 11 1. Cilindros recorridos con SSTF y LOOK. SSTF 21 2 1 3 5 . .. b c 1 0 0 1 1 1 1 – 0 0 1 1 1 1 1 – Cil. actual 50 48 70 81 95 Cilindros pendientes 23. 48, *, 70, 81, 95 23, *, 70, 81, 95 23, *, 81, 95 23, *, 95 23, * Desplaz. 50 - 48 = 70 - 48 = 81 - 70 = 95 - 81 = 95 - 23 = TOTAL: (cil.) 2 22 9 14 72 121 LOOK Direc. servicio Ascendente Descendente Cil. servidos 70, 81 y 95 48 y 23 Desplaz. 95 - 50 = 95 - 23 = TOTAL: (cil.) 45 72 117 2. Algoritmo “óptimo” Ni el LOOK ni el SSTF dan el mejor resultado posible para las peticiones que nos plantea el problema. Si el sentido inicial de servicio fuera descendente el LOOK proporcionarı́a un resultado óptimo. Dado un conjunto estático de peticiones, el recorrido óptimo serı́a el siguiente: Conocido el conjunto de peticiones y el cilindro donde está actualmente la cabeza, servirlas en el sentido hacia aquel extremo que quede más cerca del cilindro actual. Una vez llegado al cilindro de la última petición en tal sentido, invertir el sentido de servicio y pasar a servir las peticiones restantes. En nuestro caso, las peticiones en los extremos (la de menor y mayor cilindro, respectivamente) son sobre los cilindros 23 y 95. El cilindro actual es el 50. Por tanto, el “extremo” más cercano es el cilindro 23, con lo que primero serviremos en orden descendente y después en ascendente. Ası́, Direc. servicio Descendente Ascendente Cil. servidos 48 y 23 70, 81 y 95 Desplaz. 50 - 23 = 95 - 23 = TOTAL: (cil.) 27 72 99 No obstante, este algoritmo no funcionarı́a bien a medida que fueran llegando nuevas peticiones ya que deberı́an recalcularse los “extremos” con cada nueva petición y raramente se atenderı́an peticiones alejadas del cilindro actual. Cuestión 12 1. Estructura de directorios 22 / users felipe ed alfonso bin sh ls unix cat less dev tty0 console tty1 mysh 2. Estado final de los directorios. 1 1 2 21 5 6 . .. users unix dev bin 2 1 10 12 8 . .. felipe alfonso mysh 5 1 13 11 . .. tty1 console 23 6 1 20 22 25 . .. ls less ed 10 2 23 . .. mysh 12 2 3 3 7 . .. sh bash sistema CUESTIONES Y PROBLEMAS PROPUESTOS Cuestión 1 Decidir si las siguientes afirmaciones sobre el sistema de archivos UNIX son verdaderas o falsas: La creación de un enlace fı́sico mediante el mandato ln implica la utilización de un nuevo nodo-i. La creación de un enlace simbólico mediante el mandato ln -s no requiere el uso de un nuevo nodo-i. El mandato mv nunca implica el uso de nodos-i libres ni la liberación de nodos-i en uso. Para que un nodo-i pueda liberarse, deben eliminarse todos los enlaces fı́sicos y simbólicos sobre ese nodo-i. Dado un archivo /dir1/a, la ejecución del mandato rm /dir1/a siempre implica la liberación de su nodo-i. Se supone que el usuario tiene suficientes derechos de acceso a dicho archivo. Cuestión 2 ¿ Qué problemas plantearı́a en UNIX la posibilidad de crear enlaces fı́sicos sobre archivos de tipo directorio ? Cuestión 3 Explicar cómo podrı́an darse múltiples nombres a un mismo archivo en sistemas de archivo Windows 95 / 98 (FAT16 / FAT32). Cuestión 4 Decidir si las siguientes afirmaciones sobre algoritmos de planificación de peticiones a disco son verdaderas o falsas: Si un manejador de disco no suele tener más de una o dos peticiones pendientes, en la práctica se planifica con estrategia FCFS. Con una estrategia FCFS el tiempo de espera de una petición en la cola del manejador es el mı́nimo posible. La estrategia SSTF es injusta porque puede marginar las peticiones sobre los cilindros más internos o externos del disco. En un sistema multiprogramado se podrá tener más de una petición pendiente del mismo hilo de ejecución. En un sistema multiprogramado no se podrá tener dos peticiones pendientes sobre el mismo cilindro. Cuestión 5 Decidir si las siguientes afirmaciones sobre estructuras de directorios son verdaderas o falsas: El sistema de archivos de MS-DOS es un ejemplo de estructura de directorios de dos niveles. El sistema de archivos de UNIX es un ejemplo de estructura de directorios en grafo acı́clico. Una estructura de directorios en grafo general no permite que diferentes usuarios protejan sus archivos. 24 MS-DOS fuerza a que todos los dispositivos de almacenamiento estén montados sobre el mismo árbol de directorios. Una estructura en grafo acı́clico permite mantener varios enlaces sobre un mismo fichero regular. Cuestión 6 Se tiene un sistema DOS donde el tamaño de cluster es igual a 4 Kb (8 sectores) y en el que las primeras 52 entradas de la FAT tienen los siguientes valores: 0 1 2 3 4 5 6 7 8 9 10 11 12 X X EOF 4 5 6 7 8 9 10 11 12 EOF 13 14 15 16 17 18 19 20 21 22 23 24 25 14 15 16 17 18 19 20 21 22 EOF EOF EOF EOF 26 27 28 29 30 31 32 33 34 35 36 37 38 24 EOF EOF 30 EOF 34 EOF 36 28 38 40 41 32 39 40 41 42 43 44 45 46 47 48 49 50 51 29 37 42 44 50 47 46 33 49 45 EOF 48 FREE A continuación se listan tres directorios presentes en ese disco. Sus entradas tendrán el siguiente formato (se suprimen los bytes reservados y los campos de fecha y hora de última actualización): Nombre Extensión Atributos Primer cluster Longitud El campo atributos se representará en binario. En MS-DOS, los ocho bits de este campo tienen el siguiente significado: Res. Res. Archivable Directorio Etiqueta Sistema Oculto Los directorios mencionados tienen el siguiente contenido: . .. IO DISCO C MSDOS DOS COMMAND ARCHIVOS . .. CONFIG LABEL ATTRIB DELTREE . .. A B SYS SYS COM SYS EXE EXE EXE DAT 00010000 00010000 00000111 00001000 00000111 00010000 00000001 00010000 00010000 00010000 00000000 00000000 00000000 00000000 00010000 00010000 00000000 00000000 SE PIDE 25 27 2 25 26 2 54 3 0 13 23 43 27 23 2 34 31 39 35 0 0 40.755 0 38.158 0 56.539 0 0 0 8.034 9.566 11.284 11.173 0 0 4.034 2.342 Solo lect. 1. Dibujar la estructura de directorios. 2. Utilizando las entradas que se conocen de la FAT, decir qué clusters pertenecen a cada archivo. ¿ Puede detectarse alguna inconsistencia ? 3. Comentar qué salida darı́a el mandato DIR (sin argumentos) si nos encontramos en el directorio mantenido en el cluster 2. 4. Si se supone que el directorio que se encuentra en el cluster 2 funciona como directorio raı́z, comentar cómo quedarı́a la FAT y los directorios tras haber realizado las siguientes acciones: C:> DEL \DOS\CONFIG.SYS C:> COPY \ARCHIVOS\A.DAT \A.BAK suponiendo que la asignación de clusters libres se intenta realizar con aquellos que tengan menor número de cluster. 5. ¿ Qué pasarı́a si la entrada 35 de la FAT apuntara al bloque 35 e intentáramos ejecutar el mandato DELTREE ? ¿ Qué pasa en general si una entrada de la FAT apunta a ella misma ? 6. Suponiendo que el disco estudiado tiene una capacidad de 40 Mb, guarda FAT original y una copia (punteros de 16 bits) y el directorio raı́z puede mantener 512 entradas, dar la estructura del disco y mencionar cuántos clusters o sectores tendrá cada parte. 7. Comentar cuánto espacio se desperdicia debido a fragmentación interna en cada uno de los archivos que aparecen en el enunciado (Sin tener en cuenta el apartado 4). 8. Suponiendo bloques (y zonas) de 4 Kb y un disco de igual capacidad, con punteros a zona de 16 bits, entradas de directorio de 16 bytes, un máximo de 1024 archivos, nodos-i de 32 bytes con 7 punteros directos, un indirecto simple y uno doble: Indicar cómo se estructurarı́a este mismo disco bajo MINIX. Suponiendo que contiene únicamente estos mismos archivos y directorios, dar el contenido de los archivos de tipo directorio suponiendo que: – Los archivos se crearon por niveles (primero todos los que aparecen en el directorio raı́z y después los archivos que cuelgan de sus dos subdirectorios). Dentro de un mismo nivel se siguió orden alfabético. – Siempre se usó el nodo-i más bajo disponible. – El disco no contenı́a ningún archivo previamente y no se han borrado ni creado más archivos. Comparar las cifras de fragmentación interna en este sistema con las del anterior. ¿ En qué archivos difiere ? 26