Anda di halaman 1dari 18

Ejercicios Tema2 (I) Almacenamiento en disco, estructuras bsicas de ficheros y dispersin

Ejercicio 1. Los sistemas RAID permiten reemplazar discos fallidos sin detener el SGDB. Los datos en el disco fallido deben ser reescritos al nuevo disco de reemplazo mientras el sistema est en funcionamiento. Qu tipo de RAID de los vistos en clase causa menos interferencias durante el remplazo del disco fallido a la hora de seguir accediendo al resto de discos y por qu? Solucin: RAID 0 Como no tiene discos mirroring ni paridad, hay que esperar al reemplazo del disco fallido (si todava es posible). Durante ese remplazo, no se podr acceder a la informacin del disco fallido, aunque s al resto de tablas que se encuentren en el resto de discos. RAID 3 y 5 A travs del disco de paridad (RAID 3) o los bloques de paridad (RAID 5) se puede reconstruir el disco fallido utilizando el resto de discos y la operacin XOR de paridad. Sin embargo, los discos vern aumentadas las peticiones de lectura y escritura durante la recuperacin debido a estas operaciones XOR, degradando el rendimiento del sistema. RAID 1 y 1+0 Es la solucin que causa menos interferencias, ya que se pueden copiar directamente los datos del disco mirroring asociado al disco que ha fallado sin afectar al resto de discos, y por tanto, sin degradar el rendimiento.

Ejercicio 2. Dado un RAID usando paridad como el siguiente, donde Bi representa un bloque de datos y Pi es un bloque de paridad para los bloques de datos [B4i-3-B4i],

qu problemas, si existen, presenta este RAID? Solucin: De acuerdo con la figura, se est utilizando un RAID 5. Adems, cada bloque de paridad Pi cubre los bloques de datos [B4i-3-B4i]. As, el bloque de paridad P1 cubre los bloques [B1-B4], el bloque de paridad P2 cubre los bloques [B5-B8], etc. El problema de este RAID reside en que al fallar un disco, el bloque de datos que est justo encima de un bloque de paridad en ese disco no podr ser recuperado, ya que el bloque de paridad que lo cubre est en el mismo disco fallido. Vemoslo con un ejemplo. Supongamos que tenemos la siguiente situacin donde el Disk 1 ha fallado:

Utilizando la operacin de paridad XOR con el bloque de paridad P2 y los bloques B5,B6 y B7 en los discos Disk 2, Disk 3 y Disk 4, respectivamente, es posible recuperar el bloque de datos B8. Sin embargo, el bloque B1 (justo encima del bloque de paridad P1) no puede ser recuperado, porque el bloque de paridad que lo cubre, P1, est en el disco fallido, y dicho bloque de paridad no puede ser recuperado mediante el resto de bloques de paridad. Para evitar esta situacin en RAID 5, el bloque de paridad siempre debe guardarse en un disco distinto a los discos que almacenan los bloque de datos que cubre. La siguiente figura muestra un RAID 5 con cinco discos donde se cumple esta condicin. Disk 1 Disk 2 Disk 3 Disk 4 Disk 5

En este caso, cada bloque de paridad Pi cubre los bloques [B4i-B4i+3] y se guarda en el disco (i mod 5) + 1. De esta manera es posible recuperar toda la informacin de un disco fallido ya que cada bloque de paridad est en un disco distinto de los utilizados por los bloques de datos a los que cubre. A pesar de cumplir esta condicin, sin embargo, si en una configuracin RAID 5 ptima fallan dos discos a la vez, entonces no puede aplicarse la operacin de paridad y se perderan los datos en esos dos discos.

Ejercicio 3. Un fallo en el suministro elctrico producido mientras se escribe un bloque del disco puede ocasionar que el bloque slo se escriba parcialmente. Supngase que se pueden detectar los bloques escritos parcialmente. Un proceso atmico de escritura de bloque es aqul en el que se escribe el bloque entero o no se escribe nada (es decir, no hay procesos de escrituras parciales). Propnganse los pasos que hay que realizar para conseguir el efecto de los procesos atmicos de escritura con los siguientes esquemas RAID. Los esquemas deben implicar procesos de recuperacin de fallos. a. RAID de nivel 1 b. RAID de nivel 5

