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.