Suddivisione client/server

Il sistema VFS si compone fondamentalmente di 3 parti:

La comunicazione avviene tramite socket: sia il client che il server aprono socket in lettura e scrittura, per scambiarsi stringhe contenenti messaggi. Le stringhe comunicate dal client al server contengono i comandi da eseguire e i loro argomenti, mentre quelle che il server comunica al client sono formate dal codice di uscita del comando eseguito (1 in caso di errore, 0 in caso di esecuzione corretta), seguite dall'ouput o dal messaggio di errore del comando stesso.

Tutte le stringhe che vengono utilizzate nello scambio di messaggi sono allocate in memoria dinamica, per permettere una maggiore flessibilità in termini di dimensione, e una gestione più efficiente della memoria occupata.

Durante la creazione delle socket viene impostato anche un timeout: in questo modo se un tentativo di lettura da una socket si protrae per un tempo eccessivo, viene interrotto, e viene notificato all'utente.

Il client si occupa inoltre di interpretare e stampare sul terminale tutti gli output del server, compresi eventuali messaggi di errore.

Il funzionamento del server è molto più complesso: una volta dato il comando vd start, per inizializzare il vfs, il server viene avviato, e si occupa subito di eseguire la creazione del file system (utilizzando una chiamata alla funzione create-vfs). A questo punto si mette in ascolto per ricevere un comando dal client; ricevuto questo inserisce il comando e i suoi argomenti in un array di stringhe bidimensionale, che verrà utilizzato sia per scegliere la funzione giusta da eseguire, sia per passare ad essa gli argomenti stessi. Il server gestisce anche tutti i segnali di terminazione che possono giungere dal sistema, e prima di cessare l'esecuzione elimina il file del disco virtuale creato.


Segue la figura 3.2 che semplifica graficamente la situazione:

Figura 3.2: Schema grafico dell'architettura client/server
Image struttura




Lorenzo Baloci, Daniele Turato, Alessio Zennaro - Settembre 2006