Parcial Diciembre 2021 Problema 2 parte b

Parcial Diciembre 2021 Problema 2 parte b

de Rodrigo Alain De La Vega Rodriguez -
Número de respuestas: 1

Hola, buenas noches.
La letra del parcial la pueden ver en https://eva.fing.edu.uy/pluginfile.php/77323/mod_folder/content/0/2021/202112_solucion.pdf?forcedownload=1

Estoy tratando de entender la solución del Problema 2 parte (b) (5 pts) Indique el tamaño máximo que puede tener un archivo utilizando el sistema de archivos planteado.

Las dudas que tengo son las siguientes:
1) Cuando hablamos de un sistema de archivos multinivel de dos niveles me imagino que el archivo tiene un bloque índice de 32 entradas y luego cada entrada de      ese bloque apunta a otro bloque (este seria el segundo nivel); Esto es correcto?

2) Cuando dice: Para referenciar un bloque se requiere de 2 bytes
Como me doy cuenta que para referenciar un bloque necesito 2 bytes? Aquí supongo que estamos hablando de que el bloque índice del archivo utilizara dos entradas para referenciar a otro bloque. Esto es correcto?

3) 1 bloque que referencia a bloques -> 2^12/2 = 2^11 = 2048 bloques
No entiendo esta cuenta, quiero ver si es correcto mi razonamiento. En el bloque índice tengo 32 entradas y como para referenciar a un bloque necesito 2 bytes, entonces resulta que con ese bloque índice voy a poder referenciar 2048 bloques. Es correcto?

4) por archivo se puede tener hasta 2048 + 8 = 2056 bloques
No entiendo de donde sale el + 8.

Gracias 

Saludos



En respuesta a Rodrigo Alain De La Vega Rodriguez

Re: Parcial Diciembre 2021 Problema 2 parte b

de Federico Rivero -
Hola Rodrigo, respondo entrelíneas.

1) Cuando hablamos de un sistema de archivos multinivel de dos niveles me imagino que el archivo tiene un bloque índice de 32 entradas y luego cada entrada de ese bloque apunta a otro bloque (este seria el segundo nivel); Esto es correcto?

Es similar a como decís, pero no exactamente. En primer lugar un archivo/directorio tiene referencias directas a algunos bloques de datos (si el inodo es tipo directorio, los bloques de datos son arreglos de entrada_dir, si el inodo es de tipo archivo, los bloques de datos son los datos del archivo). Las referencias directas se guardan en las siguientes variables del problema:

directo: array [0..7] of int16; // 16 bytes
directo_tope: int16; // 2 bytes

Las variables del campo directo son int16 porque en este caso en el disco hay 65536 bloques (2^16). Si hubiera más bloques se precisarían variables más grandes para direccionarlos.

En este caso, como se tiene un sistema con un nivel adicional de indirección, tenemos bloques que contienen únicamente punteros a otros bloques. Como los bloques ocupan 4KB y cada puntero es un int16 (2 bytes), entonces en cada bloque de punteros entran 2048 punteros.

En definitiva, los bloques de indirección tienen 2048 referencias a otros bloques.  En este caso archivo contiene un solo bloque de indirección, y la variable indirecto_tope indica cuántos punteros de ese bloque de indirección se usan.

indirecto: int16; // 2 bytes
indirecto_tope: int16; // 2 bytes

2) Cuando dice: Para referenciar un bloque se requiere de 2 bytes
Como me doy cuenta que para referenciar un bloque necesito 2 bytes? Aquí supongo que estamos hablando de que el bloque índice del archivo utilizara dos entradas para referenciar a otro bloque. Esto es correcto?

Creo que esto queda contestado con lo que escribí más arriba, pero si quedan dudas por favor avisame. Por las dudas, NO es correcto que se usen '2 entradas' para referenciar a otro bloque.

3) 1 bloque que referencia a bloques -> 2^12/2 = 2^11 = 2048 bloques
No entiendo esta cuenta, quiero ver si es correcto mi razonamiento. En el bloque índice tengo 32 entradas y como para referenciar a un bloque necesito 2 bytes, entonces resulta que con ese bloque índice voy a poder referenciar 2048 bloques. Es correcto?

Con el bloque de indirección se referencian 2048 bloques porque en un bloque entran 2048 punteros de 2 bytes.

4) por archivo se puede tener hasta 2048 + 8 = 2056 bloques
No entiendo de donde sale el + 8.

El +8 son los 8 bloques directos que se pueden referenciar con las variables directo y directo_tope.

Saludos!
Federico