
Perdón si esta pregunta tiene un duplicado exacto en otro lugar, pero hasta ahora todas las respuestas que he encontrado en SE u otros sitios en general no responden específicamente a esta pregunta. Estoy tomando un curso de sistemas operativos en mi universidad y, por lo tanto, soy bastante nuevo en los sistemas de archivos en general.
Entiendo que en la mayoría de los sistemas de archivos, hay un directorio raíz que contiene entradas del directorio de archivos. Estas entradas contienen una asignación del nombre del archivo al número de inodo y tienen un tamaño variable en longitud.
De acuerdo aesta respuesta, Supongo que estas entradas se almacenan de forma lineal, como se muestra a continuación:
Puedo comprender completamente qué son los inodos y cómo se asignan a los números de bloque de datos de un archivo en el disco físico, utilizando sus entradas de tabla de contenido (TOC).
Sin embargo, mi pregunta es:¿Cómo y dónde se almacenan las entradas del directorio de archivos del subdirectorio?
Creo que están almacenados en la misma ubicación que el directorio raíz, en algún desplazamiento. Sin embargo, no puedo imaginar cómo se puede recuperar este desplazamiento del inodo.
Por lo tanto, tengo la sensación de que las entradas del directorio de los subdirectorios en realidad se almacenan en la región de datos del disco, en lugar de con las entradas del directorio raíz.
Por lo tanto, si este es el caso, pasar de un directorio a otro requiere que el disco lea desde ubicaciones aparentemente arbitrarias, lo que me parece un poco ineficiente.
Sin embargo, me gustaría simplemente aclarar mis ideas erróneas sobre la ubicación de las entradas del directorio de archivos de un subdirectorio.
Se agradece mucha ayuda.
Respuesta1
Los directorios generalmente se implementan como archivos. Tienen un inodo y un área de datos, pero, por supuesto, generalmente se accede a ellos (al menos se escribe) mediante llamadas especiales al sistema. Algunos sistemas permitenlecturadirectorios con la read(2)
llamada al sistema habitual (Linux no lo hace, FreeBSD lo hizo la última vez que lo comprobé). El área de datos del archivo de directorio contiene las entradas del directorio. En ext4
, el directorio raíz también tiene un inodo, está fijado en el inodo número 2 (pruebe ls -lid /
).
Hacer que el directorio actúe como un archivo facilita la asignación de espacio para las entradas del directorio, etc., ya que las funciones para asignar bloques para archivos siempre deben estar ahí. Además, dado que utilizan los mismos bloques de datos según sea necesario, no es necesario asignar espacio entre los datos del archivo y los listados de directorios de antemano.
Los aspectos internos de cómo se almacenan las entradas del directorio varían entre los sistemas de archivos y, por ejemplo, han evolucionado entre ext2
y ext4
. Los sistemas modernos utilizan árboles en lugar de listas lineales para realizar búsquedas más rápidas. Veraquí. Incluso los venerablessistema de archivos FATalmacena directorios como archivos, pero al menos en FAT más antiguos, el directorio raíz es especial. (La estructura de las entradas del directorio en FAT es, por supuesto, diferente de la de los sistemas de archivos Unix).
Por lo tanto, si este es el caso, pasar de un directorio a otro requiere que el disco lea desde ubicaciones aparentemente arbitrarias, lo que me parece un poco ineficiente.
Sí. Pero es probable que las entradas de directorio a las que se accede con frecuencia (o los bloques de datos subyacentes) estén almacenados en caché en los sistemas operativos modernos.
Guardar el contenido de todos los directorios de forma centralizada requeriría la preasignación de un área grande y aún requeriría búsquedas en disco dentro del área de datos del directorio.
Respuesta2
La solución común es que algunos de los inodos en el directorio raíz apunten a entradas que también son directorios. En muchos aspectos, son como archivos, pero el tipo de archivo le indica al sistema de archivos que los interprete como directorios.
(En tutoriales muy antiguos, como en el Unix original, incluso se le dirá que cat
también puede crear un directorio. Esto generalmente ya no es cierto).
En otras palabras, cada directorio es una lista lineal simple de punteros de inodo. Algunos de ellos apuntan a nodos hoja en el árbol de directorios (archivos), otros apuntan a nodos internos (otro directorio). Lo único que tiene de especial el directorio raíz es que es su propio padre y que hay algo externo al árbol que le indica al sistema que comience a recorrer el árbol desde aquí.