Il supporto principale per la memorizzazione dei file è il disco. La memorizzazione sul disco avviene per settori.
A livello fisico i file vengono memorizzati come sequenze di blocchi; un blocco è una unità di informazione che può essere trasferita con un’unica operazione di lettura o scrittura (dalla memoria al disco e viceversa) e corrisponde a un settore o a un multiplo di settori.
Le informazioni in input e in output passano attraverso un buffer di input/output che consente di isolare i dati che servono al programma in corso, all’interno del blocco individuato. I blocchi quindi devono avere lunghezza inferiore al buffer di I/O.
I record logici possono coincidere o no con i blocchi ed essere a lunghezza fissa o variabile (i record a lunghezza variabile devono avere un indicatore di lunghezza o un simbolo identificativo della fine del record).
I record di un file si dicono:
- sbloccati se ogni blocco contiene un record logico;
- bloccati se ogni record contiene più record logici (permette di risparmiare spazio e riduce il tempo necessario alle operazioni di I/O: quando il programma richiede la lettura di un record logico viene letto il blocco nel buffer; se il record logico è già presente nel buffer non c’è lettura fisica; analogamente in scrittura il record viene scritto nel buffer e il buffer scritto sul blocco solo quando il buffer è pieno o l’elaborazione si rivolge a un altro blocco);
- multiblocco (spanned) se un record logico occupa più blocchi.
Il file system fisico si occupa della memorizzazione dei file usando diversi metodi di allocazione dei blocchi, con blocchi contigui o no.
Se si usano blocchi contigui la dimensione del file deve essere dichiarata in fase di creazione; sul disco deve esserci un’area libera della dimensione richiesta (in caso contrario bisogna procedere alla compattazione del disco) inoltre è un problema stabilire la dimensione del file: se è sovradimensionato si spreca spazio, in caso contrario può essere necessario in seguito ampliare il file, eventualmente spostandolo in una zona di disco più ampia. Per questo si preferiscono in genere metodi di allocazione in cui si utilizzano blocchi non contigui.
In ogni caso si verifica il problema della frammentazione; si ha frammentazione interna perché i blocchi possono non essere occupati interamente e frammentazione esterna quando si cancellano dei blocchi.
Il file system usa molte strutture di dati per descrivere i file: ci sono strutture per la descrizione del sistema di archiviazione, per la descrizione dei file (directory e tabella dei descrittori di file) e dello stato di assegnazione dei blocchi, del modo in cui i file occupano i blocchi (FAT o mappa dei blocchi) e per la descrizione dei blocchi liberi (mappa dei blocchi liberi).
Tutti i file su disco sono descritti nella directory.
La directory è essa stessa un file (memorizzato sul disco come qualsiasi altro file) che contiene un record per ogni file (anche per la directory stessa). Il record può essere il descrittore del file o un puntatore al descrittore in una tabella separata dei descrittori dei file. Ogni descrittore contiene le informazioni necessarie per la gestione del file e per l’accesso al contenuto del file.
Il file system deve mantenere aggiornata la directory. Ci può essere una directory unica per tutto il disco, una directory per ogni utente o una directory gerachica, organizzata in sottodirectory.
La modalità più frequente è l’organizzazione gerarchica in cui le directory hanno una struttura ad albero. Esistono cioè più file directory e ogni descrittore può contenere il nome di un file o di un’altra directory (sottodirectory), partendo da una directory principale (radice). Questa organizzazione risulta molto efficiente e agevola i meccanismi di ricerca di un file, poiché ogni directory contiene un numero limitato di file, permette di avere file con lo stesso nome in directory diverse, e consente comunque di accedere ai file in qualsiasi directory.
Il file system deve rendere disponibili le operazioni di gestione delle directory (creazione, cancellazione ecc.) ed eseguire le operazioni necessarie sulle directory quando vengono eseguite operazioni sui file. Al momento della creazione di un file, il file system alloca lo spazio su disco in base ad una politica di gestione e inserisce il nome del nuovo file in un descrittore e un record nella directory. L’operazione di cancellazione invece elimina dalla directory il descrittore del file specificato ma le informazioni vere e proprie del file rimangono su disco (e potrebbero ancora essere recuperate con appositi programmi di utilità).