Solución Actividad 1: Sistemas de almacenamiento en disco 1 – ¿Cuál es la diferencia entre una organización de fichero y un método de acceso? Poner ejemplos de cada caso. Respuesta: • La organización del fichero se refiere a la organización de los datos de un fichero en registros, bloques y estructuras de acceso; esto incluye la forma en que los registros y los bloques se colocan en el medio de almacenamiento y se interconectan. Los tipos de organización de ficheros más habituales son los ficheros desordenados (heap), ficheros ordenados, y basados en la dispersión (hash). • El método de acceso, en cambio, proporciona un grupo de operaciones (abrir, volver al principio, buscar, leer, buscar siguiente, eliminar, modificar, insertar, cerrar, escanear) que se pueden aplicar a un fichero. En general, es posible aplicar varios métodos de acceso diferentes a una organización de fichero, aunque algunos de estos métodos sólo pueden aplicarse a ficheros que están organizados de cierta manera. 2 – ¿Cuál es la diferencia entre ficheros estáticos y dinámicos? Respuesta: • Ficheros estáticos son aquellos en que pocas veces se efectúan operaciones de actualización. • Los ficheros dinámicos pueden cambiar con frecuencia. 3 – Supongamos que una unidad de disco tiene los siguientes parámetros: • • • • • tiempo medio de búsqueda s = 30 mseg.; tiempo de transferencia de bloque btt = 1 mseg.; tamaño de bloque B = 512 bytes; retardo rotacional medio rd = 12.5 mseg, velocidad de transferencia btr = 409.6 bytes/mseg. Un fichero ESTUDIANTE tiene r=20,000 registros de longitud fija. Cada registro tiene los siguientes campos: NAME (30 bytes), SSN (9 bytes), ADDRESS (40 bytes), PHONE (9 bytes), BIRTHDATE (8 bytes), SEX (1 byte), MAJORDEPTCODE (4 bytes), MINORDEPTCODE (4 bytes), CLASSCODE (4 bytes), y DEGREEPROGRAM (3 bytes). Se utiliza un byte adicional como marcador de eliminación. (a) Calcular el tamaño de un registro R en bytes. (b) Calcular el factor de bloqueo bfr y el número de bloques del fichero b suponiendo una organización no extendida. (c) Calcular el tiempo medio que tarda la búsqueda de un registro si se utiliza una búsqueda lineal en el fichero y si (i) los bloques del fichero se almacenan contiguamente y se utiliza doble búfer (ii) los bloques del fichero no se almacenan contiguamente. (d) Supongamos que el fichero está ordenado por SSN; calcular el tiempo que tarda la búsqueda de un registro dado su valor de SSN, si se utiliza búsqueda binaria y los registros no están almacenados contiguamente. Solución Actividad 1: Sistemas de almacenamiento en disco Respuesta: (a) R = (30 + 9 + 40 + 9 + 8 + 1 + 4 + 4 + 4 + 3) + 1 = 113 bytes (b) El factor de bloqueo bfr es el número de registros por bloque. Si el tamaño del bloque es de B bytes, en caso de un fichero de registros de longitud fija de R bytes, podemos encajar bfr = floor (B / R) = floor (512 / 113) = 4 registros por bloque El número de bloques b necesario para un fichero de r registros, si la organización no es extendida (i.e., los registros no pueden sobrepasar los límites de un bloque), se calcula como: b = ceiling (r / bfr) = ceiling (20000 / 4) = 5000 bloques (c) Para una búsqueda lineal, el número medio de bloques a los que se accede es la mitad. Por lo tanto: = 5000/2= 2500 bloques (i) Si los bloques están almacenados consecutivamente y se emplea la técnica de doble buffer, el tiempo para leer 2500 bloques consecutivos es la suma del tiempo de búsqueda s y el retardo rotacional rd correspondiente al primer bloque, más el tiempo de transferencia de dichos bloques = s + rd + (2500 * (B / btr)) = 30 + 12.5 + (2500 * (512 / 409.6)) = 3167.5 mseg siendo (B/btr) la velocidad de transferencia de un bloque Se puede realizar una estimación menos precisa en función del tiempo de transferencia del bloque, como en el caso de bloques no contiguos: = la suma del tiempo de búsqueda s, el retardo rotacional rd y el tiempo de transferencia del bloque btt = s + rd + (2500 * btt) = 30 + 12.5 + 2500 * 1= 2542.5 mseg. (ii) Si los bloques están dispersos en el disco, se precisa una búsqueda para cada bloque, y por lo tanto el tiempo necesario es: 2500 * (s + rd + btt) = 2500 * (30 + 12.5 + (512/409.6)) = 109375 mseg ó, con una aproximación menos exacta, se calcularía como 2500 * (s + rd + btt) = 2500 * (30 + 12.5 + 1) = 108750 mseg (d) Para una búsqueda binaria, el tiempo de búsqueda de un registro se estima como: = ceiling (log2 b) * (s + rd + btt) = ceiling (log2 5000) * (30 + 12.5 + 1) = 13 * 43.5 = 565.5 mseg Solución Actividad 1: Sistemas de almacenamiento en disco 4- Supongamos que solo el 80% de los registros anteriores tienen un valor en el campo PHONE, el 85% en MAJORDEPTCODE, el 15% en MINORDEPTCODE, y el 90% en DEGREEPROGRAM, y que se usa un fichero de registros de longitud variable. Cada registro tiene un tipo de campo de 1 byte por cada campo incluido en el registro, más el marcador de eliminación de 1 byte y un marcador de fin de registro de 1 byte. Supongamos que se utiliza una organización extendida de registros, en la que cada bloque tiene un puntero de 5 bytes al siguiente bloque (este espacio no se utiliza para almacenar registros). (a) Calcular el tamaño medio de un registro R en bytes. (b) Calcular el número de bloques necesarios para el fichero. Respuesta: (a) Asumiendo que cada campo tiene un byte para indicar el tipo de campo, y que NAME, SSN, ADDRESS, BIRTHDATE, SEX y CLASSCODE tienen valores para todos los registros, se necesita el siguiente número de bytes para esos campos en cada registro, más 1 byte para el marcador de eliminación, y 1 byte para el marcador de fin de registro: R fijo = (30+1) + (9+1) + (40+1) + (8+1) + (1+1) + (4+1) + 1 + 1 = 100 bytes Para los campos PHONE, MAJORDEPTCODE, MINORDEPTCODE y DEGREEPROGRAM, el número medio de bytes por registro es: R variable = ((9+1)*0.8) + ((4+1)*0.85) + ((4+1)*0.15) + ((3+1)*0.9) = 8 + 4.25 + 0.75 + 3.6= 16.6 bytes Por tanto, el tamaño medio del registro es: R = R fijo + R variable = 100 + 16.6 = 116.6 bytes (b) Los bytes totales para el fichero completo son: r * R = 20000 * 116.6 = 2332000 bytes Utilizando una organización de registros expandida con un puntero de 5 bytes al final de cada bloque, los bytes disponibles en cada bloque son: (B-5) = (512 - 5) = 507 bytes Por lo tanto, el número de bloques necesario para el fichero es: b = ceiling ((r * R) / (B - 5)) = ceiling (2332000 / 507) = 4600 bloques