No está claro sin más contexto para determinar si Stalling está hablando de la tabla de inodo en memoria o las tablas con en el sistema de archivos. Le presté una edición de libro mucho anterior a alguien, pero nunca la recuperé; así que no puedo buscar el contexto yo mismo.
Hay tres "tablas de archivos", pero la que se discute aquí se llama más comúnmente " tabla de inodo en memoria "; la segunda se denomina comúnmente " tabla de archivos abiertos " y existe por proceso. Ambas tablas están en la memoria del núcleo y no son accesibles para un programa. La tercera "tabla" es en realidad dos conjuntos de tablas dentro del sistema de archivos (en el disco), la primera es la tabla de inodo en el disco y la segunda son los bloques de datos en sí mismos (nota: esta discusión se refiere a la gestión tradicional del sistema de archivos UNIX, los sistemas más nuevos pueden tener diferentes organizaciones). Las entradas en la tabla de inodo tienen secuencias de referencias en bloques de datos que contienen bloques de referencia indirectos o datos reales. La clave de un archivoen el sistema de archivos está el inodo, no los bloques de datos en sí. Cuando Stalling habla de una "tabla de archivos" en el disco, generalmente será la tabla "más pequeña" en el disco que denota archivos, como la tabla de inodo o la tabla de definición de bloque en los sistemas FAT.
En términos de la tabla de inodo en memoria, el inodo se carga desde el sistema de archivos, su valor st_nlink se incrementa y luego se hace accesible al resto del sistema, cuando los datos del inodo se escriben en el disco, el st_ctime se actualiza. Si el inodo ya no es necesario en la memoria, el valor st_nlink disminuye y la entrada en la tabla se marca como libre. Cada proceso se iniciará con referencias a unos tres o cinco entradas en la tabla de inodos en memoria: los nodos-i de stdin
, stdout
, stderr
- estos son a menudo un archivo de dispositivo (TTY) - y luego las referencias al directorio actual y el directorio raíz. Un inodo solo residirá en la tabla una vez, por lo que puede haber múltiples referencias a un solo inodo en la tabla.
La tabla de archivo abierto se mantiene por proceso y contiene referencias en la tabla de inodo en memoria, así como punteros a buffers e información de estado (como fseek(2)
valor y marcas de open(2)
. El descriptor de archivo es literalmente un índice en la tabla de archivo abierto; pero la mayoría las personas se refieren a la entrada en la tabla de archivo abierto cuando hablan del "descriptor de archivo".
Cuando se abre un archivo usando open(2)
, se encuentra una entrada disponible en la tabla de archivos abiertos, se determina el inodo de la referencia del archivo por el nombre de ruta, ese inodo se carga en la tabla de inodo en memoria, si aún no está cargado, el recuento st_nlink se incrementa y se hace referencia a la entrada de inodo en el descriptor de archivo, se establecen banderas y se asignan buffers. Cuando está cerrado, ocurre lo contrario.
Las rutinas dentro del núcleo se denominan " sistema de administración de archivos " y el " sistema de archivos " es la organización en el disco. En estos días hay una serie de módulos 'conectables' que se pueden cargar ( modprobe(8)
) en el sistema de gestión de archivos para diferentes organizaciones en el disco. Por ejemplo, hay tipos de sistema de archivos ext2 / ext3 / ext4, y cada uno de ellos tiene un módulo diferente en el sistema de gestión de archivos del núcleo; lo mismo con ntfs, sbfs, nfs, vfat, jfs, etc.
Esto es un poco más largo de lo que originalmente pretendía, así que me detendré aquí.