# Virtualització x86

La virtualització x86 és l'ús de capacitats de virtualització assistides per maquinari en una CPU x86/x86-64.
A finals de la dècada de 1990, la virtualització x86 es va aconseguir mitjançant tècniques de programari complexes, necessàries per compensar la manca de capacitats de virtualització assistides per maquinari del processador alhora que s'aconseguia un rendiment raonable. El 2005 i el 2006, tant Intel (VT-x) com AMD (AMD-V) van introduir un suport limitat de virtualització de maquinari que va permetre un programari de virtualització més senzill però oferia molt pocs avantatges de velocitat. Un major suport de maquinari, que va permetre millores substancials de velocitat, va venir amb models de processadors posteriors.

## Virtualització basada en programari

La discussió següent se centra només en la virtualització del mode protegit de l'arquitectura x86.
En mode protegit, el nucli del sistema operatiu s'executa amb un privilegi superior, com ara l'anell 0, i les aplicacions amb un privilegi inferior, com l'anell 3. En la virtualització basada en programari, un sistema operatiu amfitrió té accés directe al maquinari mentre que els sistema operatius convidats tenen accés limitat al maquinari, igual que qualsevol altra aplicació del sistema operatiu amfitrió. Un enfocament que s'utilitza en la virtualització basada en programari x86 per superar aquesta limitació s'anomena ring deprivileging, que implica executar el sistema operatiu convidat en un anell superior (menys privilegis) que 0.
Tres tècniques van fer possible la virtualització del mode protegit:
* La traducció binària s'utilitza per reescriure determinades instruccions de l'anell 0 en termes d'instruccions de l'anell 3, com ara POPF, que d'altra manera fallarien en silenci o es comportarien de manera diferent quan s'executaven per sobre de l'anell 0, fent impossible la virtualització clàssica de trampa i emulació. Per millorar el rendiment, els blocs bàsics traduïts s'han d'emmagatzemar a la memòria cau d'una manera coherent que detecti l'aplicació de pedaços de codi (utilitzat en VxD, per exemple), la reutilització de pàgines per part del sistema operatiu convidat o fins i tot el codi que s'automodifica.
* S'han d'ocultar diverses estructures de dades clau utilitzades per un processador. Com que la majoria dels sistemes operatius utilitzen memòria virtual paginada, i concedir al sistema operatiu convidat accés directe a la MMU suposaria la pèrdua de control per part del gestor de virtualització, part del treball de l'MMU x86 s'ha de duplicar al programari per al sistema operatiu convidat mitjançant una tècnica. conegudes com a taules de pàgines d'ombra. Això implica negar al sistema operatiu convidat qualsevol accés a les entrades reals de la taula de pàgines capturant els intents d'accés i emulant-los en el seu lloc al programari. L'arquitectura x86 utilitza l'estat ocult per emmagatzemar els descriptors de segment al processador, de manera que un cop els descriptors de segment s'han carregat al processador, la memòria des de la qual s'han carregat es pot sobreescriure i no hi ha manera de recuperar els descriptors del processador.. Les taules de descriptors d'ombra s'han d'utilitzar per fer un seguiment dels canvis fets a les taules de descriptors pel sistema operatiu convidat.
* Emulació de dispositius d'E/S: els dispositius no compatibles amb el sistema operatiu convidat han de ser emulats per un emulador de dispositius que s'executi al sistema operatiu amfitrió.
Aquestes tècniques comporten una certa sobrecàrrega de rendiment a causa de la manca de suport de virtualització MMU, en comparació amb una màquina virtual que s'executa en una arquitectura virtualitzable de forma nativa com l'IBM System/370. $^{:10}$
En els mainframes tradicionals, el clàssic hipervisor tipus 1 era autònom i no depenia de cap sistema operatiu ni executava cap aplicació d'usuari. En canvi, els primers productes de virtualització x86 estaven dirigits a ordinadors d'estació de treball i executaven un sistema operatiu convidat dins d'un sistema operatiu amfitrió incrustant l'hipervisor en un mòdul del nucli que funcionava sota el sistema operatiu amfitrió (hipervisor tipus 2).