Solucin: a. Para asegurar la atomicidad, una operacin de escritura de bloques se lleva a cabo como sigue: i. Se escribe la informacin sobre el primer bloque fsico ii. Cuando se complete con xito la primera escritura, se escribe la misma informacin sobre el segundo bloque fsico. iii. El resultado se da por finalizado slo despus que la segunda escritura se complete con xito. Durante la recuperacin se examina cada par de bloques fsicos. Si ambos son idnticos y no se detectan escrituras parciales, no son necesarias acciones posteriores. Si uno de los bloque ha sido reescrito parcialmente, se reemplaza su contenido con el del otro bloque. Si no hay escrituras parciales, pero difieren en el contenido, se reemplaza el contenido del primer bloque con el del segundo, o viceversa. Este procedimiento de recuperacin asegura que un almacenamiento estable tiene un xito completo (esto es, actualiza ambas copias), o no cambia nada. b. La idea es similar al apartado anterior. Para cualquier escritura de bloques, el bloque de informacin se escribe primero, seguido del correspondiente bloque de paridad. En el momento de la recuperacin, se considera cada conjunto formado por el ensimo bloque de cada uno de los discos. Si ninguno de los bloques del conjunto ha sido escrito parcialmente y el contenido del bloque de paridad es consistente con el de los bloques de informacin, entonces no es necesario tomar ms acciones. Si cualquier bloque ha sido escrito parcialmente, se reconstruyen sus contenidos empleando los otros bloques. Si

ningn bloque ha sido escrito parcialmente, pero el contenido del bloque de paridad no est de acuerdo con el del bloque de informacin, se reconstruye el contenido del bloque de paridad.

3) Dada la siguiente lista libre de registros con tamao fijo en la que cada fila indica el identificador de sucursal de un banco, la localidad de la sucursal y el nmero de clientes:

muestra como sera su estructura despus de cada uno de los pasos siguientes: i) Insertar (MU-102, Murcia, 250)

ii) Borrar el registro 3 iii) Insertar (MU-105, Yecla, 100) iv) Modificar el registro 7 cambiando el nombre de la sucursal por Jumilla Solucin: i) Insertar (MU-102, Murcia, 250) Cabecera Registro 0 Registro 1 Registro 2 Registro 3 Registro 4 Registro 5 Registro 6 Registro 7 Registro 8

C-102 MU-102 c-215 c-101 c-201 c-110 c-218

Navacerrada Murcia Becerril Centro Navacerrada Centro Navacerrada

400 250 700 500 900 600 700

ii) Borrar el registro 3 Cabecera Registro 0 Registro 1 Registro 2 Registro 3 Registro 4 Registro 5 Registro 6 Registro 7 Registro 8

C-102 MU-102 c-215

Navacerrada Murcia Becerril

400 250 700

c-201 c-110 c-218

Navacerrada Centro Navacerrada

900 600 700

iii) Insertar (MU-105, Yecla, 100) Cabecera Registro 0 Registro 1 Registro 2 Registro 3 Registro 4 Registro 5 Registro 6 Registro 7 Registro 8

C-102 MU-102 c-215 MU-105 c-201 c-110 c-218

Navacerrada Murcia Becerril Yecla Navacerrada Centro Navacerrada

400 250 700 100 900 600 700

iv) Modificar el registro 7 cambiando el nombre de la sucursal por Jumilla

Cabecera Registro 0 Registro 1 Registro 2 Registro 3 Registro 4 Registro 5 Registro 6 Registro 7 Registro 8

C-102 MU-102 c-215 MU-105 c-201 c-110 c-218

Navacerrada Murcia Becerril Yecla Navacerrada Jumilla Navacerrada

400 250 700 100 900 600 700

4) Dado el siguiente fichero ordenado de registros del mismo tipo que el mostrado en el ejercicio anterior (orden alfabtico ascendente de la segunda columna):

muestra como sera su estructura despus de cada uno de los pasos siguientes, suponiendo que se un fichero auxiliar de desbordamiento para las inserciones: i) Insertar (MU-102, Murcia, 250)

