# Hipervisor

Un hipervisor (en inglés hypervisor) o monitor de máquina virtual (virtual machine monitor) es una capa de software para realizar una virtualización de hardware que permite utilizar, al mismo tiempo, diferentes sistemas operativos (sin modificar o modificados, en el caso de paravirtualización) en una misma computadora. Es una extensión de un término anterior, «supervisor», que se aplicaba a los kernels de los sistemas operativos de computadora.

## Historia

Los hipervisores fueron originalmente desarrollados a finales de 1960 y principios de los años 1970 cuando, para reducir costos, se consolidaban varias computadoras aisladas de diferentes departamentos de la empresa en una sola y más grande —el mainframe— capaz de servir a múltiples sectores. El primer uso dado a estos equipos fue el tiempo compartido para muy distintos usuarios, siempre compartiendo un sistema operativo complejo. Los ingenieros de IBM en Cambridge fueron los primeros en resolver este problema, otorgando a cada usuario una máquina virtual con un sencillo sistema operativo. Al correr múltiples sistemas operativos a la vez, el hipervisor permite la consolidación, dando robustez y estabilidad al sistema; aun si un sistema operativo colapsa, los otros continúan trabajando sin interrupción.
Precisamente de estos colapsos de sistemas operativos virtuales derivaba una gran utilidad al momento de depurar pues se contaba con la memoria usada a buen resguardo del hipervisor utilizado.
La primera computadora diseñada específicamente para virtualización fue el mainframe IBM S/360 Modelo 67 en 1964, con el sistema operativo CP-40. Esta característica de virtualización ha sido un estándar de la línea que siguió IBM S/370 y sus sucesoras, incluyendo la serie actual.
En 1967 el primer hipervisor es creado por IBM y al año siguiente fue mejorado su desempeño en una segunda versión. El año 1972 marca el comienzo del uso comercial de esta tecnología desarrollada por IBM.
Uno de los primeros hipervisores para PC fue Vmware, desarrollado a finales de los años 1990. La arquitectura x86, usada en la mayoría de los sistemas de PC, es particularmente difícil de virtualizar. Pero los grandes fabricantes de microprocesadores, como AMD e Intel, desarrollaron extensiones para tratar las partes de la arquitectura x86 que son más difíciles o ineficientes de virtualizar, proporcionando un apoyo adicional al hipervisor por parte del hardware. Esto permite un código de virtualización más simple y un mejor rendimiento para una virtualización completa.
La necesidad actual de consolidar diferentes servidores y de lograr una administración simplificada han hecho renovar el interés en la tecnología de los hipervisores. La inmensa mayoría de los vendedores de sistemas Unix, incluyendo Sun Microsystems, HP, IBM y SGI han estado vendiendo hardware virtualizado desde la década de 2000. Estos sistemas son eficientes pero extremadamente costosos.

## Tipos

Los hipervisores, según como se ejecutan, pueden clasificarse en varios tipos:

### Hipervisor tipo 1

También denominado nativo, unhosted o bare metal (sobre el metal desnudo), es software que se ejecuta directamente sobre el hardware físico, para ofrecer la funcionalidad descrita. Las máquinas virtuales se ejecutan sobre él y todos los accesos directos a hardware son controlados por el hipervisor. Algunos ejemplos de este tipo son Proxmox VE, Xen, Kernel-based Virtual Machine (KVM), Microsoft Hyper-V, VMware ESXi, Oracle VM Server.

### Hipervisor tipo 2

También denominado hosted, sobre el hardware físico se ejecuta un sistema operativo anfitrión el cual ejecuta el hipervisor que es una aplicación de virtualización que se encarga de ofrecer la funcionalidad descrita. Algunos ejemplos de este tipo son VMware Workstation, Parallels Desktop, VirtualBox, VMware Player, QEMU y Bhyve.

### Hipervisor híbrido

Sobre el hardware se ejecuta un sistema operativo anfitrión y el hipervisor. El hipervisor a veces interacciona directamente sobre el hardware pero otras veces usa servicios que le proporciona el sistema operativo anfitrión. Ejemplo de estos sistemas son Microsoft Virtual PC y Microsoft Virtual Server 2005 R2.

