fat - ext en sistemas operativos

FAT

FAT (File Allocation Table) es una implementación concreta de un file-system en particular. Hoy en los sistemas operativos avanzados ya no se usa.

Funcionamiento FAT

El problema de la asignación enlazada era que no había acceso directo, y que para dirigirte a un bloque especial, tenías que recurrir a un puntero, cuya locación estaba en disco, por lo cual era demasiado lento el proceso de ir a buscar dicho puntero para luego saber dónde se encontraba el bloque.

Por este motivo, para que no tengamos que usar los punteros ubicados en disco, los que implementaron FAT tomaron la decisión de agarrar todos esos punteros (de tamaño mucho menor a los bloques a los que apuntaban), y llevarlos a una tabla ubicada en memoria, la cual llamaremos “tabla FAT”.

Para implementar FAT lo que me interesa es saber el nombre del archivo y donde empieza, va a funcionar igual que la asignación encadenada con la diferencia de que ahora vamos a tener una tabla de punteros en memoria.

Una entrada es el tamaño del puntero de la entrada FAT.

Como dato extra, si un cluster perteneciente a un archivo se daña y no puede ser leído, igual se puede recuperar el resto del archivo, independientemente de que exista o no una copia extra de la tabla FAT en otro lugar del volumen.

Tamaño entrada FAT

¿Por qué fueron creciendo el tamaño de las entradas? Porque los discos fueron creciendo y necesitaban más punteros que sean más grandes para poder direccionar más cosas.

En la FAT 32 tenemos entradas de 32 bits en las cuales hay 4 bits que no utilizamos para direccionar nada (el por qué pasa esto e un dato anecdótico).

EXT

EXT es una implementación de un file-system de tipo Unix. Esta implementación se usa en los sistemas operativos actuales. Está basado en la asignación indexada.

Inodos

En EXT2 por ejemplo, el FCB es el inodo. Esto es así porque tiene toda la información relativa al archivo, y no pasa como pasaba en FAT en donde toda la información estaba en las entradas de directorio. En este caso las entradas de directorio son mucho más chicas.

Más allá de la metadata que tiene el inodo, tiene punteros, ¿Cuántos tiene?, la implementación posta de EXT dice que tiene 12 punteros directos, 1 puntero indirecto simple, 1 puntero indirecto doble, y 1 puntero indirecto triple.

¿Qué quiere decir esto de directo e indirecto?

Bueno, los directos van a ser aquellos que apuntan a bloques de datos, en donde por ejemplo, si yo quisiera ir al primer bloque, voy a tener que utilizar el primer puntero.

Lo que pasa con el tema de los punteros directos es que si yo quisiera meter todo en el inodo, este pasaría a ser muy grande, además de que muchas veces no tiene sentido traer muchísima información a memoria. Por este motivo se crearon los punteros indirectos, que apuntan no a bloques de datos sino a bloques de punteros. En el caso del puntero indirecto simple, este va a contener un bloque de punteros en donde voy a poder apuntar a 4 direcciones. En el caso del puntero indirecto doble voy a poder apuntar a 16 direcciones, y en el caso del puntero indirecto triple a 64 direcciones.

Cada bloque de punteros va a ser del mismo tamaño que el bloque de datos, que por lo general es de 4KB.

Cuando usamos punteros directos por lo general vamos a querer apuntar a archivos pequeños. El sentido de usar punteros indirectos es para los momentos en donde queramos apuntar a archivos muy grandes.

Estructura EXT2

Para empezar a explicar lo que es el súper bloque, comencemos a hablar de que hace EXT:

EXT no agarra y formatea todo como si fuera una gran cosa, sino que los separa en un grupo de bloques. En disco siempre va a pasar que tengamos ciertos grupos de bloques más cerca que otros (aclaremos que en file-system siempre nos vamos a referir a los discos rígidos), por lo cual cuando hagamos acceso a disco lo que vamos a buscar es no saltar de un lado a otro, de un grupo a otro, sino que vamos a tratar siempre de laburar en el mismo grupo de bloques, o a lo sumo en grupos continuos, con el fin de que el reposicionamiento de cabezales sea el mínimo (el reposicionamiento de cabezales surge cuando se va a buscar a una dirección u otra).

Si bien el grupo de bloques va a contener la información para que pueda administrar mi bloque, vamos a tener además al superbloque, que va a contener la información de todo el file-system, como por ejemplo cuántos inodos o bloques tengo en todo mi file-system, o cual es la configuración del tamaño del bloque o del tamaño del inodo. Además, del superbloque vamos a tener n copias, ¿con qué fin? Por un tema de seguridad y de velocidad. Cada grupo de bloques va a tener su propia copia del superbloque, para todos va a ser el mismo.

Por otro lado, evidentemente vamos a tener que tener la información para gestionar nuestro grupo en particular, para lo cual vamos a tener nuestro descriptor de grupo, que va a contener lo escrito en el gráfico de arriba, en donde vemos, que el descriptor va a contener los punteros a la información.

Implementación cercana a la realidad de los directorios en EXT2Cuando nosotros hacemos por ejemplo un ls en consola, la información no la saca de las entradas del directorio, sino de los inodos.

Los directorios de EXT son de longitud variable, mientras que los de FAT son fijos.

Tipos de archivos

SoftLinks:

El archivo “acceso directo” es otro archivo totalmente distinto al original que lo único que contiene es el acceso directo al archivo posta. ¿Cómo sabemos que son archivos distintos? Porque poseen inodos distintos, tienen distintos permisos, etc. La información que tiene el archivo de acceso directo es una ruta.

¿Y para qué nos sirve tener un archivo de acceso directo? Por la misma razón que le dábamos click al acceso directo del Counter Strike 1.6 en el escritorio, para tener que hacer menos accesos, es más rápido.

HardLinks

Un hardlink es una referencia al mismo archivo. Lo que se hace es crear una nueva entrada de directorio que apunte al mismo inodo.

La diferencia con el softlink es que solo voy a tener un inodo, por lo cual no voy a poder distinguir cual es el original y cuál es el agregado, debido a que el nuevo va a tener el mismo inodo. Por esto mismo antes dijimos que el hardlink es básicamente un archivo regular. Si se borran ambas referencias (HL FILE LOCO y FILE LOCO), el archivo se borra, mientras que en el softlink no pasaba eso, debido a que el acceso directo solo contenía el path, y tenía un inodo distinto.

Creación de links

El contador de referencias solamente aumenta su conteo cuando se van creando hardlinks de ese archivo, los softlinks no los cuenta.