ii) Borrar el registro 3 iii) Insertar (MU-105, Yecla, 100) iv) Modificar el registro 2 para que el campo Ciudad (segundo campo) tenga valor Zaragoza

Solucin: i) Insertar (MU-102, Murcia, 250) C-215 c-101 c-110 c-305 c-217 c-222 c-102 c-201 c-218 Becerril 700 Centro 500 Centro 600 Collado Mediano 350 Galapagar 750 Moralzarzal 700 Navacerrada 400 Navacerrada 900 Navacerrada 700 Fichero de desbordamiento Murcia 250

MU-102

ii) Borrar el registro 3 C-215 c-101 c-110 c-217 c-222 c-102 c-201 c-218 Becerril Centro Centro Galapagar Moralzarzal Navacerrada Navacerrada Navacerrada 700 500 600 750 700 400 900 700

Fichero de desbordamiento MU-102 Murcia 250

iii) Insertar (MU-105, Yecla, 100) Para este paso existen dos opciones (1) Que el conjunto de registros corresponda a un mismo bloque B0. En ese caso, el borrado del registro en el paso anterior ha dejado un hueco en el que es posible insertar el nuevo registro, utilizando los punteros para mantener el orden del bloque: C-215 c-101 c-110 Mu-105 c-217 c-222 c-102 c-201 c-218 Becerril Centro Centro Yecla Galapagar Moralzarzal Navacerrada Navacerrada Navacerrada 700 500 600 100 750 700 400 900 700

B0

Fichero de desbordamiento MU-102 Murcia 250

(2) Que el conjunto de registros se divida en dos bloques B0 y B1. En ese caso, el bloque B1 donde se debe insertar el nuevo registro no tiene espacios libres, y por tanto dicho registro debe ser almacenado en el fichero de desbordamiento: C-215 c-101 c-110 c-217 c-222 c-102 c-201 c-218 Becerril Centro Centro Galapagar Moralzarzal Navacerrada Navacerrada Navacerrada 700 500 600 750 700 400 900 700

B0

B1

Fichero de desbordamiento MU-102 Mu-105 Murcia Yecla 250 100

Seguiremos esta alternativa para el siguiente paso.

iv).

Modificar el registro 2 para que el campo Ciudad (segundo campo) tenga valor Zaragoza En este caso hay que borrar el registro 2 del bloque B0 e insertarlo en el bloque B1, cambiando la ciudad Centro por Zaragoza. Como en este ltimo no hay espacio, ha de aadirse al fichero de desbordamiento. C-215 c-101 Becerril Centro 700 500

B0

B1

c-217 c-222 c-102 c-201 c-218

Galapagar Moralzarzal Navacerrada Navacerrada Navacerrada

750 700 400 900 700

Fichero de desbordamiento MU-102 Mu-105 c-110 Murcia Yecla Zaragoza 250 100 600

5).

Supongamos un fichero con 30.000 registros USUARIO de longitud fija. Cada registro tiene los siguientes campos: Nombre (30 bytes), DNI (9 bytes), Direccin (40 bytes), Telfono (12 bytes), Fecha Nacimiento (8 bytes), Ocupacin (20 bytes). Adems, los registros tienen un byte extra como marcador de borrado. Se pide: a) Calcular el factor de bloque bfr y el nmero de bloques que tiene el fichero, asumiendo un tamao de bloque de disco de 512 bytes y una organizacin no extendida. b) Calcular el espacio desperdiciado (en bytes y en porcentaje) en cada bloque de disco debido a la organizacin no extendida. c) Teniendo en cuenta que el tiempo medio para transferir un bloque a memoria es de 20 mseg, y que se utiliza una bsqueda lineal, calcular el tiempo empleado en el caso medio y en el peor caso para encontrar un registro. d) Suponiendo ahora que el fichero est ordenado por DNI y se utiliza una bsqueda binaria, calcular el tiempo se tarda para encontrar un registro dado el valor de su campo DNI.

