Duda Examen febrero 2022 bloque 3 Sistema de Archivos

Duda Examen febrero 2022 bloque 3 Sistema de Archivos

de Luis Alberto Olivera Alonso -
Número de respuestas: 8

En el examen de febrero del 2022 preguntan en la parte a) ¿cuál es la cantidad máxima de archivos que pueden guardarse en el sistema?, pero no está la respuesta en la solución. Cuál sería la respuesta dadas las siguientes estructuras y como llegan a la misma:

 

const MAX_BLOQUES = 32768;
const MAX_INODOS = 4096;
type entrada_dir = Record
            usado : boolean; // 1 bit
            nombre : array [0..22] of char; // 23 bytes
            ext: array[0..2] of Char; // 3 bytes
            size : int; // 2 bytes
            tipo : (file, dir); // 1 byte
            inodo_num : int; // 2 bytes
            reservado : array [0..6] of bit; // 7 bits
End; // 32 bytes
type inodo = Record
            usado : boolean; // 1 bit
            inodo_num : int; // 2 bytes
            datos : array [0..8] of int; // 18 bytes
            tope : int; // 2 bytes
            reservado : array [0..6] of bit; // 7 bits
End; // 23 bytes
type bloque = array [0..1023] of byte; // 1024 bytes
type mapa_bits = array [0..MAX_BLOQUES-1] of bit;
type inodo_tabla = array [0..MAX_INODOS-1] of inodo;
var
            IT : inodos_tabla;
            MB : mapa_bits;


En respuesta a Luis Alberto Olivera Alonso

Re: Duda Examen febrero 2022 bloque 3 Sistema de Archivos

de Manuel Freire -
Hola,

Para responder eso tenés que tener en cuenta dos cosas: la cantidad de inodos en el sistema (cada archivo requiere uno) y la capacidad de los directorios (cada archivo está en un directorio). Para maximizar la cantidad de archivos sería ir llenando los directorios con n-1 archivos y un directorio (de manera de poder seguir almacenando archivos en dicho directorio) hasta ocupar todos los inodos.

Saludos!
En respuesta a Manuel Freire

Re: Duda Examen febrero 2022 bloque 3 Sistema de Archivos

de Gustavo Chalela Nuñez -
Hola, consulto porque no se cómo hacer para averiguar la capacidad de los directorios dada esta estructura particular...
Muchas gracias!
En respuesta a Gustavo Chalela Nuñez

Re: Duda Examen febrero 2022 bloque 3 Sistema de Archivos

de Federico Rivero -
Hola Gustavo,

Cada directorio tiene un máximo de 9 bloques asociados (campo 'datos' del inodo). Luego, en un directorio, cada uno de esos bloques está formado por un arreglo de entrada_dir. Como cada entrada_dir ocupa 32 bytes (2^5) y cada bloque dispone de 1024 bytes (2^10), entonces en cada bloque entran 1024 / 32 = 32 entradas. Cada directorio puede guardar entonces un máximo de 9 * 32 archivos/directorios.

Saludos,
Federico
En respuesta a Federico Rivero

Re: Duda Examen febrero 2022 bloque 3 Sistema de Archivos

de Gustavo Chalela Nuñez -
Gracias Federico. O sea que se podría decir que la máxima cantidad de archivos del sistema sería 9x32x(max_inodos): 9 por la cantidad de bloques de cada directorio, 32 por la cantidad de entradas_dir que hay en cada bloque, multiplicado por max_inodos. Sería que en el sistema tenemos un directorio raíz que tiene así mismo UN directorio y el resto archivos, en ese directorio hay UN directorio y el resto archivos, etc. Está bien o entendí mal?
Muchas gracias
Gustavo
En respuesta a Gustavo Chalela Nuñez

Re: Duda Examen febrero 2022 bloque 3 Sistema de Archivos

de Federico Rivero -
Hola Gustavo,

No exactamente. El inodo 0 es el directorio raiz, si los 9 * 32 espacios de ese directorio están formados por archivos, entonces no podés acceder a ningún otro archivo/directorio del sistema. Esto es lo que decía Manuel más arriba. Precisás que al menos uno de esas entrada_dir sea de tipo directorio. Es decir, cada directorio tiene (9 * 32) - 1 hijos de tipo archivo y 1 hijo de tipo directorio.

Saludos,
Federico
En respuesta a Federico Rivero

Re: Duda Examen febrero 2022 bloque 3 Sistema de Archivos

de Gustavo Chalela Nuñez -
Ahh claro! Muchas gracias Fede!
Saludos!
Gustavo
En respuesta a Gustavo Chalela Nuñez

Re: Duda Examen febrero 2022 bloque 3 Sistema de Archivos

de Gustavo Chalela Nuñez -
A ver si está bien: Porque estuvimos debatiendo en el grupo: la cantidad total de archivos en el sistema:
Habría que calcular la cantidad total de directorios del sistema y luego restarle al total de inodos, puede ser?
4096 / 288 = 14, 22 -> hay 14 directorios completos en el sistema.
Entonces la cantidad total de archvios sería (4096 - 14) = 4082.
Está bien?
Muchas gracias y perdón por la insistencia!
En respuesta a Gustavo Chalela Nuñez

Re: Duda Examen febrero 2022 bloque 3 Sistema de Archivos

de Santiago Nicolas Diaz Conde -
Buenas, te dejo como lo pense yo, y te recuerdo que los archivos vacios pueden apuntar a un mismo inodo (tengo entendido, si puede que un profesor me corrija) que sea "archivo vacio".
por lo que por ejemplo, puedes tener, que en cada carpeta en datos en datos[0] tengas 1 carpeta y 31 archivos como menciono el profesor, y en los otros 8, 32 archivos en cada uno.
Para un total de 287 archivos por carpeta y 1 carpeta (excepción la ultima carpeta donde todos son archivos), como tenemos 4096 inodos pero usamos 1 inodo para archivo vacio, tenemos 4095 inodos disponibles para las carpetas.
haciendo esto por inodos nos vemos limitados a un total de 4095*287+1 archivos, sin embargo si vemos, este numero de archivos no entra en el disco (4095*287+1)*32 > MAX_BLOQUES * 32.
Por lo que tendríamos MAX_BLOQUES * 32 - 4095 archivos.
Por lo que lo ideal es buscar la cantidad ideal de carpetas para poder tener la maxima cantidad de archivos posibles, es decir que cumple lo siguiente:
Una cantidad de carpetas tal que cumpla: (Cant_Carpetas * 287 + 1)*32 sea lo mas cercano posible a MAX_BLOQUES*32 - Cant_Carpetas (resto el espacio en disco que uso para las carpetas)
Un ejemplo:
Usando 115 carpetas, tenemos (115*287+1)*32 = 1056192 > 1048461 = MAX_BLOQUES*32 - 114
Por lo que con 115 carpetas tendríamos: 1056192 archivos maximo sin embargo esto es mas de lo que soportan los bloques (32768*32 = 1048576 entrada_dir), por lo que usando 115 carpetas, podemos tener 1048461 archivos (MAX_BLOQUES*32 - 115).
Si usaramos 116 carpetas serian menos archivos incluso (MAX_BLOQUES*32 - 116).
Usando 114 carpetas en cambio tenemos (114*287+1)*32 = 1047008 < 1048462 = MAX_BLOQUES*32 - 114.
Por lo que usando 114 carpetas podemos tener 1047008 archivos lo que es menor que con 115 carpetas (MAX_BLOQUES*32 - 115 = 1048461 > 1047008)
Por lo que lo ideal es tener 115 carpetas para tener un total de 1048461 archivos maximo.