# Màquina virtual

En informàtica una màquina virtual és un programari que emula un ordinador i pot executar programes com si fos un ordinador real tot i que està virtualitzat. Aquest programari en un principi va ser definit com "un duplicat eficient i aïllat d'una màquina física". L'accepció del terme inclou màquines virtuals que no tenen cap equivalència directa amb cap maquinari real. Una característica essencial de les màquines virtuals és que els processos que s'executen estan limitats pels recursos i abstraccions proporcionats per elles. Aquests processos no poden escapar d'aquest "ordinador virtual". Un dels usos domèstics més estesos de les màquines virtuals és executar sistemes operatius per "provar". D'aquesta manera podem executar un sistema operatiu que vulguem provar (Linux, per exemple) des del sistema operatiu habitual (Mac OS X per exemple) sense necessitat d'instal·lar directament al ordinador i sense por que es desconfiguri el sistema operatiu primari.

## Tipus de màquines virtuals

Les màquines virtuals es poden classificar en dues grans categories segons la seva funcionalitat i el seu grau d'equivalència a una veritable màquina.
* Màquines virtuals de sistema (en anglès System Virtual Machine)
* Màquines virtuals de procés (en anglès Process Virtual Machine)

### Màquines virtuals de sistema

Les màquines virtuals d'alleujament sistema, també anomenades màquines virtuals del maquinari, permeten a la màquina física subjacent multiplexar entre diverses màquines virtuals, cadascuna executant el seu propi sistema operatiu. La capa de programari que permet la virtualització es el monitor de màquina virtual o "hypervisor". Un monitor de màquina virtual pot executar o bé directament sobre el maquinari o bé sobre un sistema operatiu ("host operating system").
    Aplicacions de les màquines virtuals del sistema
* Diversos sistemes operatius diferents poden coexistir sobre el mateix ordinador, en sòlid aïllament l'un de l'altre, per exemple per provar un sistema operatiu nou sense necessitat de instal directament.
* La màquina virtual pot proporcionar una arquitectura d'instruccions (ISA) que sigui una mica diferent de la veritable màquina. És a dir, podem simular un maquinari inexistent.
* Diverses màquines virtuals (cadascuna amb el seu propi sistema operatiu anomenat sistema operatiu "convidat" o "guest"), poden ser utilitzades per consolidar servidors. Això permet que serveis que normalment s'hagin d'executar en ordinadors diferents per evitar interferències, es puguin executar en la mateixa màquina de manera completament aïllada i compartint els recursos d'un únic ordinador. La consolidació de servidors sovint contribueix a reduir el cost total de les instal·lacions necessàries per mantenir els serveis, ja que permeten estalviar en maquinari.
* La virtualització és una excel·lent opció avui dia, ja que les màquines actuals (Portàtils, taules de treball, servidors) en la majoria dels casos estan sent "sub-utilitzats" (gran capacitat de disc dur, memòria RAM, etc.), Arribant a un ús d'entre 30% a 60% de la seva capacitat. En virtualitzar, la necessitat de noves màquines en una ja existent permet un estalvi considerable dels costos associats (energia, manteniment, espai, etc.).

### Màquines virtuals de procés

Una màquina virtual de procés, de vegades anomenada "màquina virtual d'aplicació", s'executa com un procés normal dins d'un sistema operatiu i suporta un sol procés. La màquina s'inicia automàticament quan es llança el procés que es vol executar i s'atura quan aquest finalitza. El seu objectiu és el de proporcionar un entorn d'execució independent de la plataforma de maquinari i del sistema operatiu, que oculti els detalls de la plataforma subjacent i permeti que un programa s'executi sempre de la mateixa manera sobre qualsevol plataforma.
L'exemple més conegut actualment d'aquest tipus de màquina virtual és la màquina virtual de Java. Una altra màquina virtual molt coneguda és la de l'entorn . Net de Microsoft que es diu "Common Language Runtime".

## Inconvenients de les màquines virtuals

Un dels inconvenients de les màquines virtuals és que afegeixen gran complexitat al sistema en temps d'execució. Això té com a efecte l'alentiment del sistema, és a dir, el programa no arribarà a la mateixa velocitat d'execució que si es fes directament en el sistema operatiu "amfitrió" (host) o directament sobre la plataforma de maquinari. No obstant això, sovint la flexibilitat que ofereixen compensa aquesta pèrdua d'eficiència.

## Tècniques
### Emulació del maquinari subjacent (execució nativa)

