¿Qué significa indir simple, indir doble, indir triple en un Inode de un archivo?

Suponiendo que ya sabes qué es un inodo, explicaría directamente cuáles son estos punteros.

Un inodo para un archivo mantiene la información completa sobre el diseño físico de los datos del archivo. Esta información se almacena en forma de un mapa de bloques de varios niveles. Tomando el ejemplo de un Unix Inode como se explica en el “Diseño del sistema operativo Unix por Maurice Bach”, dos tipos de punteros de bloque de datos se mantienen dentro de este mapa de bloques.

Cuando me refiero a punteros de bloque, básicamente me refiero a números de bloque de datos. Tenga en cuenta que estos son siempre los números de bloque lógicos y no los números de bloque físico.

1. Punteros de bloque directo : el número de bloque contenido en cada puntero de bloque directo es para el bloque de datos real que contiene los datos del archivo.

2. Punteros de bloque indirectos : estos son muy diferentes de los punteros de bloque de datos directos. Al igual que un puntero de bloque de datos directo, este también tiene un número de bloque, pero este bloque no contiene los datos del archivo real. En cambio, tiene un conjunto de números de bloque de datos directos. Por lo tanto, se denominan “indirectos”.

Los punteros de bloque indirectos generalmente se pueden clasificar como:

2.1 Puntero indirecto único: la indirección de un nivel que implica que el bloque indirecto contendrá un conjunto de (limitado por el tamaño del bloque) de números de bloque de datos directos.

2.2 Puntero indirecto doble: la indirección de dos niveles que implica que el bloque indirecto contendrá un conjunto de números de bloque indirectos únicos. Cada uno de estos bloques indirectos individuales tendrá un conjunto de números de bloque de datos directos.

2.3 Puntero indirecto triple : la indirección de tres niveles que implica que el bloque indirecto contendrá un conjunto de números dobles de bloque indirecto. Cada bloque indirecto doble tendrá un conjunto de números de bloque indirectos individuales y cada bloque indirecto tendrá un conjunto de números de bloque de datos directos.

Comprendamos esto con la ayuda del siguiente diagrama. Para la discusión, suponga que el tamaño del bloque del sistema de archivos es 4K (4096 bytes), y un número de bloque lógico es 4 bytes. Esto implica que cada bloque indirecto (ya sea simple, doble o cualquier nivel de indirección) puede contener 1024 punteros de bloque.

4096/4 = 1024 número de punteros de bloque dentro de cada bloque indirecto.

En el siguiente diagrama:

D1, D2, D3 … .D10 son punteros de bloque directo donde cada puntero individual contiene un número de bloque para un bloque de datos directo: 23, 30, 25, etc. Estos son los bloques de datos de archivo.

SI Block es un puntero de bloque indirecto único a un bloque indirecto (bloque # 100). Este único bloque indirecto 100 se lee primero para obtener la lista de 1024 números de bloque de datos directos: 55, 82, 80, etc. Estos son los bloques de datos de archivo.


A continuación se muestra un puntero DI Block en inodo. Contiene el bloque # 103, que es un bloque doble indirecto que consta de 1024 números de bloque indirectos individuales, y el resto se explica en el diagrama.

Habiendo visto y entendido los punteros de bloque SI y DI, debería ser fácil visualizar el puntero de bloque TI (triple indirecto). Entonces, me saltearé eso.

Analicemos por qué el mapa de bloques en inodo se mantiene de esta manera. Si lo mantenemos simple y solo mantenemos todos los números de bloque dentro de una estructura de datos lineal, entonces el tamaño de esta estructura de datos crecerá a medida que crezca el tamaño del archivo. Esto a su vez daría como resultado un crecimiento del tamaño del inodo en sí mismo, porque los inodos persisten en el disco.

Por ejemplo, si un archivo tiene un tamaño de 1 GB, lo que implica que los datos del archivo se distribuyen en 262144 bloques, ya que el tamaño del bloque es 4K. Si planeamos mantener este mapa de bloques en una estructura de datos lineal, requerirá que mantengamos 262144 punteros de bloque dentro de un inodo, lo que de hecho es mucho. Los inodos deben mantenerse compactos.

¿Qué pasa si el tamaño del archivo crece a 2 GB o 10 GB o 20 GB? El tamaño del inodo seguirá creciendo a medida que crece el tamaño del archivo y, por lo tanto, la estructura de datos utilizada para mantener el mapa de bloques no escalará bien con el crecimiento del tamaño del archivo.

Ahora, veamos cómo nos ayuda el mapa de bloques multinivel.

Como se muestra arriba, el inodo tiene un total de 13 punteros de bloque (¡Tenga en cuenta que solo 13!)

10 directos, 1 simple indirecto, 1 doble indirecto y 1 triple indirecto.

¿Qué tamaño de archivo se puede asignar utilizando este tipo de estructura?

Para punteros de bloque directo: 10 * 4K = 40 KB
Para un puntero de bloque SI: 1024 * 4K = 4 MB
Para un puntero de bloque DI: 1024 * 1024 * 4K = 4 GB
Para un puntero de bloque TI: 1024 * 1024 * 1024 * 4K = 4 TB

Un inodo con 10 puntero de bloque directo con un puntero de bloque SI asigna el diseño de datos para un archivo de aproximadamente 4 MB de tamaño (4 MB + 40 KB).

Un inodo con 10 puntero de bloque directo con SI, y punteros de bloque DI mapean el diseño de datos para un archivo de aproximadamente 4 GB de tamaño (4 GB + 4 MB + 40 KB).

Un inodo con 10 punteros de bloque directo con punteros de bloque SI, DI y TI asigna el diseño de datos para un archivo de aproximadamente 4 TB de tamaño (4 TB + 4 GB + 4 MB + 40 KB).

Tenga en cuenta que la indirección tiene el costo de una lectura de bloque adicional de los bloques indirectos antes de leer el bloque de datos del archivo. El nivel de indirección en el inodo depende de los requisitos del sistema de archivos. Si el sistema de archivos debe admitir archivos de un tamaño máximo de 4 GB, entonces el diseño de inodo puede eliminar 10 punteros de bloque directos y cada uno de los punteros de bloque SI y DI. Entonces, realmente depende de los requisitos. Además, el número de punteros de bloque de datos directos (10 en este caso) puede variar de un sistema de archivos a otro.

Indirección única: los números de bloque directo se almacenan en el inodo. Estos generalmente representan un conjunto inicial de desplazamientos / bloques del archivo.

Doble indirección: bloques que tienen direcciones de bloque como contenido.

Triple indirección: bloques que contienen direcciones de bloques que a su vez contienen direcciones de bloques que tienen datos reales.