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?
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
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
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?
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.
Saludos!
Federico