Il filesystem é tipicamente implementato a strati:
- i dischi sono lo strato piú basso: accesso randomico, a blocchi.
- Controllo i/o: accesso tramite driver
- il FileSystem di base: usa i driver per recuperare i blocchi
- Modulo di organizzazione dei file: gestisce allocazione e spazio libero e traduce indirizzi logici in fisici
- FileSystem logico: gestisce struttura di directory, protezione e descrittori.
Se il SO supporta piú FS, allora alcuni livelli possono essere condivisi.
Strutture dati
Servono diverse strutture dati, ogni partizione possiede:
- Blocco di controllo del boot, con le informazioni per avviare il SO in quella partizione.
- Blocco di controllo della partizione, con informazioni su dimensione e numero di blocchi, informazioni sui blocchi liberi.
Il sistema operativo mantiene una tabella delle partizioni.
Realizzazione delle directory
Le directory sono dei file speciali: una tabella con nome file e puntatore al FD.
Possono essere realizzate con una lista, é semplice ma una ricerca nella directory richiede una scansione lineare, si migliora utilizzando una cache ma l’implementazione é complessa.
La cancellazione di un elemento si puó fare con un flag, sostituendo l’elemento da cancellare con l’ultimo elemento, usando una tabella di hash.
Allocazione dei file
- Allocazione contigua: ogni file occupa un certo numero di blcochi contigui su disco, si memorizza per ogni file indirizzo di inizio e lunghezza di blocchi. Accessi sequenzali e diretti sono rapidi ma si crea frammentazione esterna e se i file aumentano di dimensione é necessario spostarli.
- Allocazione collegata: si memorizza per ogni file puntatore a blocco iniziale e finale, e in ogni blocco c’é il puntatore al successivo. Ció permette ai blocchi di trovarsi ovunque sul disco, rapidi accessi sequenziali.
- Allocazione indicizzata: Per ogni file si mantiene un array di puntatori. Supera tutti i problemi delle altre soluzioni ma é critica la dimensione del blocco indice, troppo piccolo non permette file grandi.