# Virtualizzazione x86

In informatica la virtualizzazione x86 consiste nella creazione di una versione virtuale di una risorsa normalmente fornita fisicamente e appartenente a un sistema ad architettura x86. Qualunque risorsa hardware o software può essere virtualizzata: sistemi operativi, memoria, spazio disco. Ad oggi la virtualizzazione può essere effettuata a livello software e a livello hardware.
Tra gli impieghi della virtualizzazione il più utilizzato è probabilmente la virtualizzazione di sistemi operativi. Via software è necessario un sistema operativo in esecuzione (host) che esegua un software di virtualizzazione che crei ad alto livello le varie virtual machine (guest) che girano come se fossero dei normali programmi e che comunicano con l'hardware solo indirettamente, tramite il software di virtualizzazione che agisce a basso livello. Esempi di software di virtualizzazione sono Bochs, QEMU.
L'architettura x86 non supporta nativamente i requisiti di virtualizzazione di Popek e Goldberg. Ne risulta che è molto difficile implementare una macchina virtuale generale su un processore x86. Recentemente sono state introdotte estensioni che hanno risolto questa ed altre difficoltà sulla virtualizzazione.

## Virtualizzazione x86 via software

L'8 febbraio 1999, VMware introdusse il primo prodotto di virtualizzazione x86, "VMware Virtual Platform", basato su precedenti ricerche dei propri fondatori all'Università di Stanford. VMware e software simili devono impiegare sofisticate tecniche per catturare e virtualizzare l'esecuzione di determinate istruzioni. Queste tecniche offrono minori performance rispetto ad una macchina virtuale in esecuzione su un'architettura virtualizzabile nativamente come IBM System/370 o Motorola MC68020. Kevin Lawton lanciò il progetto Plex86 (denominato originariamente "freemware") per la creazione di un "software libero" di virtualizzazione x86 con il solo supporto a Linux come sistema operativo "ospite", ma prima di questo Lawton pubblicò l'articolo Running multiple operating systems concurrently on an IA32 PC using virtualization techniques, il quale fornisce un'analisi sugli aspetti dell'architettura x86 maggiormente complicati da virtualizzare ed alcune tecniche per superare queste difficoltà. Anche Microsoft offre dei software di virtualizzazione x86, Microsoft Virtual PC e Microsoft Virtual Server, basati sulla tecnologia acquisita da Connectix. Recenti ricerche hanno cercato di migliorare le performance alla virtualizzazione x86 attraverso l'utilizzo di un'interfaccia software per le macchine virtuali che emula l'hardware sottostante. I sistemi operativi sono eseguiti su questa interfaccia, la quale non implementa i set di istruzioni x86 difficili da virtualizzare. Questa tecnica è chiamata paravirtualizzazione. Esempi di utilizzo di questa tecnologia sono Denali, L4, e Xen.

## Virtualizzazione x86 via hardware
### CPU

Intel ed AMD hanno sviluppato indipendentemente le estensioni di virtualizzazione dell'architettura x86. Esse non sono tra loro completamente compatibili, ma supportano grosso modo le stesse istruzioni. Entrambe permettono ad una macchina virtuale di eseguire un sistema operativo ospite senza incorrere in grosse perdite prestazionali causate dall'emulazione via software.

#### AMD virtualization (AMD-V)

L'estensione di virtualizzazione di AMD per l'architettura x86 a 64-bit (AMD64) è denominata AMD Virtualization, conosciuta anche con l'abbreviazione AMD-V o attraverso il nome in codice "Pacifica". I processori AMD che utilizzano il Socket AM2, il Socket S1, e il Socket F supportano la AMD Virtualization. Nel maggio 2006, AMD ha introdotto sul mercato le versioni dei processori Athlon 64 e Turion 64 con supporto a tale tecnologia. È stata annunciata anche la versione del processore Opteron con supporto alla virtualizzazione disponibile per agosto 2006.

#### Intel VT (IVT)

L'estensione di virtualizzazione sviluppata da Intel per le architetture x86 a 32 bit (IA-32) e a 64 bit (EM64T) è denominata IVT (abbreviazione di Intel Virtualization Technology), ed è a volte chiamata con il nome in codice "Vanderpool". IVT è stato ufficialmente lanciato all'Intel Developer Forum Spring 2005 ed è disponibile su tutti i processori Pentium 4 6x2, Pentium D 9x0, Xeon 7xxx, Core Duo e Core 2 Duo, esclusi i T5200, T5500, T6400, E4300, E4400, E4500 ed E4600. Su alcune implementazioni il supporto a Vanderpool può essere disabilitato da BIOS o da EFI.
A titolo di completezza si ricorda che Intel ha inoltre pubblicato le specifiche dell'equivalente di Vanderpool per l'architettura IA-64 (Itanium) il cui nome in codice è "Silvervale".

#### Intel VT-x

