# Xen

Xen es un hipervisor de tipo 1 de código abierto originado en la Universidad de Cambridge. Proporciona aislamiento seguro, control de recursos, garantías de calidad de servicio y migración de máquinas virtuales en caliente.

## Historia

Xen se creó como proyecto de investigación de la Universidad de Cambridge liderado por Ian Pratt y Keir Fraser. Su primera versión pública fue lanzada en 2003. La versión 1.0 apareció en 2004.
En 2005 los fundadores junto con otros estudiantes de Cambridge y el CEO Nick Gault crearon XenSource Inc. para convertir Xen en un producto competitivo. Este mismo año se lanza la versión 3.0 de Xen que permite virtualización completa asistida por Hardware.
En 2006 se lanza XenEnterprise una plataforma de virtualización en el hipervisor Xen.
En 2007 se lanza la primera versión de Oracle VM, la cual está basada en el hipervisor Xen. En octubre de ese año 2007 Citrix adquiere XenSource y el proyecto se mueve al dominio xen.org. XenEnterprise pasa a ser llamado Citrix Xenserver.
En 2008 se lanza la primera versión pública de Secure Xen ARM para soportar sistemas embebidos, tales como teléfonos inteligentes y dispositivos IoT, con arquitecturas ARM.
En 2012 se lanza la versión inicial del sistema operativo Qubes OS. Este sistema operativo usa Xen para tener múltiples máquinas virtuales, cada una con una función específica, que se utilizan como un sistema operativo integrado seguro.
En 2013 se anunció que el proyecto Xen se movía bajo los auspicios de la Linux Foundation como un proyecto colaborativo. La Linux Foundation lanzó la marca Xen Project para diferenciar el proyecto de cualquier uso comercial de la antigua marca Xen. Además se creó un nuevo sitio web para la comunidad xenproject.org. En 2013 XenServer se lanza como software libre bajo la licencia GPLv2, manteniendo Citrix una versión comercial de XenServer, que viene con instalación automatizada, correcciones de seguridad y mantenimiento de software..
En 2018 Citrix Xenserver pasa a llamarse Citrix Hypervisor.

## Funcionamiento

El hipervisor de Xen es una fina capa de software que emula la arquitectura de un computador permitiendo que varias máquinas virtuales se ejecuten de forma simultánea. En Xen las máquinas virtuales que se ejecutan sobre su hipervisor se las llama dominios. Existe un dominio especial llamado dominio 0 (o también dom0 o dominio privilegiado ) que es responsable de controlar el hipervisor e iniciar y controlar el resto de máquinas virtuales. Al resto de máquinas virtuales se les llama domU (o también dominios de usuario. Se les llama así porque estos dominios no tienen privilegios en el sentido de que no pueden controlar ni el hipervisor ni otros dominios. Además los domU no tienen privilegios para acceder directamente al hardware, en cambio el dom0 si.
El hipervisor se inicia con el cargador de arranque de la computadora. Una vez que el hipervisor está cargado, este inicia la ejecución de dom0. Una vez que el dom0 se ha iniciado, desde el dom0 se inician y controlan varios domU.
El hipervisor de Xen soporta dos formas de virtualizar: paravirtualización (PV) y la virtualización completa asistida por hardware (HVM) , introducida en Xen 3.0:
* Con la paravirtualización (PV) no se requieren dispositivos de hardware virtuales, se modifica el sistema operativo de la máquina virtual para que realice llamadas especiales al hipervisor para poder acceder a los recursos como las CPU, el almacenamiento y los recursos de red. A las máquinas virtuales con este tipo de virtualización se le suele llamar huésped ligeros ya que necesitan menos recursos que las otras. No todos los sistemas operativos sirven para paravirtualizar con Xen. Por ejemplo el kernel de Linux permite la virtualización usando paravirt_ops (pvops) desde la versión 2.6.24. Antes era necesario parchear linux para dar ese soporte (Xenlinux).
* Con la virtualización completa asistida por hardware (HVM), el sistema operativo de la máquina virtual no es modificado. En Xen el hipervisor se apoya en las tecnología Intel VT y AMD-V presentes en la mayor parte de computadoras actuales. En este caso el hipervisor creará un conjunto virtual completo de dispositivos de hardware (usa QEMU) para que la máquina virtual interprete que está en un computador x86. Esta emulación provoca más sobrecarga que las que usan paravirtualización. Lo que provocan que se ejecuten más lentamente. Este tipo de virtualización es especialmente útil para sistemas operativos de los que no se tienen los fuentes y por tanto no se pueden modificar para realizar la paravirtualización (Ej. sistemas operativos Microsoft Windows)
Para tener soluciones intermedias que no requieran tanta modificación del sistema operativo y tengan mejor rendimiento han aparecido distintas técnicas. Por ejemplo HVM con drivers PV, paravirtualización sobre HVM (PHVM) y el más reciente modo PVH.

## Comparación con otras máquinas virtuales

* Denali utiliza la virtualización para proporcionar máquinas virtuales de alto rendimiento en ordenadores x86. La máquina virtual Denali da soporte a Sistemas Operativos mínimamente especializados hacia servicios de Internet. El sistema puede escalar a millares de máquinas virtuales. A diferencia de Xen, Denali no preserva la interfaz binaria (ABI), y algunas aplicaciones deben ser recompiladas para que funcionen con las bibliotecas del sistema operativo; en este sentido es similar a Exonúcleo.
* Virtuozzo sustituye la capa de la abstracción del hardware por una versión modificada permitiéndole funcionar con un mejor rendimiento de los sistemas operativos, pero fuerza a que todas las Máquinas Virtuales se ejecuten en un equipo y con el mismo sistema operativo. Actualmente existe una versión para Windows 2003 y para Fedora Core Linux.

## Migración de máquinas virtuales

Las máquinas virtuales Xen pueden ser migradas en caliente entre equipos físicos sin pararlos. Durante este proceso, la memoria de la máquina virtual es copiada iterativamente al destino sin detener su ejecución. Una parada muy breve de alrededor de 60 a 300 ms es necesaria para realizar la sincronización final antes de que la máquina virtual comience a ejecutarse en su destino final. Una tecnología similar es utilizada para suspender las máquinas virtuales a disco y cambiar a otra máquina virtual.