Solucin: a) Tamao del registro: 30 + 9 + 40 + 12 + 8 +20 + 1 (borrado) = 120 bytes bfr = 512/120 = 4 registros/bloque Nmero de bloques: B = 30000/4 = 7500 bloques b) Espacio desperdiciado: Tamao bloque- (bfr * tamao registro) = 512 (4* 120) = 32 bytes/bloque 6,25 % del bloque est desperdiciado c) Caso medio: El registro se encuentra en el fichero, se tarda B/2 * Tt = 7500/2 * 20mseg = 75000mseg = 75segundos en encontrarlo. Peor caso = El registro no se encuentra en el fichero o est en el ltimo bloque, se tarda B * Tt = 7500 * 20mseg = 150000mseg = 150segundos en encontrarlo d) Utilizando la bsqueda binaria utilizando el campo DNI sobre el que est ordenado el archivo se tarda log2(B) * Tt = log2(7500) * 20mseg = 13 * 20 = 390mseg = 0,39s.

6).

Siguiendo el ejercicio anterior, suponer ahora que usamos registros con campos opcionales. El 70% de los registros USUARIOS tienen un valor para el campo Telfono, y el 40% tiene valor para el campo Ocupacin. Adems, ahora cada registro tiene un byte por cada campo para indicar el tipo de campo del registro y otro byte adicional para marcar el fin del registro. Suponer adems que ahora utilizamos una organizacin de registros extendida, donde cada bloque tiene un puntero de 5 bytes apuntando al siguiente bloque (este espacio no se puede utilizar para almacenar registros). Se pide: a) Calcular el tamao medio del registro en bytes. b) Calcular el nmero de bloques que tiene el fichero.

Solucin: a) Suponiendo una distribucin uniforme, para calcular el tamao medio del registro tenemos que tener en cuenta el porcentaje de registros con todos los campos, el porcentaje de registros sin campo Ocupacin, el porcentaje sin campo Telfono y el porcentaje de registros sin los dos campos anteriores. As, tenemos que un 60% de los registros no tienen valor para el campo Ocupacin, de los cuales la mitad no tiene valor para el campo Telfono. Por tanto, tenemos que un 30% de los registros no tienen valor para ambos campos, y el otro 30% no tienen valor para el campo Ocupacin nicamente. Puesto que el 30% de registros sin Telfono ya est distribuido entre los registros que no tienen Ocupacin, queda un 40% con registros que tienen valores para todos los campos. Por tanto, tenemos que el tamao medio del registro es igual a la frmula (1): (Tamao con todos los campos * % registros con todos los campos) * (Tamao sin campo Ocupacin * % registros sin campo Ocupacin) * (Tamao sin campo Ocupacin ni Telfono * % registros sin campo Ocupacin ni Telfono) Calculemos primero el tamao de los registros utilizados en la frmula anterior: Tamao del registro con todos los campos: 120 + 6 (tipos de campo) + 1 (fin de registro) = 127 bytes Tamao del registro sin campo Ocupacin: 100 + 6 (tipos de campo) + 1 (fin de registro) = 107 bytes Tamao del registro sin campo Ocupacin ni Telfono: 88 + 6 (tipos de campo) + 1 (fin de registro) = 95 bytes Finalmente, aplicando la frmula (1) tenemos que el tamao medio de un registro es igual a 127 * 0,4 + 107 * 0,3 + 95 * 0,3 = 111,4 bytes . Puesto que no podemos tener decimales el nmero de bytes del registro, redondeamos por arriba la parte entera del resultado, siendo por tanto el tamao medio del registro igual a 112 bytes.

b) El tamao til del bloque es ahora 512 5 = 507 bytes, puesto que los 5 bytes del puntero a bloque no pueden ser utilizados para datos. Por tanto, el nmero de bloques para almacenar 30000 registros de 112 bytes de forma expandida en bloques de 507 bytes es igual a B = (30000*112)/507 = 6628 bloques. Observar que mediante esta configuracin se utiliza un 11,63% menos de bloques que en el ejercicio 5.

7).

