I OS moderni devono gestire diversi file system insieme (es. NTFS per Win, FAT-32 per USB drive etc.) :
- Windows assegna ad ogni fs una lettera di unità diversa (es. C:, D: etc.)
- UNIX tentano di unire tutti i fs in un’unica struttura gerarchica Virtual File System
L'idea del VFS è astrarre il codice comune tra tutti i fs e inserirla in un livello separato (VFS) :
- posiziona sopra tutti i fs
- gestione fs locali e remoti, come quelli in NFS (Network File System)
Interfacce del VFS :
- superiore : comunica con i processi utente, fornendo le syscall POSIX (es.
open,read,write) - inferiore : decine di funzioni che il VFS invia ai fs sottostanti

Struttura del VFS
La struttura del VFS :
- superblock : descrittore di uno specifico fs (info come tipo e dimensione)
- v-node (virtual-node) : astrazione di un singolo file (o directory) dentro VFS
- contiene metadati (es. riferimenti sul disco)
- fornire accesso ai file indipendentemente dal fs
- directory : organizzazione logica (mapping file e sub-directory)
- mappa nome file v-node
- accesso e navigazione semplice (interfaccia unica per i processi e utenti)

FS nuovo
Come fa il VFS a comunicare con un fs nuovo?
- registrazione : fs fornisce un vettore di funzioni richieste dal VFS, in modo che il VFS sa quale funzione chiamare per operare sui blocchi di quel fs
- montaggio : fs fornisce il superblock e il VFS crea un v-node per la directory di montaggio
- gestione I/O : quando si apre un file, il VFS crea un v-node e fa in modo che punti a esso
Aggiungere nuovi file system è molto semplice in questo caso, i progettisti del fs nuovo devono solo garantire il vettore di funzioni che il VFS necessita.
