• Non ci sono risultati.

3.3 Tracciamento delle invocazioni

3.3.4 Esempi di strumenti di tracing: strace e ltrace

Per completare la discussione dei problemi posti dal tracciamento, presentia- mo due strumenti comunemente utilizzati per raccogliere informazioni sul- l’esecuzione di un processo o di un’applicazione e che sfruttano la chiamata ptrace. Di seguito, verranno descritte le loro principali funzionalit`a e opzio- ni.

strace `e uno strumento di debugging per Linux, usato per monitorare le chiamate di sistema invocate e i segnali ricevuti da un processo. Lo stru- mento sfrutta l’interfaccia ptrace per interagire con il kernel per fermare un processo ogni volta che questo invoca o termina una chiamata di siste- ma. Sostanzialmente strace `e pensato per l’investigazione di problemi che riguardano l’interazione con il sistema operativo. Ci`o non implica necessa- riamente che il problema sia interno al sistema stesso, ma che esso ne sia in qualche modo coinvolto. Un tipico esempio `e quello di un processo che fallisce perch´e non pu`o allocare memoria. In un caso del genere, la traccia delle chiamate di sistema invocate dal processo pu`o permettere di risalire alla causa del problema. La strace notifica ogni volta che il processo traccia- to inizia o termina una chiamata di sistema. `E possibile specificare diverse opzioni per diversi tipi di investigazione, come:

• tracciare un processo e tutti i figli che genera;

• associare un timestamp ad ogni riga di output, utile per individuare le

cause di degrado delle prestazioni;

• tracciare processi gi`a in esecuzione, tramite il pid del processo che vo-

gliamo tracciare.

Il funzionamento di ltrace `e analogo a quello della strace, ma esso `e usato principalmente per tracciare invocazioni a funzioni di libreria invece che a chiamate di sistema. ltrace sfrutta la ptrace per inserire dei breakpoint all’invocazione ed all’uscita di ogni chiamata. `E uno strumento molto utile, ma, cos`ı come strace, ha problemi di prestazioni.

VIRTUALIZZAZIONE E XEN

Il concetto di virtualizzazione risale agli anni 60, quando per la prima volta venne introdotta la nozione di macchina virtuale come interfaccia software per un insieme di funzioni implementate da una macchina fisica. L’appli- cazione di questo concetto alle risorse, ha portato ai sistemi time sharing, dove veniva utilizzato per gestire la condivisione di risorse hardware tra i vari processi in esecuzione per quanti di tempo. Le prime implementazioni della virtualizzazione riguardavano solamente le risorse di un sistema, intese come componenti hardware, quali dischi e periferiche.

Questo concetto `e stato ripreso e sviluppato alla fine degli anni 90 e ha riguardato in massima parte la virtualizzazione legata ai server [41]. Grazie alla continua diffusione della virtualizzazione, attualmente la tecnologia `e applicata anche ad aspetti pi`u diversi dell’informatica ed esistono sempre pi`u applicazioni e sistemi che supportano questa tecnica, come, ad esempio la Java Virtual Machine. Una possibile definizione di virtualizzazione, molto generale, `e la seguente [51]:

Figura 4.1: Architettura virtualizzata.

hardware di un computer tra pi`u istanze di esecuzione, applicando concetti o tecnologie come partizionamento hardware o software, time sharing, emulazione, quality of service. Ognuna di queste istanze verr`a indicata nel seguito come macchina virtuale (VM). Concettualmente, la virtualizzazione `e molto simile all’emulazione, ma mentre l’emulazione ha come obiettivo la definizione di una interfaccia diversa da quella originale, la virtualizzazione `e adottata quando interessa eseguire concorrentemente due o pi`u istanze di uno stesso sistema non necessariamente diverso da quello originale.

Nei moderni sistemi operativi, la virtualizzazione ha molteplici campi di applicazione. Memoria e CPU vengono infatti virtualizzati e condivisi tra le applicazioni per fare s`ı che le risorse a disposizione vengano sfruttate al meglio, dando inoltre ad ogni sistema l’illusione di essere l’unico in esecuzione. Anche le risorse hardware vengono spesso virtualizzate dal sistema ope- rativo. Ad esempio, le interfacce di rete vengono gestite in modo da permet- terne l’accesso a pi`u programmi in modo concorrente, cos`ı come i dispositivi di input e video.

Questi sono solo alcuni semplici esempi di forme di virtualizzazione uti- lizzate comunemente nei sistemi odierni, che mostrano l’utilit`a di questa tecnologia anche in contesti molto generali.

4.1

Virtual Machine Monitor

Il Virtual Machine Monitor (VMM) `e un livello software intermedio che per- mette di eseguire concorrentemente pi`u sistemi operativi sulla stessa macchi- na fisica in modo indipendente ed isolato. Questo software di virtualizzazione, detto anche Hypervisor, ha il compito di creare, gestire e controllare le VM.

Si possono individuare due tipi principali di VMM (fig. 4.2):

a. Unhosted VMM (Type-I VMM ): il software di virtualizzazione si in- terpone tra il livello hardware/firmware della macchina ed il sistema operativo. Xen `e un esempio di questa tecnologia;

b. Hosted VMM (Type-II VMM ): il software di virtualizzazione `e a sua volta un processo all’interno del sistema operativo. Il VMM si interpone tra il sistema operativo e le applicazioni che esso esegue. User Mode

Linux (UML) [14] `e un esempio di questa tecnologia.

Il VMM `e in grado di gestire lo stato di ogni sistema operativo in esecuzio- ne nelle VM, in modo simile a come un sistema operativo tradizionale tiene traccia dello stato dei processi. Infatti, il VMM pu`o creare pi`u macchine virtuali su una singola macchina reale e permette di eseguire i programmi scritti per la macchina fisica, poich´e esporta la stessa interfaccia definita dal livello hardware sottostante. Quindi, un componente software eseguito su una macchina virtuale si comporta come se fosse eseguito direttamente sul- l’architettura fisica e ne avesse pieno controllo. Per gli Unhosted VMM, la

Figura 4.2: Tipi di VMM: Hosted VMM (a); Unhosted VMM (b). performance effettiva di un sistema guest `e molto vicina a quella originale, cio`e a quella che si pu`o ottenere senza utilizzare il software di virtualizzazio- ne. L’interfaccia virtuale `e identica, o molto simile, a quella reale e questo permette di ridurre l’overhead dovuto al trasferimento delle richieste tra le due interfacce. Il VMM interviene solamente quando necessario per mantene- re il controllo della macchina virtuale, ad esempio per garantire l’isolamento tramite la gestione degli spazi di indirizzamento del guest e dei processi in esecuzione. Negli altri casi, la VM utilizza le risorse in modo diretto poich´e le istruzioni non privilegiate possono essere eseguite direttamente sulla mac- china reale. Inoltre, la dimensione ridotta, in termini di numero di istruzioni, di un VMM rispetto ad un sistema operativo, rende il VMM stesso pi`u effi- ciente nell’esecuzione delle operazioni e permette di verificarne formalmente la correttezza.

Documenti correlati