La virtualizzazione dei sistemi operativi – Capitolo 2.2
ESX Server virtualizza CPU, memoria, dischi e rete. Di seguito si descrivono i metodi di virtualizzazione di ciascuna risorsa.
2.2.1 Virtualizzazione della CPU
Il virtual machine monitor (vmm) presenta a ciascuna macchina virtuale la propria CPU, o il proprio set di CPU, che da ora in avanti chiameremo CPU virtuale per distinguerla dalla CPU fisica dell’host. La CPU virtuale è una vera e propria CPU, dotata di registri e control set che riproduce la CPU fisica presente sull’host.
Per capire il funzionamento del vmm può essere utile riprendere alcuni concetti di come opera l’architettura IA32.
Nella IA32 esiste un meccanismo di protezione che prevede quattro livelli di privilegio. Questi livelli vengono denominati ring e sono numerati da 0 a 3.
Fig. 2.2: I protection ring dell’architettura IA32
La classificazione riportata nella figura 2.2 risponde alle richieste architetturali di Intel. Tuttavia nella pratica i componenti del sistema operativo, compresi servizi e device driver, sono eseguiti nel ring 0 e le applicazioni nel ring 3.
I ring 1 e 2 generalmente non sono utilizzati. Mi risulta che gli unici sistemi operativi che facevano uso dei ring 1 e 2 fossero OS/2 e Novell.
Nell’ambiente virtualizzato con VMware ESX il ring 0 è riservato al vmkernel dato che alcune istruzioni privilegiate possono essere invocate solo dal suo interno, mentre il sistema operativo guest è spostato su ring 1, tecnica denominata De-privileging.
Se la macchina virtuale tenta di eseguire un’istruzione privilegiata, viene invocata una trap e viene presa in carico dal vmm che la gestisce nel modo opportuno. Tuttavia l’approccio di gestione della trap non è sufficiente a risolvere tutti i casi, dato che nell’architettura IA32 ci sono delle istruzioni che possono essere lanciate da ring meno privilegiati che accedono direttamente ai registri della CPU senza sollevare trap. Queste istruzioni “pericolose” generano un grosso overhead di elaborazione per il vmm che utilizza una tecnica di traduzione chiamata binary translation. Essa consiste nel sostituire l’istruzione invocata dal sistema operativa guest con un’altra semanticamente equivalente.
In contrasto, le istruzioni che non creano alcuna controindicazione e possono essere eseguite dal vmm direttamente sul processore fisico. Questa tecnica, detta direct execution , crea un overhead minimo garantendo performance della macchina virtuale quasi uguali sistema operativo installato sulla macchina fisica (native performance).
Fortunatamente nella maggioranza dei casi le istruzione non privilegiate e il codice applicativo vengono eseguite in modalità direct execution garantendo alla macchina virtuale ottime performance. (vedi Appendice)
È importante sottolineare che la tecnica del direct execution impone il limite di portabilità “a caldo” delle macchine virtuali tra host fisici che condividono lo stesso instruction set. È impossibile ad esempio garantire la migrazione di una macchina virtuale creata per una ambiente con processore Intel su un ambiente con processore AMD.