next up previous contents
Next: The Project Up: Soluzioni proposte Previous: Modifiche specifiche alle applicazioni   Indice

Intercettare le chiamate di sistema

Gli attuali sistemi operativi permettono di intercettare le chiamate di sistema a livello utente: un processo può essere informato quando un altro processo entra o esce da specifiche chiamate di sistema. Sebbene inizialmente questa funzionalità sia stata introdotta per esaminare e controllare l'esecuzione di tali chiamate, essa può essere utilizzata per modificarne il comportamento. Questa è l'idea alla base delle implementazioni Ufo[ADAS97] e AVFS [Eat01][Sze].

Ufo (User-level File Organizer), è un interessante tentativo di gestire i file system remoti che risale all'anno 1997. È costituito da un processo a livello utente che provvede a fornire servizi agli altri processi intercettando le chiamate di sistema e dirottandole ad un opportuno gestore. Le applicazioni non si accorgono della presenza di Ufo, ma grazie ad esso possono operare su file remoti come se fossero locali. I due moduli che compongono l'implementazione sono il Catcher ed il modulo Ufo. Il Catcher si occupa di intercettare le chiamate di sistema e di inoltrarle al modulo Ufo.
Quest'ultimo realizza l'astrazione del file system remoto: identifica i file e li trasferisce utilizzando vari plug-in che implementano i protocolli di trasferimento (NFS, HTTP, FTP,...). Al suo interno è presente anche un meccanismo di caching per velocizzare i successivi accessi agli stessi file.

Il Catcher deve esplicitamente agganciarsi al processo che intende usufruire delle sue potenzialità. Sfruttando il file system procfs (vedi sezione 3.1) può comandare al sistema operativo di bloccare il processo in esecuzione non appena si verificano determinati eventi. Una volta che il processo si è fermato, il Catcher può leggere e modificare i parametri delle chiamate di sistema, inoltrare la richiesta al modulo Ufo, inoltrare la chiamata di sistema modificata al kernel, cambiare il risultato ottenuto dal kernel ed infine riattivare il processo bloccato.

AVFS (A Virtual File System) è stato originalmente scritto per i sistemi Solaris e Linux, con lo scopo di esportare moduli di file system virtuali attraverso un'interfaccia implementata da una libreria condivisa. Per utilizzarlo è necessario impostare la variabile d'ambiente $ \texttt{LD\_PRELOAD}$ che permette di intercettare le chiamate di sistema prima che esse siano gestite dalla libreria C e dal kernel. La libreria identificata da $ \texttt{LD\_PRELOAD}$ invia i comandi ad un processo server tramite socket.

Il suo funzionamento era semplice ed efficace su entrambi i sistemi. Tuttavia, con il rilascio della versione 2.1 dei glibc, alcune funzioni vennero collegate staticamente ad altre routine per velocizzarne l'accesso, e così la libreria di precaricamento di AVFS non era più in grado di intercettarle. Inizialmente, l'ideatore di AVFS Miklos Szeredi decise di scrivere un programma per interfacciare la sua libreria al file system CODA chiamando il nuovo programma avfscoda. In questa fase l'implementazione comprendeva parti in spazio utente ed in spazio kernel (che coinvolgevano in particolare il modulo relativo a CODAFS), con i conseguenti svantaggi esaminati.

In seguito Frederik Eaton decise di riportare lo sviluppo di AVFS sulla via originalmente intrapresa dall'autore e pertanto implementò separatamente (anche con l'ausiliio di strumenti automatici) le funzioni che non potevano più essere intercettate. Attualmente AVFS gestisce ben 113 chiamate alla libreria glibc.

I tempi di esecuzione riportati nei test di Ufo [ADAS97] e di AVFS [Eat01] sono accettabili, e pertanto questa tecnica risulta essere molto promettente. Tuttavia come si è visto, le operazioni sul file system non si prestano ad un'interazione pulita con la libreria glibc. Inoltre queste implementazioni rappresentano un distaccamento dalla visione classica di file system: non esistono ad esempio operazioni di mount o unmount e soprattutto, le modifiche di comportamento sono limitate alle applicazioni esplicitamente collegate alle librerie modificate. english


next up previous contents
Next: The Project Up: Soluzioni proposte Previous: Modifiche specifiche alle applicazioni   Indice
2004-11-19