Non è chiaro senza ulteriore contesto determinare se Stalling sta parlando della tabella di inode in memoria o delle tabelle con nel filesystem. Ho prestato a qualcuno un'edizione molto precedente del libro, ma non l'ho mai restituito; quindi non posso cercare il contesto da solo.
Esistono tre "tabelle di file", ma quella qui discussa è più comunemente chiamata " tabella di inode in memoria "; il secondo è comunemente chiamato " tabella file aperti " ed esiste per processo. Entrambe le tabelle sono nella memoria del kernel e non sono accessibili a un programma. La terza "tabella" è in realtà due serie di tabelle all'interno del filesystem (su disco), la prima è la tabella di inode su disco e la seconda sono i blocchi di dati stessi (nota: questa discussione riguarda la tradizionale gestione del filesystem UNIX, i sistemi più recenti possono hanno diverse organizzazioni). Le voci nella tabella degli inode hanno sequenze di riferimenti in blocchi di dati che contengono blocchi di riferimento indiretti o dati effettivi. La chiave di un filesul filesystem c'è l'inode, non i blocchi di dati stessi. Quando Stalling sta parlando di una "tabella di file" su disco, sarà generalmente la tabella "più piccola" su disco a indicare i file, come la tabella di inode o la tabella di definizione del blocco nei sistemi FAT.
In termini di tabella degli inode in memoria, l'inode viene caricato dal file system, il suo valore st_nlink viene incrementato e quindi reso accessibile al resto del sistema, quando i dati dell'inode vengono scritti sul disco, lo st_ctime viene aggiornato. Se l'inode non è più necessario in memoria, il valore st_nlink viene diminuito e la voce nella tabella è contrassegnata come libera. Ogni processo inizierà con riferimenti a circa tre o cinque voci nella tabella inode in memoria: gli inode di stdin, stdout, stderr- questi sono spesso un file di dispositivo (tty) - e poi i riferimenti alla directory corrente e la directory principale. Un inode risiederà nella tabella una sola volta, quindi potrebbero esserci più riferimenti a un singolo inode nella tabella.
La tabella di file aperta viene mantenuta per processo e contiene riferimenti nella tabella di inode in memoria nonché puntatori a buffer e informazioni sullo stato (come fseek(2)valore e flag da open(2). Il descrittore di file è letteralmente un indice nella tabella di file aperta; ma la maggior parte le persone fanno riferimento alla voce nella tabella dei file aperti quando parlano del "descrittore di file".
Quando un file viene aperto utilizzando open(2), viene trovata una voce disponibile nella tabella file aperta, viene determinato l'inode del riferimento file dal nome percorso, l'inode viene caricato nella tabella inode in memoria, se non è già stato caricato, il conteggio st_nlink viene aumentato e la voce di inode viene indicata nel descrittore di file, i flag vengono impostati e i buffer vengono allocati. Quando chiuso, si verifica il contrario.
Le routine all'interno del kernel sono chiamate " sistema di gestione dei file " e il " filesystem " è l'organizzazione su disco. In questi giorni ci sono un certo numero di moduli 'plugable' che possono essere caricati ( modprobe(8)) nel sistema di gestione dei file per diverse organizzazioni su disco. Ad esempio, ci sono tipi di filesystem ext2 / ext3 / ext4 e ognuno di essi ha un modulo diverso nel sistema di gestione dei file del kernel; lo stesso con ntfs, sbfs, nfs, vfat, jfs, ecc.
Questo è un po 'più lungo di quanto volessi inizialmente, quindi mi fermo qui.