Se dispone de un fichero hash de 65.000 registros. Cada registro contiene 256 caracteres. El tamao del bloque de disco es de 2KB. Cada cubo alberga un bloque, tomando 100 bytes del bloque para datos de control. Se pide: a) Calcular el nmero de registros que caben en un cubo. b) Calcular el tamao del fichero de acuerdo con los cubos en los que est dividido.

Solucin: a) El tamao de bloque til para datos es 2048 100 = 1948 bytes. Como cada cubo alberga un bloque, tenemos que el factor de bloque es igual a bfr = 1948/256 = 7 registros/bloque b) B = 65000/7 = 9286 bloques

8).

Tenemos un fichero de registros de productos con el campo IDProd como clave de dispersin. El fichero incluye registros con los siguientes valores de IDProd: 2369, 3760, 4692, 4871, 5659, 1821, 1074, 7115, 1620, 2428, 3943, 4750, 6975, 4981, 9208. El fichero utiliza seis cubos, numerados del 0 al 5. Cada cubo es un bloque de disco que almacena dos registros. Cargar los registros dados en el fichero, utilizando la funcin de dispersin h(k) = k mod 6. En caso de colisiones, resolverlas mediante el uso de bloques de desbordamiento con un tamao de dos registros. Qu cantidad de media de accesos a bloque es necesaria para recuperar un registro utilizando el campo NumRep? Y utilizando cualquier otro campo?

Solucin: Se muestra la solucin final

Cubo 0

4692 1074 Puntero a registro

Cubo 1

5659 3943 Puntero a registro

Cubos de desbordamiento Cubo 2 Puntero a registro 7115 Puntero a registro 1620 Puntero a registro

Cubo 3

1821 6975 Puntero a registro

4750 Puntero a registro 4981 Puntero a registro

9208 Puntero a registro Cubo 4 3760 2428 Puntero a registro

Cubo 5

2369 4871 Puntero a registro

Para acceder a un registro utilizando el campo IDProd es necesario un nico acceso a bloque (excepto para los registros que se encuentran en los cubos de desbordamiento, cuyo nmero de accesos aumentar dependiendo del nmero de cubos de desbordamientos que existan). Para acceder a un registro utilizando cualquier otro campo ser necesaria una bsqueda secuencial por todos los bloques, accediendo a B/2 y B bloques en el caso medio y peor caso, respectivamente.

9).

Cargue los registros del ejercicio anterior en ficheros de dispersin basndose en dispersin extensible. Muestre la estructura del directorio en cada paso, as como las profundidades global y local. Utilizar una funcin de dispersin h(k) = k mod 16. Cada cubo es un bloque de disco que almacena tres registros. Comenzar con una profundidad de directorio d = 2 y tres cubos, dos con profundidad d = 2 para las entradas 00 y 01, respectivamente, y el tercero con profundidad d = 1 para las entradas 10 y 11. Solucin: De acuerdo con el enunciado, la estructura del fichero utilizando el directorio debe ser como se muestra a continuacin. Directorio d = 2
00 01 10 11 d = 2

Cubo para registros con bits iniciales 00 Cubo para registros con bits iniciales 01

d = 2

d = 1

Cubo para registros con bits iniciales 10 y 11

Para almacenar registros en un cubo hay que tener en cuenta el siguiente procedimiento: 1. El valor de dispersin devuelto por la funcin h(k) se transforma a un nmero binario b de 4 bits (para representar el rango de nmeros del 0 al 15 que puede obtenerse de dicha funcin). 2. De este nmero binario b se toman los d primeros bits de acuerdo con la profundidad global d del directorio para averiguar la entrada de directorio (y por tanto, el cubo) a utilizar. Por ejemplo, para el primer registro, 2369, tenemos que h(2369) = 1 = 0001 en binario. De este nmero en binario se toman los 2 primeros bits, puesto que es la profundidad actual del directorio. As, la entrada asociada al registro 2369 es la 00, y el registro se almacenar en el cubo indicado por dicha entrada. Para el registro 4692, tenemos que h(4692) = 4 = 0100 en binario. Por tanto, su entrada asociada es la 01. A continuacin se muestra el estado del fichero hasta la insercin del registro 1620.

Directorio d = 2
00 01 10 11 d = 2 2369 3760 1074