## Virtualització assistida per maquinari

El 2005 i el 2006, Intel i AMD (treballant de manera independent) van crear noves extensions de processador per a l'arquitectura x86. La primera generació de virtualització de maquinari x86 va abordar el problema de les instruccions privilegiades. El problema del baix rendiment de la memòria del sistema virtualitzat es va abordar amb la virtualització MMU que es va afegir al chipset més tard.

### Unitat central de processament
#### Mode virtual 8086

Basant-se en experiències doloroses amb el mode protegit 80286, que per si sol no era prou adequat per executar bé aplicacions DOS concurrents, Intel va introduir el mode 8086 virtual al seu xip 80386, que oferia processadors 8086 virtualitzats als xips 386 i posteriors. El suport de maquinari per virtualitzar el propi mode protegit, però, va estar disponible 20 anys després.

#### Virtualització AMD (AMD-V)

AMD va desenvolupar les seves extensions de virtualització de primera generació amb el nom en codi "Pacifica", i inicialment les va publicar com AMD Secure Virtual Machine (SVM), però més tard les va comercialitzar amb la marca registrada AMD Virtualization, abreujada AMD-V.
El 23 de maig de 2006, AMD va llançar l'Athlon 64 ("Orleans"), l'Athlon 64 X2 ("Windsor") i l'Athlon 64 FX ("Windsor") com els primers processadors AMD a donar suport a aquesta tecnologia.

#### Virtualització Intel (VT-x)

Anteriorment anomenat "Vanderpool", VT-x representa la tecnologia d'Intel per a la virtualització a la plataforma x86. El 13 de novembre de 2005, Intel va llançar dos models de Pentium 4 (Model 662 i 672) com els primers processadors Intel amb suport VT-x. El senyalador de la CPU per a la capacitat de VT-x és "vmx"; a Linux, això es pot comprovar mitjançant /proc/cpuinfo, o a macOS mitjançant sysctl machdep.cpu.features.

#### Unitat de processament gràfic

La virtualització gràfica no forma part de l'arquitectura x86. La tecnologia de virtualització gràfica d'Intel (GVT) proporciona virtualització gràfica com a part d'arquitectures gràfiques de generació més recents. Tot i que les APU d'AMD implementen el conjunt d'instruccions x86-64, implementen arquitectures gràfiques pròpies d'AMD (TeraScale, GCN i RDNA) que no admeten la virtualització gràfica. Larrabee era l'única microarquitectura gràfica basada en x86, però probablement no incloïa suport per a la virtualització gràfica.

#### Chipset

La virtualització de memòria i E/S la realitza el chipset. Normalment, aquestes funcions han de ser habilitades per la BIOS, que ha de ser capaç de suportar-les i també estar configurada per utilitzar-les.

## Referències

* ↑ «Intel Virtualization Technology Processor Virtualization Extensions and Intel Trusted execution Technology» (en anglès). Intel.com, 2007. Arxivat de l'original el 2015-05-21. [Consulta: 12 desembre 2016].
* ↑ «A Comparison of Software and Hardware Techniques for x86 Virtualization» (en anglès). VMware. Arxivat de l'original el 20 agost 2010. [Consulta: 8 setembre 2010].
* ↑ «VMware and Hardware Assist Technology» (en anglès). Arxivat de l'original el 2011-07-17. [Consulta: 8 setembre 2010].
* ↑ Yager, Tom. «Sending software to do hardware's job | Hardware - InfoWorld» (en anglès). Images.infoworld.com, 05-11-2004. Arxivat de l'original el 2014-10-18. [Consulta: 8 gener 2014].
* ↑ «33047_SecureVirtualMachineManual_3-0.book» (en anglès). Arxivat de l'original el 2012-03-05. [Consulta: 2 maig 2010].
* ↑ «Intel platform hardware support for I/O virtualization». Intel.com, 10-08-2006. Arxivat de l'original el 2007-01-20. [Consulta: 4 febrer 2012].