¿UNIX busca directorios mediante búsqueda binaria?

¿UNIX busca directorios mediante búsqueda binaria?

Actualmente estoy leyendo el libro Programación avanzada en UNIX de W. Richard Stevens y leí que todos los archivos en UNIX tienen un número y que los nombres de los archivos se crean solo para comodidad del usuario. Cuando se ingresa a un directorio, el sistema busca el número del nombre ingresado.

Pensé, ¿cómo buscan el número? ¿Los archivos se almacenan ordenados por nombre para que puedan encontrarlos mediante búsqueda binaria? ¿O simplemente agregan archivos nuevos al final de la lista?

Respuesta1

Hay muchos formatos de sistemas de archivos diferentes y hacen diferentes compromisos entre el rendimiento en diferentes escenarios (directorios grandes versus directorios pequeños, lectura versus escritura, acceso concurrente,…), simplicidad del diseño (probabilidad de errores, esfuerzo de desarrollo,…), sobrecarga del disco (espacio). utilizado para cosas distintas al contenido del archivo), etc.

Sistemas de archivos más antiguos (p. ej.UFS, FFS,ext2, originalext3,…) tienden a almacenar directorios como una matriz de entradas (cada entrada contiene un nombre de archivo, un número de inodo y posiblemente algunos metadatos adicionales) y a realizar una búsqueda lineal. Los archivos nuevos se agregan en la primera entrada libre en la matriz; si no hay entrada libre, primero se amplía la matriz. Esto da como resultado un mal rendimiento con directorios grandes.

Sistemas de archivos más nuevos (p. ej.ext3con la dir_indexopción,ext4,zf,btrfs,reiserfs,HFS,HFS+, ...) tienden a almacenar directorios como una estructura de datos con búsqueda de tiempo logarítmico, algún tipo de árbol de búsqueda equilibrado, tabla hash o una combinación de los dos (árbol de hash de búsqueda equilibrado); normalmente, alguna variante de unárbol B. Esto hace que el código del sistema de archivos sea más complejo pero mantiene un buen rendimiento con directorios grandes.

Respuesta2

El número se llamainodo. Ext4, uno de los tipos de sistemas de archivos de Linux más populares, utiliza un árbol hash, consultekernel.org - Diseño de disco Ext4.

Más detalles de los árboles de hachís enWikipedia.

Respuesta3

Esto depende del sistema de archivos. Hace mucho tiempo, el directorio Unix era esencialmente un archivo que constaba de registros de 16 bytes, dos bytes para el número interno y 14 bytes para el nombre del archivo. Ésta es la razón del antiguo límite de 14 caracteres en los nombres de archivos. Los registros no estaban ordenados, por lo que se requirió una búsqueda lineal en el archivo.

Los sistemas de archivos más modernos como Ext4 de Linux tienen una tabla hash para acelerar la búsqueda.

Respuesta4

Alerta de pedante: la descripción no está completa. Los nombres de archivos no pueden describirse únicamente como una comodidad para los usuarios. Los nombres de los archivos han resultado serextremadamenteImportante en sistemas basados ​​en Unix.

Los números de inodo no pueden tener significado porque son elegidos por el módulo del sistema de archivos. Originalmente identificaron una ranura en la tabla de inodos almacenada en el disco. Las otras partes del sistema necesitan acceder a archivos que tienen un significado específico, por ejemplo /dev/tty1o /etc/passwd.

Sin limitarnos a una palabra específica, "conveniencia" es demasiado trivial para describir el mecanismo, que se utiliza para proporcionar la interfaz de usuario para seleccionar comandos como cato edpor nombre.

Si no hubiera directorios de nombres de archivos, muy pronto tendría que inventar algunos registros de nombres muy similares para los números de inodo para soportar estos usos.

Las entradas del directorio .también ..tienen un significado especial. Los sistemas de archivos virtuales, como los que procproporcionan su propio significado mediante nombres de archivos, por ejemplo, los ponen /proc/1/comma disposición para proporcionar información sobre el proceso 1. El VFS también permite el uso de diferentes sistemas de archivos, que no tienen que estar basados ​​en Unix y es posible que no funcionen exactamente con el mismo concepto de números de inodo.

ZFS parece pensar que tanto los nombres de archivos como los metadatos de inodos, como los permisos, pertenecen a una capa separada. Todavía tengo que entender qué ventaja proporciona esto. Parece ser más una forma de proporcionar diferentes controles de rendimiento para objetos equivalentes a archivos cuando se usan para almacenar sistemas de archivos anidados.

Además, los usuarios generalmente no pueden abrir archivos por número de inodo. Si pudieran, no podría controlar el acceso a un archivo a través de los permisos del director que lo contiene {y,ies}....

Quizás otra forma de ver el último punto es que es una característica de los directorios. El principio general de un directorio es asignar nombres de archivos, por lo que sin eso realmente no tienen ningún efecto.

Espera, dices, todavía tendrían un efecto como contenedor de referencias a archivos, también conocidos como "enlaces físicos". Puede tener archivos listados en varios directorios; eliminar un archivo de un directorio ( unlink) en realidad no lo elimina, si aún permanece en otro directorio. Los enlaces físicos son una parte interesante de la implementación de Unix, ¡pero AFAIK nunca encontraron ninguna utilidad! Generalmente se los considera sólo como una oportunidad para la confusión. Un ejemplo de exposición de un detalle de implementación porque hizo que fuera muy fácil proporcionar características interesantes, sin considerar realmente si la característica era necesaria. Similar al "error de mil millones de dólares", aunque este defecto de diseño en particular no ha sido tan peligroso.

Dicho esto, cabe destacar la forma en que los directorios garantizan la existencia de los archivos que contienen. Si quisiera implementar algún otro sistema para identificar archivos, tendría que considerar la posibilidad de que eliminar un archivo le dejaría con una entrada que hace referencia a un archivo inexistente, o incluso a un archivo nuevo y no relacionado al que se le asignó el mismo inodo. número más adelante.

información relacionada