Soluciones+Ejercicios+Tema2-1

Share Embed Donate


Short Description

Download Soluciones+Ejercicios+Tema2-1...

Description

Ejercicios Tema2 (I) – Almacenamiento en disco, estructuras básicas de ficheros y dispersión 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é? Solución: RAID 0 Como no tiene discos mirroring ni paridad, hay que esperar al reemplazo del disco fallido (si todavía es posible). Durante ese remplazo, no se podrá acceder a la información del disco fallido, aunque sí al resto de tablas que se encuentren en el resto de discos. RAID 3 y 5  A través 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 operación XOR de paridad. Sin embargo, los discos verán aumentadas las peticiones de lectura y escritura durante la recuperación debido a estas operaciones XOR, degradando el rendimiento del sistema. RAID 1 y 1+0  Es la solución 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? Solución: De acuerdo con la figura, se está utilizando un RAID 5. Además, 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. Veámoslo con un ejemplo. Supongamos que tenemos la siguiente situación donde el Disk 1 ha fallado:

Utilizando la operación 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 situación 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 condición. 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 información 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 condición, sin embargo, si en una configuración RAID 5 óptima fallan dos discos a la vez, entonces no puede aplicarse la operación de paridad y se perderían los datos en esos dos discos.

Ejercicio 3. Un fallo en el suministro eléctrico producido mientras se escribe un bloque del disco puede ocasionar que el bloque sólo se escriba parcialmente. Supóngase que se pueden detectar los bloques escritos parcialmente. Un proceso atómico de escritura de bloque es aquél en el que se escribe el bloque entero o no se escribe nada (es decir, no hay procesos de escrituras parciales). Propónganse los pasos que hay que realizar para conseguir el efecto de los procesos atómicos de escritura con los siguientes esquemas RAID. Los esquemas deben implicar procesos de recuperación de fallos. a. RAID de nivel 1 b. RAID de nivel 5

Solución: a. Para asegurar la atomicidad, una operación de escritura de bloques se lleva a cabo como sigue: i. Se escribe la información sobre el primer bloque físico ii. Cuando se complete con éxito la primera escritura, se escribe la misma información sobre el segundo bloque físico. iii. El resultado se da por finalizado sólo después que la segunda escritura se complete con éxito. Durante la recuperación se examina cada par de bloques físicos. Si ambos son idénticos 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 recuperación 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 información se escribe primero, seguido del correspondiente bloque de paridad. En el momento de la recuperación, se considera cada conjunto formado por el enésimo 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 información, entonces no es necesario tomar más acciones. Si cualquier bloque ha sido escrito parcialmente, se reconstruyen sus contenidos empleando los otros bloques. Si

ningún bloque ha sido escrito parcialmente, pero el contenido del bloque de paridad no está de acuerdo con el del bloque de información, se reconstruye el contenido del bloque de paridad.

3) Dada la siguiente lista libre de registros con tamaño fijo en la que cada fila indica el identificador de sucursal de un banco, la localidad de la sucursal y el número de clientes:

muestra como sería su estructura después 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” Solución: 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

Navacerrada Murcia Becerril Centro

400 250 700 500

c-201

Navacerrada

900

c-110 c-218

Centro Navacerrada

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

Navacerrada

900

c-110 c-218

Centro Navacerrada

600 700

C-102 MU-102 c-215 MU-105

Navacerrada Murcia Becerril Yecla

400 250 700 100

c-201

Navacerrada

900

c-110 c-218

Centro Navacerrada

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

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

Navacerrada Murcia Becerril Yecla

400 250 700 100

c-201

Navacerrada

900

c-110 c-218

Jumilla Navacerrada

600 700

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

muestra como sería su estructura después 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”

Solución: i)

Insertar (MU-102, Murcia, 250) C-215 c-101 c-110 c-305 c-217 c-222 c-102 c-201 c-218

MU-102

Becerril 700 Centro 500 Centro 600 Collado Mediano 350 Galapagar 750 Moralzarzal 700 Navacerrada 400 Navacerrada 900 Navacerrada 700 Fichero de desbordamiento Murcia

250

ii) Borrar el registro 3 C-215 c-101 c-110

Becerril Centro Centro

700 500 600

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

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:

B0

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

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:

B0

B1

C-215 c-101 c-110

Becerril Centro Centro

700 500 600

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

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 añadirse al fichero de desbordamiento.

B0

B1

C-215 c-101

Becerril Centro

700 500

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), Dirección (40 bytes), Teléfono (12 bytes), Fecha Nacimiento (8 bytes), Ocupación (20 bytes). Además, los registros tienen un byte extra como marcador de borrado. Se pide: a) Calcular el factor de bloque bfr y el número de bloques que tiene el fichero, asumiendo un tamaño de bloque de disco de 512 bytes y una organización no extendida. b) Calcular el espacio desperdiciado (en bytes y en porcentaje) en cada bloque de disco debido a la organización 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 búsqueda 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 búsqueda binaria, calcular el tiempo se tarda para encontrar un registro dado el valor de su campo DNI.