Cubo para 00

d = 2

4692 4871 1620

Cubo para 01

d = 1

5659 1821 7115

Cubo para 10 y 11

Ahora se debe insertar el registro 2428, cuya valor hash es (2428 mod 16) = 12, que equivale a 1100 transformado a binario. Por tanto, el registro 2428 debera ir al tercer cubo (11), pero ste est lleno. Puesto que la profundidad d del tercer cubo es menor que la profundidad d del directorio, no es necesario aumentar la profundidad de ste ltimo. Lo que hay que hacer es dividir el tercer cubo en dos cubos de profundidad d= 2, uno para las entradas con valor 10 y otro con valor 11. Los registros actuales del tercer cubo se reparten entre estos nuevos cubos de acuerdo con su valor de dispersin en binario. As, tenemos la siguiente situacin: Directorio d = 2
00 01 10 11 d = 2 2369 3760 1074 4692 4871 1620 5659 7115

Cubo para 00

d = 2

Cubo para 01

d = 2

Cubo para 10
d = 2 1821 2428

Cubo para 11

Observar que el registro 2428 ha sido finalmente almacenado en el cuarto cubo para entradas con valor 11. El registro 1821 tambin ha sido llevado a este nuevo cuarto cubo debido a sus valores binarios de dispersin. El siguiente registro a insertar, con valor 3943, tiene un valor de dispersin binario 0111, y le corresponde el bloque en la entrada 01. El cubo para estos registros vuelve a estar lleno, pero en este caso el valor d del tercer cubo es igual a la profundidad global d del directorio. Por

tanto, ahora hay que aumentar dicha profundidad global a 3, aumentando las entradas del directorio, y dividir el segundo cubo en otros dos cubos para los valores 010 y 011: Directorio d = 3
000 001 010 011 100 101 110 111 d = 2 2369 3760 1074 4692 1620

Cubo para 000 y 001

d = 3

Cubo para 010

d = 3

4871 3943

Cubo para 011

d = 2

5659 7115

Cubo para 100 y 101

d = 2

1821 2428

Cubo para 110 y 111

Observar que al aumentar la profundidad del directorio ahora hay que tener en cuenta los tres primeros bits de cada valor de dispersin para seleccionar la entrada del directorio. Observar tambin que este cambio no afecta a la localizacin de los registros en los cubos que no se han dividido. En el caso de los registros del cubo anterior 01 que ha sido dividido, stos se distribuyen ahora entre el segundo y el tercer cubo (010 y 011) de acuerdo con sus valores de dispersin (3 primero bits). En particular, el registro 3943 se almacena en el cubo 011. Los dos siguientes registros, 4750 y 6975, tienen ambos valores de dispersin binario 1110 y 1111, y por tanto deben ser almacenados en el ltimo cubo. Puesto que el registro 6975 no cabe en este cubo tras insertar el registro 4750, y la profundidad del cubo es menor que la profundidad global d, de nuevo se vuelve a dividir el cubo en dos para los valores 110 y 111, reasignado los registros de acuerdo con los tres primeros bits de sus valores de dispersin. La configuracin se muestra en la siguiente pgina

Directorio d = 3
000 001 010 011 100 101 110 111

d = 2

2369 3760 1074 4692 1620

Cubo para 000 y 001

d = 3

Cubo para 010

d = 3

4871 3943

Cubo para 011

d = 2

5659 7115

Cubo para 100 y 101

d = 3

1821 2428 4750 6975

Cubo para 110

d = 3

Cubo para 111

Finalmente, se insertan los ltimos registros 4981 (valor dispersin 010) y 9208 (valor dispersin 100). El fichero queda finalmente de esta manera: (ver pgina siguiente)

Directorio d = 3
000 001 010 011 100 101 110 111

d = 2

2369 3760 1074 4692 1620 4981 4871 3943

Cubo para 000 y 001

d = 3

Cubo para 010

d = 3

Cubo para 011

d = 3

5659 7115 9208 1821 2428

Cubo para 100 y 101

d = 3

Cubo para 110

d = 3

4750 6975

Cubo para 111

Anda mungkin juga menyukai