La virtualizzazione consente a un singolo computer “reale” di ospitare più computer “virtuali”, chiamati macchine virtuali. Ciascuna macchina virtuale è un computer “virtuale” in cui è possibile eseguire un proprio sistema operativo e dei propri servizi e applicazioni.
Questa tecnologia ha più di 40 anni.
La virtualizzazione introduce importanti vantaggi:
- forte isolamento tra le macchine (isolamento dei malfunzionamenti)
- minore spazio occupato
- minore consumo
- minore calore da dissipare
- maggiore manutenibilità
- possibilità di creare dei checkpoint (punti di ripristino)
- possibilità di far girare applicazioni legacy su ambienti obsoleti
- possibilità di effettuare test delle applicazioni su differenti sistemi operativi senza disporre dell’hardware fisico necessario
Esistono due differenti approcci per il monitor delle macchine virtuali :
- hypervisor di tipo 1 : Immagina che il “software di virtualizzazione” sia fuso insieme al sistema operativo principale del computer. Non è un programma che apri e chiudi, ma è parte delle fondamenta stesse del sistema. Quando crei una macchina virtuale (es. Windows dentro Linux), il sistema principale la gestisce con la stessa naturalezza e velocità con cui gestisce un normale programma (processo). È molto efficiente perché ha accesso diretto all’hardware (gira in “modo kernel”).
- hypervisor di tipo 2 : Qui il software di virtualizzazione è un normale programma (come Word o Chrome) che installi sopra il tuo sistema operativo. Quando la macchina virtuale vuole fare qualcosa (es. calcolare 2+2), questo programma intercetta la richiesta, la “traduce” in un linguaggio che il computer reale può capire e poi gliela passa. È come avere un interprete simultaneo.
- Nota tecnica: Per non essere troppo lento, questo interprete non traduce parola per parola, ma legge intere frasi (frammenti di codice) e le ottimizza al volo. Questo metodo è famoso perché permetteva di fare virtualizzazione anche sui vecchi computer che non avevano l’hardware adatto (come i vecchi Pentium).

l Sistema Operativo della VM (Guest OS) crede di essere il “padrone” dell’hardware (Kernel Mode), ma in realtà gira come un normale programma (User Mode) sotto il controllo dell’Hypervisor. Inoltre ogni CPU possiede il proprio set di istruzioni.



Una macchina è virtualizzabile (tipo 1) se e solo se tutte le istruzioni sensibile sono privilegiate.
A differenza del IBM/370 che è virtualizzabile (tipo 1), l’Intel 386 possiede delle istruzioni non privilegiate che sono ignorate se eseguite in modalità utente (come ad esempio la POPF). Quindi l’Intel 386 (ed i suoi successori fino al 2005 - tecnologia VT) non possono essere virtualizzati con un hypervisor di tipo 1.
Nel 2005 Intel e AMD introducono la virtualizzazione sulle loro CPU e rendono possibile il monitor delle macchine virtuali di tipo 1. Sulle CPU Intel Core 2 la tecnologia è chiamata Virtualization Technology (o VT) mentre sulle macchina AMD Pacific CPU è chiamata Secure Virtual Machine (SVM).
Anche se entrambe le tecnologie si ispirando al funzionamento del IBM/370, hanno delle piccole differenze. Infatti l’idea alla base è creare dei contenitori all’interno dei quali eseguire le macchine virtuali. Quando in un computer si avvia un OS guest, questo continua a funzionare fino a che non solleva un’eccezione e passa un trap all’hypervisor.
Hypervisor di tipo 1
Nel hypervisor di tipo 1 la macchina virtuale è eseguita come un processo utente in modalità utente, quindi non può eseguire istruzioni sensibili anche se pensa si essere in modalità kernel (modalità virtuale del kernel).

Quando il OS guest esegue una istruzione sensibile :
- se la CPU non ha la VT, allora la virtualizzazione non è possibile
- altrimenti avviene una trap nel kernel e l’hypervisor può vedere se l’istruzione è stata inviata da:
- VM del OS guest, allora la segue
- programma utente, allora emula il comportamento dell’hardware reale
Hypervisor di tipo 2
Nell’hypervisor di tipo 2 è un programma utente che interpreta le istruzioni della VM e le traduce sul OS della macchina reale. Questo tipo è la soluzione che permette la virtualizzazione alle CPU Intel senza tecnologia VT (es. 386..). VMware è un hypervisor di tipo 2 ed è eseguito come programma utente su un qualsiasi SO host. Quando si avvia per la prima volta, si comporta come un computer senza SO e cerca di installare il SO guest nel suo disco virtuale.
Per eseguire un programma si utilizza una tecnica nota come traduzione binaria :
- esegue la scansione del codice alla ricerca dei blocchi base, cioè quei blocchi che terminano con istruzioni di cambio flusso (es.
JMP,CALL, trap,…) - ricerca nei blocchi le istruzioni sensibili e le traduce in una procedura VMware
- il blocco è messo nella cache di VMware e può essere eseguito alla velocità della macchina fisica (istruzioni tradotte a parte)
Confronto tipo 1 e tipo 2
Negli hypervisor tipo 2 tutte le istruzioni sensibili sono sostituite da chiamate a procedure che ne emulano il comportamento. Il OS guest non invierà mai nessuna istruzione sensibile alla macchina fisica.
L’approccio “trap-and-emulate” (tipo 1) adottato dagli hardware VT genera troppi trap ed un eccessivo overhead di gestione, mentre la traduzione delle istruzioni sensibili è più efficiente. Inoltre alcuni hypervisor di tipo 1 effettuano la traduzione binaria (anche se non serve) comportandosi come quelli di tipo 2.
Paravirtualizzazione
Gli hypervisor tipo 1 e 2 funzionano senza modifiche al SO guest, ma con performance non eccellenti. Un diverso approccio prevede la modifica del codice sorgente del OS guest, ovvero invece di eseguire istruzioni sensibili si effettuano chiamate di procedure definite dall’hypervisor. Quindi l’hypervisor definisce una interfaccia, cioè delle API (Application Program Interface), che i OS guest possono attivare. Questo trasforma di fatto l’hypervisor in un microkernel e il OS guest modificato viene detto paravirtualizzato. Le performance ovviamente migliorano poiché le trap si trasformano in system call.
