Full virtualization

Questo approccio alla virtualizzazione è nato dall’impossibilità di virtualizzare alcune istruzioni a causa dei limiti dell’architettura hardware.
Per questo motivo solo le istruzioni virtualizzabili sono eseguite senza manipolazione da parte del programma di gestione delle macchine virtuali, mentre le altre devono essere gestite diversamente.

L’espressione Full virtualization potrebbe far intendere che la virtualizzazione sia completa per tutti i [ad#midarticlequadr]componenti dell’architettura, ma in effetti l’espressione viene adoperata impropriamente e indica la tecnica per virtualizzare che fa uso della traduzione binaria. La Full virtualization è stata implementata in software per piattaforma x86 precedenti all’introduzione delle estensioni per la virtualizzazioni come VT-X e AMD-V.

I software di full virtualization operano in due modi: alternando la tecnica di traduzione binaria ed esecuzione diretta.

La traduzione binaria (o riscrittura binaria) prevede che il flusso delle istruzioni sia analizzato dal programma di virtualizzazione alla ricerca di particolari istruzioni critiche (sensibili non privilegiate),  ossia istruzioni che, come si vedrà in dettaglio più avanti, richiederebbero di essere eseguite con particolari privilegi (kernel mode) ma non generano, per limiti intrinseci del processore, un’eccezione (trap) se la loro esecuzione viene richiesta in un contesto non privilegiato.
Queste istruzioni critiche, vengono modificate (ad. es. con Vmware ESX) in modo da poter essere eseguite dal VMM con i corretti privilegi: la macchina virtuale non può operare in kernel mode ma deve lasciare che il VMM agisca per essa.
Un programma di virtualizzazione che sfrutta la traduzione binaria funziona similmente ad un debugger; utilizza le stesse funzioni implementate per il controllo del codice sorgente.
Inserisce dei breakpoint dove ci sono istruzioni critiche per la virtualizzazione e le emula.
Una macchina virtuale viene eseguita su un interprete invece che direttamente sulla CPU, l’interprete può così risolvere i problemi dovuti a operazioni che ostacolano la virtualizzazione.
A differenza di altri approcci alla virtualizzazione (come la paravirtualizzazione) il codice di un’ applicazione o del kernel guest non deve essere modificato per poter interagire correttamente con le risorse del sistema.

Sfortunatamente la traduzione binaria peggiora le performance soprattutto durante attività intensa di I/O: le prestazioni sono generalmente tra 80-97% di quelle del computer ospitante.

virtual machine

Articolo precedente

Microsoft Virtual Server
virtual machine

Articolo successivo

VMware vSphere