In tutti i sistemi operativi simili a UNIX
, il file
system riveste un ruolo di massima importanza. Fin dalla loro origine
infatti, gli sviluppatori si sono impegnati per far sì che esso diventasse
il principale meccanismo di identificazione delle varie entità del
sistema. È proprio per questo che attualmente sono disponibili più
tipi di file ed ognuno di essi descrive un oggetto ben definito. Quando
ad esempio un'applicazione si collega ad un altro software, locale
o remoto che sia, entrambi i sistemi creano una via di comunicazione
rappresentata da un file, detto socket (o anche fifo
nel caso di collegamento locale). Una volta stabilita la connessione,
si agisce sul socket come su un qualunque altro tipo di file.
Un altro esempio molto interessante per comprendere la centralità
dell'implementazione dei file system in Linux, è delineato dai file
di device. Ogni dispositivo attivo sul computer, ha un corrispondente
file speciale all'interno del ramo
della gerarchia
dei directory. In questo modo è possibile inviare comandi alla periferica
da esso identificata effettuandovi operazioni di scrittura, e raccogliere
i dati restituiti tramite una semplice lettura. Per realizzare questa
implementazione, ogni file di device dispone di due numeri fondamentali
detti major e minor number: il primo, definisce il driver
che gestisce l'hardware specifico, l'altro descrive univocamente ogni
periferica ad esso associata.
Il kernel Linux supporta una moltitudine di file system sia fisici che virtuali. Come si è detto in precedenza, non è questa la sede per approfondire le tecniche di memorizzazione fisica dei dati, quindi si esamineranno, seppur superficialmente, tre dei file system virtuali implementati a livello kernel: il procfs, il sysfs ed il nfs. L'intento di questa breve presentazione è quello di far assimilare concretamente il concetto di file system virtuale (detto anche pseudo file system).
Il procfs fornisce informazioni sullo stato del sistema. È virtuale
perché non occupa spazio fisico: i file sono creati ``al volo''
dal kernel quando si tenta di accedere ad essi. Ad esempio il comando
visualizza le caratteristiche dei processori
attualmente presenti sulla macchina, mentre
mostra informazioni utili sullo stato della memoria principale e di
swap. Inoltre, per ogni processo in esecuzione viene creato
un directory con nome uguale al PID (Process ID). Al
suo interno, risiedono alcuni file virtuali che, se letti, restituiscono
informazioni riguardo alla linea di comando che ha lanciato il processo,
alle variabili d'ambiente impostate al suo avvio, allo stato attuale,
ecc. L'evidente potenzialità di questo file system è di costituire
una finestra sul kernel che, ad ogni istante, può fornire all'utente
risposte aggiornate.
Con il kernel 2.6 è stato introdotto l'elegante e funzionale sysfs,
che ricopre una funzione analoga a quella già svolta da una parte
del procfs. Esso infatti, provvede ad esportare alcune strutture dati
del kernel, i loro attributi, le connessioni fra esse e la loro rappresentazione
in spazio utente. Il sysfs è interamente basato sull'infrastruttura
kobject, utilizzata per la gestione degli oggetti, delle strutture
dati e delle varie sezioni di Linux. Per ogni kobject del kernel,
viene creato un directory all'interno di
. Poiché
in questa versione di Linux esiste una visione gerarchica di tutti
i device che compongono una macchina, ogni oggetto del sysfs viene
posizionato in un sottodirectory del kobject padre. Sfruttando questo
file system, l'amministratore di sistema potrà impostare gli attributi
relativi alle periferiche del proprio computer e quindi configurarlo
al meglio.
Se si è connessi ad una rete e si desidera accedere a file residenti su altre macchine come se fossero locali, si può utilizzare il file system di rete nfs. Tutte le macchine interessate all'esportazione dei propri dati, devono eseguire un processo demone che sappia gestire il protocollo di condivisione remota dei file. Per lo scopo di questa tesi è importante evidenziare che il demone può esistere sia a livello kernel che a livello utente. Perciò nella sezione 3.5 verranno approfonditi tentativi di gestione dei file system virtuali in spazio utente basandosi su un server nfs.
È nel senso dei tre esempi fin qui presentati che nell'introduzione di questo capitolo gli pseudo file system sono visti come metodologia di accesso a dati specifici.