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 :

  1. 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)
  2. 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)
  3. 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)
  4. 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)


Performance_FS