Considere un sistema de archivos dirigido a algunos dispositivos integrados que hace poco más que almacenar archivos en una estructura de directorios jerárquica. Este sistema de archivos carece de muchas de las operaciones a las que puede estar acostumbrado en sistemas como Unix y Windows (por ejemplo, sus permisos de acceso son completamente diferentes y no están vinculados a los metadatos almacenados en los directorios). Este sistema de archivos no permite ningún tipo de enlace duro o enlace suave, por lo que cada archivo tiene un nombre único en una estructura de árbol estricta.
¿Hay algún beneficio en almacenar un enlace al directorio mismo y a su padre en la estructura de datos en disco que representa un directorio?
La mayoría de sistemas de archivos UNIX tienen .
y ..
entradas en el disco. Me pregunto por qué no manejan los de la capa VFS (controlador de sistema de archivos genérico). ¿Es este un artefacto histórico? ¿Existe una buena razón y, de ser así, cuál exactamente para poder determinar si es relevante para mi sistema integrado?
fuente
Respuestas:
Tener enlaces al directorio padre tiene sentido para mí. Si no los tuviera, siempre necesitaría trabajar con una lista completa de directorios. Entonces, por ejemplo,
/home/svick/Documents/
tendría que ser representado como{ /, /home/, /home/svick/, /home/svick/Documents }
. Si no hiciera eso, no podría encontrar el directorio principal (o sería muy costoso). Esto no solo es ineficiente, sino también peligroso. Si tiene dos listas de este tipo que se superponen, podrían desincronizarse fácilmente si moviera algún directorio.Por otro lado, si tiene una referencia al directorio padre, es más eficiente y seguro.
No veo ninguna razón para tener un enlace al directorio actual. Si tiene una estructura que representa algún directorio y desea acceder a ese directorio, el uso
.
siempre es completamente innecesario. Por eso, esperaría que el.
enlace en realidad no exista en la estructura del sistema de archivos y sea solo virtual.fuente
.
y..
entradas.Tienes menos casos especiales. En muchas situaciones, VFS puede manejar ".." como maneja cualquier otro nombre de directorio.
fuente
La única razón que puedo imaginar es el siguiente escenario:
Existía una implementación original de un sistema de archivos con el mismo formato de directorio, pero las nociones de rutas de archivos y subdirectorios no se consideraron en ese momento (ver El sistema de archivos Unix PDP-7 ).
¡Entonces la gente pensó que la resolución del camino y los subdirectorios serían útiles!
Para mantener cierta compatibilidad con las implementaciones anteriores, se decidió que
.
y..
se almacenará en el disco como cualquier otro directorio.Entonces, ¿tal vez nos quedemos con esos artefactos inútiles, solo por el hecho de la compatibilidad con el software de 40 años? Escenario creíble?
Nota: Además, no fue completamente estúpido agregar estas entradas a la lista del directorio, ya que de todos modos debe almacenar el número de inodo de su verdadero directorio principal (recuerde que los enlaces duros en los directorios estaban permitidos en este momento) y una referencia a su propio número de inodo podría ser un buen control de cordura.
fuente
No veo una razón para implementar
.
y..
en ningún nivel en lugar del otro. Sin embargo, si apunta a sistemas embebidos, cualquier capa que pueda guardar puede ser dinero ganado, por lo que podría tener sentido intentar implementar todo lo más bajo posible.En cuanto a la necesidad general de
.
y..
, ¿cómo expresaría caminos relativos sin ellos? Al menos..
es indispensable para las rutas que salen del subárbol actual. Si no necesita tales rutas (¿tal vez el árbol es una forma primitiva de codificar los privilegios de acceso?) No lo necesita..
.fuente