Una partizione del disco ext2 contiene un file system con il seguente layout :

Il blocco 0 (Boot) non è utilizzato da Linux, ma contiene il codice per avviare il computer. Dopo il blocco 0, la partizione del disco è divisa in gruppi di blocchi e ogni gruppo è cosi composto :
- superblock : contiene informazioni sul layout del fs, come :
- # di i-node
- # di blocchi del disco
- descrittore del gruppo : “cartello” su quello specifico gruppo, contiene :
- posizione delle bitmap dei blocchi liberi e degli i-node liberi/disponibili (bitmap perché segue design di MINIX 1)
- # di i-node disponibili e # blocchi liberi ci sono in questo specifico gruppo
- # di directory salvate in questo gruppo
- bitmap degli i-node disponibili
- bitmap dei blocchi liberi
- i-node : descrive un solo file e localizza tutti i blocchi del disco che contengono i dati del file
- blocchi dati : tutti i dati di file e directory sono memorizzati qui
- se un file/directory consiste in più di un blocco, i blocchi non sono necessariamente contigui nel disco (sparsi nel disco)
Prestazioni ext2
Il fs ext2 per garantire le prestazioni :
- gli i-node delle directory sono distribuite tra i gruppi di blocchi del disco
- si cerca di mettere i file nello stesso gruppo della directory che li contiene
- utilizza le bitmap per determinare rapidamente aree libere dove allocare nuovi dati del fs
- per evitare la frammentazione, quando deve allocare nuovo spazio per un nuovo file prealloca 8 blocchi extra
Struttura e gestione delle directory
Quando un programma chiede di aprire un file con open :
- il OS utilizza il path ricevuto per iniziare la ricerca del file, che può essere :
- path relativo : parte dalla directory corrente
- path assoluto : parte da
/(root dir)
- apre i blocchi dati della directory (da dove è partito) :
- OS sa che la dentro i file/directory sono scritti uno dopo l’altro (senza ordine) e che nessuna voce è spezzettata a metà tra due blocchi (vedi figura sotto)
- ora deve cercare la sotto-cartella (o file) sotto la directory da dove è partito, e inizia a leggere le voci :
- è la prima? No allora fai un salto grazie al campo “Entry size” (freccia bianca in figura)
- atterra sul secondo file, è quello che cercavo? No, continua a saltare finché non trovi quello che cercavi (ricorsivamente nel caso di sotto-cartelle)
- una volta beccata la voce che cercava, va a leggere il campo “I-node number” e va a cercare la struttura nel disco per localizzare i blocchi dati del file (o directory ma poi deve rifare i passaggi 2,3,4)

(PS: è importante solo capire il concetto e la struttura delle directory nell’immagine)
