Hipervisor

miniatura|Arquitectura de Hipervisor Tipo 2 (*hosted hypervisor*).
Un hipervisor (en inglés *hypervisor*) ou **monitor de máquina virtual** (*virtual machine monitor*) é unha capa de software que realiza unha virtualización de hardware, permitindo que este sexa empregado por varios sistemas invitados á vez. Así, diferentes sistemas operativos conviven sobre os mesmos recursos físicos dun ordenador. O termo hipervisor provén de «supervisor», tipicamente asociado a kernels de sistemas operativos.

## Historia 
miniatura|IBM System/360 Mainframe.
Os hipervisores están intimamente ligados ao concepto de virtualización. O nacemento da idea de memoria virtual foi da man do físico alemán Fritz-Rudolf Güntsch na Universidade Técnica de Berlín no ámbito da súa tese de doutoramento (1956). Partir virtualmente o espazo de direccións significaba que o sistema operativo encargábase de xestionar esta paxinación ou partición virtual. En 1961 apareceu o B5000 de Burroughs Corporation, o primeiro ordenador comercial con memoria virtual. A finais dos anos 60 desenvolvéronse os primeiros hipervisores. IBM cumpriu a importante función de lanzar ao mercado sistemas con soporte para memoria virtual. No ano 1965 foi a quenda do System/360 Modelo 67 co sistema operativo CP-40 e, posteriormente, en 1972 continuaron impulsando o concepto de virtualización nos equipos System/370.

A necesidade dos primeiros hipervisores foi froito da redución de costos das empresas. O mainframe era unha computadora centralizada que substituía aos equipos illados de cada departamento da empresa. O tempo compartido entre distintos usuarios do sistema operativo permitía operar sobre un mesmo hardware, e as máquinas virtuais propostas polos enxeñeiros de IBM en Cambridge consolidaron o sistema, que permitía correr múltiples sistemas operativos á vez, cada un deles independente dos demais, tanto que podía colapsar sen afectalos.

Precisamente destes colapsos de sistemas operativos virtuais derivaba unha grande utilidade ao momento depurar programas (*debugging*, en inglés) pois se contaba coa memoria empregada a bo resgardo do hipervisor utilizado, imposibilitando consecuencias máis graves no mainframe.

O primeiro hipervisor como tal foi creado por IBM en 1967, mais a actividade comercial expandiuse especialmente desde 1972 e cambiou drasticamente o mundo da informática.
miniatura|300px|Esquema de máquina virtual.
As máquinas virtuais da época empregaban discos e sistemas de cintas virtuais, como no sistema operativo IBM VM/370. O sistema físico único era divisible en computadoras virtuais completas e distribuía os requisitos dos recursos entre os correspondentes dispositivos físicos. VM/370 de IBM executouse na maioría de mainframes desde 1970, e os únicos límites da virtualización (número de máquinas virtuais) foron a capacidade de proceso. As solucións de ordenador persoal creceron como alternativas para moitos usuarios, pero o PC (*Personal Computer*) non tiña unha solución de virtualización para os produtos da liña x86. O hipervisor VMWare solventou estes problemas a finais dos anos 1990. Aínda que a arquitectura x86 dos PC era particularmente difícil de virtualizar, os grandes fabricantes de microprocesadores como Intel e AMD deseñaron extensións de soporte hardware que facilitaron a incorporación do hipervisor no software de sistema.

En 1999 VMWare distribuíu o produto de virtualización para a familia x86. Posteriormente púidose aplicar a servidores. A tecnoloxía de hipervisor foi adoptada como unha administración de sistemas simplificada, portable e sinxela. Os vendedores de Unix como Sun Microsystems, HP, IBM e SGI continuaron vendendo hardware virtualizado ata a década dos 2000 en sistemas moi eficientes pero, pola contra, extremadamente caros.

## Tipos 
Os hipervisores clasifícanse en dous tipos principais:

### Hipervisor tipo 1 
dereita|miniatura|Hipervisor Tipo 1 (*bare-metal hypervisor*).
Tamén denominado *nativo*, *unhosted* ou *bare metal* (*sobre o metal espido*), é software que se executa directamente sobre o hardware físico do sistema anfitrión. Non necesita dun sistema operativo tradicional para funcionar. Funciona como capa de control principal que xestiona e asigna recursos de hardware ás máquinas virtuais.

* Impacto pequeno (rendemento óptimo).
* Instalado directamente sobre hardware físico.
* Asignación eficiente de recursos.
* Illamento completo entre máquinas virtuais.

Considéranse máis adecuados en contornas de nube e centros de datos empresariais, onde é vital unha xestión de recursos eficiente e un rendemento optimizado.

;Exemplos
* **Microsoft Hypervisor V** (Hyper-V Server).
* **VMWare vSphere/ESXi**.
* **Xen**.

### Hipervisor tipo 2 
miniatura|Hipervisor Tipo 2 (*hosted hypervisor*).
Tamén denominado *hosted* (*hipervisor aloxado)*, executado sobre un sistema operativo tradicional; é dicir, actúa a modo de aplicación. Permite despregar máquinas virtuais dentro do propio sistema operativo anfitrión.

* Impacto superior no rendemento (comparte recursos co sistema operativo anfitrión).
* Instalado sobre un sistema operativo anfitrión.
* Configuración sinxela.

Adecuado para contornas de escritorio como computadores persoais e en escenarios de desenvolvemento de software.

;Exemplos
* **Oracle VirtualBox**.
* **Parallels Desktop**.
* **VMware Workstation**.

### Hipervisor híbrido 
Sistemas como Microsoft Virtual PC e Microsoft Virtual Server 2005 R2 interaccionan directamente sobre hardware pero, ás veces, utilizan servizos directamente sobre o sistema operativo anfitrión. Son casos de hipervisor de tipo híbrido.

## Virtualización 
O concepto de **virtualización** abarca tecnoloxías de simulación de computadoras ou máquinas virtuais sobre un mesmo hardware. 
miniatura|Emulador **QEMU**.
* **Emulación**. Consiste en replicar o comportamento dunha contorna ou sistema diferente partindo de diferentes software e hardware subxacentes. Implica imitar unha plataforma ou arquitectura distinta. O **software de emulador** replica o comportamento dunha contorna de software complexo como un sistema operativo ou unha aplicación. Non obstante, o impacto no rendemento é significativo debido á sobrecarga do proceso de tradución (a contorna emulado tende a ser máis lenta que a contorna nativa). Sistemas como QEMU (emula un sistema operativo dentro doutro), MAME (emula máquinas recreativas), Bochs, Microsoft Virtual PC e Wine funcionan como emuladores.
miniatura|295x295px|Interface gráfica da plataforma de virtualización completa **VirtualBox** de **Oracle**.
* **Virtualización completa**, **Virtualización de hardware** ou **Virtualización nativa**. Técnica robusta que permite crear múltiples contornas virtuais illadas con instancias completas do sistema operativo. O hipervisor actúa como capa intermedia entre hadware anfitrión e máquinas virtuais, asignando recursos de hardware, CPU, memoria, red e almacenamento a cada instancia. Windows, Linux e sistemas herdados poden coexistir nun mesmo dispositivo. Adoitan ofrecer capacidades de migración en vivo, facilitando o equilibrio de carga e o mantemento. VMWare vSphere/ESXi, Microsoft Hyper-V, Oracle VM Virtualbox, Xen e KVM (máquina virtual baseada no núcleo de linux) son plataformas de virtualización completa.
* **Virtualización parcial** ou paravirtualización. Ponte entre a virtualización completa e a execución directa en hardware físico. Un sistema operativo invitado modificado colabora estreitamente co hipervisor ou sistema anfitrión. O rendemento mellora ao reducir a sobrecarga asociada á emulación de hardware. Comunicar de forma directa as máquinas virtuais e o sistema anfitrión optimiza o uso compartido de recursos, axilizando as operacións E/S (entrada-saída) e transferencias de datos. Xen é un exemplo destacado de paravirtualización, así como o módulo KVM, que pode funcionar tanto en virtualización completa como en parcial.
* miniatura|Diagrama da arquitectura do xestor de *contedores* **Docker**.**Virtualización de sistema operativo** (contedores). A *contenedorización* refírese a crear instancias illadas do espazo de usuario operando sobre un mesmo sistema anfitrión. A diferenza dos métodos tradicionais (os cales esixen crear instancias completas de sistemas operativos sobre unha máquina física) a *contenedorización* baséase nas dependencias entre sistemas operativos (contedores que comparten o mesmo kernel, por exemplo) e constrúe unha solución flexible e portable. O kernel compartido é a base da virtualización, pois compartir o núcleo elimina a necesidade de replicar o sistema operativo con cada nova instancia. Os contedores íllanse a nivel de aplicación, cada un independente dos demais, e as aplicacións encapsuladas en cada contedor pódense migrar facilmente. A plataforma que popularizou esta virtualización foi Docker con ferramentas para xestionar contedores, mais LXC (*Linux Containers*) é unha alternativa de código aberto, e plataformas como Kubernetes facilitaron a *orquestración* de contedores (proceso de automatización no escalado e xestión de aplicacións).

## Incidencias de seguridade 
Os tipos de incidencias de seguridade máis importantes referidas á virtualización con hipervisores son:

* **Escape da máquina virtual** *(VM Escape)*. Provoca interaccións indesexadas entre a máquina virtual "encapsulada" e o hipervisor.
* **Erros de controladores de hardware virtual** que permiten tomar o control doutras máquinas virtuais instanciadas no hipervisor.

## Vantaxes e desvantaxes 
;Vantaxes dos hipervisores
* Abstracción de recursos hardware repartidos entre diferentes máquinas virtuais.
* Capacidade de migración.
* Encapsulamento (sistemas invitados illados).

;Desvantaxes dos hipervisores
* Sobrecarga de recursos (especialmente en termos de CPU, memoria e E/S).
* Degradación no rendemento en comparación coa execución directa no hardware físico.
* Complexidade de xestión (plataformas como Docker e Kubernetes cumpren o papel de facilitar o mantemento das máquinas virtuais, especialmente en infraestruturas grandes).

## Notas