La tabella dei file è nel filesystem o nella memoria?


9

Nel contesto delle tabelle di controllo del sistema operativo, il termine "tabelle di file" si riferisce a una struttura di dati che fa parte del filesystem o che si trova nella memoria principale (e nel qual caso suppongo che avrebbe solo riferimenti a file aperti) ? Il mio libro di testo 1 dice:

Le tabelle forniscono informazioni sull'esistenza di file, la loro posizione sulla memoria secondaria, il loro stato corrente e altri attributi. Gran parte, se non tutte, di queste informazioni possono essere gestite e utilizzate da un sistema di gestione dei file, nel qual caso il sistema operativo ha una conoscenza scarsa o nulla dei file.

Inoltre, cos'è un sistema di gestione dei file? Questo significa che il filesystem?

1 Stallings, Sistemi operativi , 7 ° ed., P. 127

Risposte:


22

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.


Questa è una risposta incredibilmente buona.
Kazark,

Sì, per favore non fermarti quando stai fornendo una risposta così buona e completa.
Lizardx,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.