## Formas de virtualizar

El hipervisor se basa en el concepto de la virtualización, el cual hace referencia a las tecnologías que permiten abstraer las cualidades físicas de un sistema para poder simular el funcionamiento de varias computadoras sobre un hardware.
Las formas en las que el hipervisor realizar su trabajo puede ser:
* Virtualización completa, Virtualización de hardware o Virtualización nativa. El hipervisor simula un hardware suficiente para permitir un sistema operativo no adaptado que es ejecutado de forma aislada. De esta forma pueden virtualizar VMware Workstation, VMware ESXi, VMware vSphere, Virtualbox, Kernel-based Virtual Machine (KVM). Microsoft Hyper-V, Microsoft Virtual Server, Proxmox VE y Xen. A veces estos sistemas son asistidos por el hardware aprovechando instrucciones incorporadas a las nuevas generaciones de microprocesadores como las VT-x de Intel o AMD-V de AMD para ejecutar el hipervisor en el máximo nivel de acceso a la CPU (Anillo -1) y los invitados se ejecutan a un nivel inferior (Anillo 0). De esta forma el hipervisor no tiene que emular el anillo 0 para el sistema operativo huésped ni hay que recompilar el sistema operativo huésped para obligar a que se ejecute fuera de anillo. A las máquinas virtuales ejecutadas con asistencia por hardware a veces se las llama HVMs (del inglés Hardware-assisted Virtual Machine). Algunos de los sistemas que realizan virtualización completa (ej. Xen) obligan a usar virtualización asistida por hardware
* Virtualización parcial o paravirtualización. El hipervisor ofrece una interfaz especial para acceder a los recursos. Esto obliga a que el sistema operativo de la máquina virtual tenga que adaptarse usando llamadas especiales (hypercalls). Es lo que usan Denali, User Mode Linux (en él el núcleo del sistema operativo se transforma en una aplicación a nivel de usuario que emula el hardware y hace de hipervisor). Xen también puede virtualizar usando paravirtualización (además de virtualización completa). A las máquinas virtuales ejecutadas con técnicas de paravirtualización a veces se las llama PVMs (del inglés ParaVirtual Machine).
* Emulación. El hipervisor imita o suplanta vía software una arquitectura al completo (procesador, memoria, conjunto de instrucciones, comunicaciones...). De esta forma puede hacer creer a los programas y sistemas operativos diseñados para una arquitectura concreta que son ejecutados sobre ella. De esta forma se puede emular cualquier máquina antigua o futura, permitiendo diseñar, implementar y probar software sobre estas arquitecturas sin la necesidad de disponer de ellas realmente. Por otro lado la emulación suele ofrecer un rendimiento bastante bajo debido a que hay que realizar un proceso completo de traducción. Ejemplos de estos sistemas son Bochs (emula CPU's, dispositivos de E/S y BIOS), MAME (emula máquinas recreativas antiguas), QEMU (emula un sistema operativo dentro de otro), Microsoft Virtual PC y Wine (este software emula partes de un sistema operativo aunque el código nativo se ejecuta directamente en el procesador, de ahí que su nombre de las siglas de Wine Is Not an Emulator)

## Incidencias de seguridad

Los tipos de incidencias de seguridad más importantes típicos de los hipervisores son:
* Escape de la máquina virtual o VM Escape, en idioma inglés. Consiste en que la máquina virtual encapsulada puede interaccionar con el hipervisor.
* Aprovechar fallos de controladores de hardware virtual para tomar el control el control de otras máquinas virtuales.

## Ventajas y Desventajas

Principales ventajas de los hipervisores:
* La reducción de riesgos y costes
* Capacidad de migración en caliente
* Realización de copias de seguridad
* Cuenta con entornos aislados
* Se requiere de poco mantenimiento físico
Principales desventajas de los hipervisores:
* Se requiere de una gran inversión inicial
* Tiene un menor rendimiento
* Puede llegar a una saturación