Solución: a) Tamaño del registro: 30 + 9 + 40 + 12 + 8 +20 + 1 (borrado) = 120 bytes bfr = 512/120 = 4 registros/bloque Número de bloques: B = 30000/4 = 7500 bloques b) Espacio desperdiciado: Tamaño bloque- (bfr * tamaño 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 búsqueda 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 Teléfono, y el 40% tiene valor para el campo Ocupación. Además, 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 además que ahora utilizamos una organización 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 tamaño medio del registro en bytes. b) Calcular el número de bloques que tiene el fichero.

Solución: a) Suponiendo una distribución uniforme, para calcular el tamaño medio del registro tenemos que tener en cuenta el porcentaje de registros con todos los campos, el porcentaje de registros sin campo “Ocupación”, el porcentaje sin campo “Teléfono” y el porcentaje de registros sin los dos campos anteriores. Así, tenemos que un 60% de los registros no tienen valor para el campo “Ocupación”, de los cuales la mitad no tiene valor para el campo “Teléfono”. 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 “Ocupación” únicamente. Puesto que el 30% de registros sin Teléfono ya está distribuido entre los registros que no tienen Ocupación, queda un 40% con registros que tienen valores para todos los campos. Por tanto, tenemos que el tamaño medio del registro es igual a la fórmula (1): (Tamaño con todos los campos * % registros con todos los campos) * (Tamaño sin campo “Ocupación” * % registros sin campo “Ocupación”) * (Tamaño sin campo “Ocupación” ni “Teléfono” * % registros sin campo “Ocupación” ni “Teléfono”) Calculemos primero el tamaño de los registros utilizados en la fórmula anterior: Tamaño del registro con todos los campos: 120 + 6 (tipos de campo) + 1 (fin de registro) = 127 bytes Tamaño del registro sin campo “Ocupación”: 100 + 6 (tipos de campo) + 1 (fin de registro) = 107 bytes Tamaño del registro sin campo “Ocupación” ni “Teléfono”: 88 + 6 (tipos de campo) + 1 (fin de registro) = 95 bytes Finalmente, aplicando la fórmula (1) tenemos que el tamaño 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 número de bytes del registro, redondeamos por arriba la parte entera del resultado, siendo por tanto el tamaño medio del registro igual a 112 bytes.

b) El tamaño ú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 número 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 configuración 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 tamaño 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 número de registros que caben en un cubo. b) Calcular el tamaño del fichero de acuerdo con los cubos en los que está dividido.

Solución: a) El tamaño 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 dispersión. 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 función de dispersión h(k) = k mod 6. En caso de colisiones, resolverlas mediante el uso de bloques de desbordamiento con un tamaño 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?

Solución: Se muestra la solución final

Cubo 0

4692 1074 Puntero a registro

Cubo 1

5659 3943 Puntero a registro

Cubos de desbordamiento Cubo 2 Puntero a registro

Cubo 3

7115 Puntero a registro 1620 Puntero a registro

4750 Puntero a registro 4981 Puntero a registro

1821 6975 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 número de accesos aumentará dependiendo del número de cubos de desbordamientos que existan). Para acceder a un registro utilizando cualquier otro campo será necesaria una búsqueda 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 dispersión basándose en dispersión extensible. Muestre la estructura del directorio en cada paso, así como las profundidades global y local. Utilizar una función de dispersión 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. Solución: De acuerdo con el enunciado, la estructura del fichero utilizando el directorio debe ser como se muestra a continuación. Directorio d = 2 00 01 10 11

d’ = 2

Cubo para registros con bits iniciales 00

d’ = 2

Cubo para registros con bits iniciales 01

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 dispersión devuelto por la función h(k) se transforma a un número binario b de 4 bits (para representar el rango de números del 0 al 15 que puede obtenerse de dicha función). 2. De este número 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 número 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 continuación se muestra el estado del fichero hasta la inserción 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 debería 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 dispersión en binario. Así, tenemos la siguiente situación: Directorio d = 2 00 01 10 11

d’ = 2

d’ = 2

d’ = 2

2369 3760 1074

Cubo para 00

4692 4871 1620

Cubo para 01

5659 7115

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 también ha sido llevado a este nuevo cuarto cubo debido a sus valores binarios de dispersión. El siguiente registro a insertar, con valor 3943, tiene un valor de dispersión 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

d’ = 3

2369 3760 1074 4692 1620

Cubo para 000 y 001

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 dispersión para seleccionar la entrada del directorio. Observar también que este cambio no afecta a la localización 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 dispersión (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 dispersión 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 dispersión. La configuración se muestra en la siguiente página

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

d’ = 2

d’ = 3

d’ = 3

d’ = 2

d’ = 3

d’ = 3

2369 3760 1074 4692 1620

Cubo para 000 y 001

Cubo para 010

4871 3943

5659 7115

Cubo para 011

Cubo para 100 y 101

1821 2428 4750 6975

Finalmente, se insertan los últimos registros 4981 (valor dispersión 010) y 9208 (valor dispersión 100). El fichero queda finalmente de esta manera: (ver página siguiente)

Cubo para 110

Cubo para 111

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

d’ = 2

d’ = 3

d’ = 3

d’ = 3

d’ = 3

d’ = 3

2369 3760 1074 4692 1620 4981 4871 3943

Cubo para 000 y 001

Cubo para 010

Cubo para 011

5659 7115 9208

Cubo para 100 y 101

1821 2428

Cubo para 110

4750 6975

Cubo para 111

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF