La struttura interna di vfs.tmp è rappresentata in figura 3.1:
All'interno delle prime due sezioni (FLI e FLB) risiedono, rispettivamente, l'offset al primo i-node libero e l'offset al primo blocco libero. Insieme occupano sul file una dimensione fissa pari a quella di due interi.
Immediatamente dopo i due puntatori iniziali c'è la zona dedicata agli i-nodes. Essa ha una dimensione variabile dipendente dal numero di i-nodes presenti. Ogni i-node ha una dimensione pari a quella di sei interi, e porta con se le seguenti informazioni:
Per offset (e questa è una convenzione utilizzata in tutto il progetto) si intende il numero di bytes che separano la posizione 0 nel file fino al primo byte dell'oggetto in questione. Ad esempio se diciamo che un i-node ha offset 100 si intende che la rappresentazione dell'i-node nel VFS si trova 100 bytes dopo l'inizio del file.
Come si è potuto intuire dalla struttura di un i-node, la gestione degli i-nodes liberi è affidata ad una lista concatenata: ogni i-node libero punta al successivo libero. Gli i-nodes usati invece puntano a 0 in quanto non sono compresi nella lista. Anche l'ultimo i-node libero punta a 0.
Immediatamente dopo gli i-nodes si arriva alla parte del file dedicata ai blocchi, che conterrà i file veri e propri o le directory structures in caso di un blocco dedicato ad una directory. È da sottolineare che ogni file in questo file system occuperà al massimo un intero blocco.
Anche le directory occupano al massimo un blocco dati e sono così composte:
È facile intuire che all'interno di una directory il numero massimo di entry sia
DIM_BLOCCO / (FILE_NAME_SIZE + DIM_INTERO)
La gestione dei blocchi liberi invece viene affidata anche in questo caso ad una lista concatenata: ogni blocco libero punta al blocco libero successivo (ne contiene il suo offset) mentre un blocco occupato non punta a nulla; l'ultimo blocco libero invece punta a 0. La dimensione totale di questa area del vfs.tmp è uguale alla dimensione del blocco moltiplicata per il numero di i-nodes disponibili.
La dimensione totale del file che rappresenta il VFS dunque sarà pari a:
2 * sizeof(int) + #I_NODES * 6 * sizeof(int) + DIM_BLOCCO * #I_NODES
Inoltre è fondamentale specificare che il primo i-node è sempre dedicato a descrivere la directory root e punterà sempre e comunque al primo blocco, il quale rappresenterà fisicamente questa directory.