[Examen Agosto 2020] [Problema 2][b] Sobre filesystem

[Examen Agosto 2020] [Problema 2][b] Sobre filesystem

de Manuel Sanchez Laguardia -
Número de respuestas: 2
Hola,

En este ejercicio se define la función:
    procedure leerBlq (numBloque: int, var buff: bloque) : boolean
que carga en la variable buff un bloque.

El bloque se define como:
    type bloque = array [0..4095] of byte;

En la solución se define la variable buff como:
    var buff = [0..127] of entradaDir;
y luego se llama a la función leerBlq pasandole ese buffer.

¿Se puede hacer eso?

Por otro lado, entiendo que como máximo pueden haber 128 entradas de directorio por bloque, pero podrían haber menos no?
No me queda claro.
¿Siempre se asume que todos los bloques del disco, están divididos en entradas de directorio de igual tamaño?

En este ejercicio, parecen haber asumido eso porque después se chequea si está en uso con buff[i].usado y se recorre de 0 a 127.


Gracias.
Un saludo
En respuesta a Manuel Sanchez Laguardia

Re: [Examen Agosto 2020] [Problema 2][b] Sobre filesystem

de Federico Rivero -

Estimado,'

Sí, lo permitimos. La idea que subyace es que los sectores del disco son arreglos de bytes, que uno los interpreta. Un arreglo de 4096 bytes lo podés interpretar como 4096 chars, o como 2048 shorts (int de 16 bits), o en este caso, como 128 estructuras de 32 bytes cada una.

Ahora, el casteo de arreglo a arreglo no compila en C. Para que compile, habría que castear las referencias (de entradaDir* a byte*), porque eso es bastante inocuo. En ese caso el valor de la variable no cambia, el compilador simplemente registra 'lo que está a partir de esta dirección de memoria, a partir de ahora se interpreta como byte en lugar de entradaDir'. Pero bueno, permitimos usar tipos estáticos porque es más entendible, y asumimos que funciona de la forma en que funciona el casteo de punteros.

 Saludos,

            Federico

En respuesta a Federico Rivero

Re: [Examen Agosto 2020] [Problema 2][b] Sobre filesystem

de Federico Rivero -
Con respecto a la segunda entrada, sí, los bloques de directorios se usan completamente. Su único uso sería guardar entradas de directorio y no tendría sentido desperdiciar memoria y no usar todas las entradas posibles.

Saludos,
Fedeico