Aquesta tècnica s'anomena virtualització completa (full virtualization) del maquinari, i es pot implementar utilitzant un hypervisor de Tipus 1 o de Tipus 2 :
* El tipus 1 s'executa directament sobre el maquinari
* El tipus 2 s'executa sobre un altre sistema operatiu.
Cada màquina virtual pot executar qualsevol sistema operatiu suportat pel maquinari subjacent. Així els usuaris poden executar dos o més sistemes operatius diferents simultàniament en ordinadors "privats" virtuals.
El sistema pioner que va utilitzar aquest concepte va ser la CP-40, la primera versió (1967) de la CP/CMS d'IBM (1967-1972) i el precursor de la família VM d'IBM (de 1972 en endavant). Amb l'arquitectura VM, la major part d'usuaris controlen un sistema operatiu monousuari relativament simple anomenat CMS que s'executa en la màquina virtual VM.
Actualment tant Intel com AMD han introduït prestacions als seus processadors x86 per permetre la virtualització de maquinari.

### Emulació del sistema no natiu

Les màquines virtuals també poden actuar com emuladors de maquinari, permetent que aplicacions i sistemes operatius concebuts per a altres arquitectures de processador es puguin executar sobre un maquinari que en teoria no suporten.
Algunes màquines virtuals emulen maquinari que només existeix com una especificació. Per exemple:
* La màquina virtual P-Code que permetia als programadors de Pascal crear aplicacions que s'executin sobre qualsevol ordinador amb aquesta màquina virtual correctament instal·lada.
* La màquina virtual de Java.
* La màquina virtual de l'entorn . NET.
* Open Firmware
Aquesta tècnica permet que qualsevol ordinador pugui executar programari escrit per a la màquina virtual. Només la màquina virtual en si mateixa ha de ser portada a cadascuna de les plataformes de maquinari.

### Virtualització a nivell de sistema operatiu

Aquesta tècnica consisteix a dividir un ordinador en diversos compartiments independents de manera que en cada compartiment puguem instal·lar un servidor. A aquests compartiments se'ls diu "entorns virtuals". Des del punt de vista de l'usuari, el sistema en el seu conjunt actua com si realment existissin diversos servidors executant-se en diverses màquines diferents. Dos exemples són les zones de Solaris (Solaris Zones) i la tècnica de Micro Partioning de AIX.

## Llista de maquinari suportades per virtualització

* AMD-V (anteriorment anomenat Pacífica)
* ARM TrustZone
* Boston Circuits gCore (grid-on-xip) amb nuclis 16 ARC 750D i mòdul de virtualització de maquinari Time-machine.
* Freescale PowerPC MPC8572 i MPC8641D
* IBM System/370, System/390 i mainframes zSeries
* Intel VT (anteriorment anomenat Vanderpool)
* SPARC de Sun Microsystems

### Descripcions ampliades per a aplicacions de virtualització seleccionades

Els productes de programari següents són capaços de virtualitzar el maquinari de manera que diversos sistemes operatius puguin compartir-lo.
* Adeos és una Capa d'Abstracció de Maquinari que es pugui arrencar com un mòdul del nucli Linux. Això permet la càrrega d'un nucli en temps real com a mòdul, al mateix temps que s'executa Linux, però amb una prioritat més alta.
* Denali utilitza la paravirtualització per proporcionar màquines virtuals d'alt rendiment sobre processadors x86.
* OKL4 utilitza el programari lliure L4 (microkernel) com un hypervisor per a proporcionar una solució de virtualització d'alt rendiment per a sistemes encastats.
* OpenVZ per a Linux
* Parallels
* QEMU pot emular una varietat d'arquitectures de CPU sobre moltes plataformes diferents.
* Virtual Iron
* Virtuozzo
* VMware
* Xen
* Kernel-based Virtual Machine (KVM)

## Referències

* ↑ http://ok-labs.com Arxivat 2007-03-03 a Wayback Machine.

## Vegeu també

* Dalvik
* Virtualització

## Enllaços externs

* Virtualització, Paravirtualització, FullVirtualizacion Totes les Plataformes
* Apunts sobre màquines virtuals de la UNED Arxivat 2011-11-23 a Wayback Machine. (Universitat Nacional d'Educació a Distància (Espanya))
* quetier/papiers/EXPGRID.pdf Comparació de Funcionament entre Xen, UML, vserver i VMWARE (anglès)
* J. L. Medina - vExpert 2009. «Be Virtual, My Friend - Bloc de virtualització» (en castellà).
* Màquines virtuals Linux en línia (anglès)