Precedentemente denominato in codice "Vanderpool", VT-x rappresenta la tecnologia Intel per la virtualizzazione sulla piattaforma x86. Il 13 novembre 2005, Intel ha rilasciato due modelli di Pentium 4 (Model 662 e 672) come primi processori Intel a supportare VT-x. Il flag della CPU per la capacità VT-x è "vmx"; in Linux, questo può essere controllato tramite /proc/cpuinfo, o in macOS tramite sysctl machdep.cpu.features.
"vmx" sta per Virtual Machine Extensions, che aggiunge dieci nuove istruzioni: VMPTRLD, VMPTRST, VMCLEAR, VMREAD, VMWRITE, VMCALL, VMLAUNCH, VMRESUME, VMXOFF e VMXON. Queste istruzioni consentono di entrare e uscire da una modalità di esecuzione virtuale in cui il sistema operativo guest percepisce se stesso come funzionante con il massimo dei privilegi (anello 0), ma il sistema operativo host rimane protetto.
A partire dal 2015, quasi tutti i nuovi server, i processori Intel desktop e mobile supportano la VT-x, con alcuni dei processori Intel Atom come eccezione principale. Con alcune schede madri, gli utenti devono abilitare la funzione VT-x di Intel nella configurazione del BIOS prima che le applicazioni possano farne uso.
Intel ha iniziato ad includere Extended Page Tables (EPT), una tecnologia per la virtualizzazione delle page-table, a partire dall'architettura Nehalem, rilasciata nel 2008. Nel 2010, Westmere ha aggiunto il supporto per il lancio del processore logico direttamente in modalità reale - una caratteristica chiamata "unrestricted guest", che richiede l'EPT per funzionare.
Dalla microarchitettura di Haswell (annunciata nel 2013), Intel ha iniziato a includere il VMCS shadowing come tecnologia che accelera la virtualizzazione delle macchine virtuali annidate. La struttura di controllo della macchina virtuale (VMCS) è una struttura dati in memoria che esiste esattamente una volta per macchina virtuale, mentre è gestita dalla VMM. Ad ogni cambiamento del contesto di esecuzione tra le diverse macchine virtuali, la VMCS viene ripristinata per la VM corrente, definendo lo stato del processore virtuale della VM. Non appena vengono utilizzate più di una VMM o VMM nidificate, appare un problema simile a quello che ha richiesto la gestione della tabella di ombreggiatura, come descritto sopra. In questi casi, VMCS deve essere ombreggiato più volte (in caso di nesting) e parzialmente implementato nel software nel caso in cui non ci sia un supporto hardware da parte del processore. Per rendere più efficiente la gestione di shadow VMCS, Intel ha implementato il supporto hardware per il VMCS shadowing.

### Chipset

La virtualizzazione della memoria e degli I/O viene eseguita dal chipset. Tipicamente queste caratteristiche devono essere abilitate dal BIOS, che deve essere in grado di supportarle ed essere impostato per utilizzarle.

#### Virtualizzazione I/O di MMU (AMD-Vi e Intel VT-d)

Un'unità di gestione della memoria di input-output (IOMMU) consente alle macchine virtuali guest di utilizzare direttamente le periferiche, come Ethernet, schede grafiche accelerate e controller per dischi rigidi, tramite DMA e interrupt remapping. Questo è talvolta chiamato PCI passthrough.
Una IOMMU consente inoltre ai sistemi operativi di eliminare i buffer di rimbalzo necessari per poter comunicare con le periferiche i cui spazi di indirizzo di memoria sono più piccoli dello spazio di indirizzo di memoria del sistema operativo, utilizzando la traduzione degli indirizzi di memoria. Allo stesso tempo, una IOMMU permette anche ai sistemi operativi e agli hypervisor di impedire che un hardware malevolo o contenente bug comprometta la sicurezza della memoria tramite un attacco DMA.
Sia AMD che Intel hanno rilasciato le loro specifiche IOMMU:
* La tecnologia di virtualizzazione I/O di AMD, "AMD-Vi", originariamente chiamata "IOMMU"
* La "tecnologia di virtualizzazione diretta per I/O" (VT-d) di Intel, inclusa nella maggior parte dei processori Nehalem di fascia alta (ma non tutti) e dei processori Intel più recenti
Oltre al supporto della CPU, sia il chipset della scheda madre che il firmware di sistema (BIOS o UEFI) devono supportare pienamente la funzionalità di virtualizzazione IOMMU I/O per poterlo utilizzare. Solo i dispositivi PCI o PCI Express che supportano il reset del livello funzionale (FLR) possono essere virtualizzati in questo modo, in quanto è necessario per riassegnare varie funzioni dei dispositivi tra macchine virtuali. Se un dispositivo da assegnare non supporta Message Signaled Interrupts (MSI), non deve condividere le linee di interruzione con altri dispositivi perché l'assegnazione sia possibile. Tutti i dispositivi PCI convenzionali instradati dietro un bridge PCI/PCI-X-to-PCI Express possono essere assegnati ad una macchina virtuale guest in una sola volta; i dispositivi PCI Express non hanno tale restrizione.

### Software che utilizza VT

* Collax V-Cube Piattaforma di virtualizzazione, clustering ed alta disponibilità basata su KVM con gestione semplificata tramite interfaccia web.
* KVM Virtual Machine basata su kernel per Linux
* Parallels Workstation ha un hypervisor con il supporto Intel VT-x
* TRANGO real-time embedded hypervisor
* VirtualBox
* VirtualBridges VERDE -
* Virtual PC, della Microsoft
* Virtual Server (anche questa della Microsoft): una futura versione (Virtual Server 2005 R2 SP1, da distribuire nel Q1 2007) supporterà le estensioni Intel VT e AMD Pacifica.
* VMware Workstation su processori Intel, VMware Workstation 5.5 richiede Intel-VT per eseguire sistemi operativi guest a 64-bit. Per i sistemi guest a 32-bit, l'uso della tecnologia VT è possibile ma non è attivo di default, perché per l'attività lavorativa normale è più lento.
* Xen 3.0 utilizza Intel VT per eseguire sistemi operativi guest non modificati. Sia Intel che AMD hanno contribuito a supportare le loro estensioni di virtualizzazione nel monitor di virtual machine Xen, permettendo l'esecuzione di sistemi operativi guest non modificati.