# Virtualización

Virtualización, usado en informática, es el concepto que describe la capacidad de algunas computadoras de utilizar un programa o un conjunto de programas (software) para imitar las características físicas (hardware) de otra computadora o de un conjunto de computadoras, lo que da lugar a un sistema informático virtual. Esto permite ejecutar más de un sistema virtual, cada uno con sistemas operativos y aplicaciones distintas, en un solo servidor. Por tanto, la función del software de virtualización consiste en simular la existencia del recurso tecnológico que se quiere virtualizar. En los ámbitos de habla inglesa, este término se suele conocer por el numerónimo v12n.
La IOMMU permite el acceso a dispositivos físicos de manera segura en entornos virtualizados mediante un proceso conocido como device passthrough. Sin la IOMMU no sería posible la existencia entornos virtualizados que tuviesen acceso de manera correcta al hardware instalado en el sistema. En la actualidad, es una pieza indispensable para aquellas CPU que manejan entornos virtualizados.
Esta tecnología se aplica en diferentes ámbitos, como servidores, almacenamiento, redes e incluso puestos de trabajo.

## Tipos de virtualización

Según el tipo de sistema que se pretenda imitar, la virtualización se puede clasificar como:
* Virtualización de plataforma, también llamado virtualización de servidor o de hardware, en la que se emplean máquinas virtuales, programas huésped ejecutados sobre software especial, llamado hipervisor o VMM (Virtual Machine Monitor). Este último crea una capa de abstracción sobre el hardware de la máquina física (host) y se la ofrece al sistema operativo de la máquina virtual.
* Virtualización de recursos de hardware, que, según el tipo de recurso, se distinguen entre:
** Virtualización de almacenamiento: sistemas RAID, LVM, SAN y NAS.
** Virtualización de memoria: sistemas de memoria virtual.
** Virtualización de recursos de computación: los clústeres de computación.
** Virtualización de interfaces de red: por ejemplo, la agregación de enlaces simula un dispositivo de red único con gran ancho de banda utilizando múltiples interfaces de red independientes.
* Virtualización de red: ejecutada por servicios de VPN, VLAN, Virtual IP y SDN.
* Virtualización de entornos software de ejecución: dependiendo del entorno de ejecución:
** Virtualización con respecto al sistema operativo o contenerización: el kernel del sistema operativo subyacente permite ejecutar de forma paralela instancias de espacio de usuario, aisladas unas de otras. Todas las instancias comparten el kernel del sistema operativo subyacente. En cada instancia, llamada contenedor, el usuario puede instalar una o más aplicaciones. Al programa que ofrece alojamiento a contenedores se le llama motor de contenedores
** Virtualización de escritorio: implementan un escritorio como servicio basándose en una estructura cliente-servidor. Permite una administración centralizada y en entornos de trabajo estandarizados, es posible reducir de forma significativa los costes de gestión y mantenimiento. Dependiendo de donde se aplique la potencia de procesamiento para crear un escritorio virtual, se puede diferenciar entre distintos enfoques:
*** Virtualización basada en el host: los escritorios virtuales se ejecutan directamente en el servidor y los clientes tiene acceso a los escritorios virtuales a través de la red (ej. VNC, RDP). Usar máquinas virtuales para proporcionar y gestionar escritorios virtuales es llamado Infraestructura de Escritorios Virtuales o VDI (del inglés Virtual Desktop Infrastructure). La VDI aloja entornos de escritorio en un servidor centralizado y los distribuye a los usuarios finales según las necesidades.
*** Virtualización basada en el cliente: el dispositivo cliente es el que proporciona los recursos necesarios para gestionar el entorno de escritorio y cada escritorio virtual se sincroniza con el servidor. Ejemplos de este tipo virtualización es lo que hace Microsoft Enterprise Desktop Virtualization (MED-V), VMware ACE y SolidIce.
* Virtualización de aplicaciones: consiste en usar aplicaciones que aparentemente se ejecutan en local. Se pueden implementar por ejemplo:
** Virtualización con aplicaciones remotas: las aplicaciones se ejecutan en un servidor remoto y el cliente se conecta a ellas a través de protocolos de visualización como VNC o RDP.
** Streaming de aplicaciones: las aplicaciones se ejecutan en local, pero ciertos componentes se descargan de forma que es posible funcionar sin tener conexión a la red. De esta forma, solo las partes esenciales del código de una aplicación deben instalarse en la computadora. Mientras el usuario final realiza acciones en la aplicación, el código y los archivos necesarios se entregan a través de la red cuando y como se requieren. De este modo, se permite ejecutar los programas en entornos aislados y distribuirlos en diferentes sistemas sin que sea necesario realizar cambios en el sistema local. Esto permite proteger el sistema operativo subyacente de código malicioso. Ejemplo de sistemas para proporcionar este tipo de servicios: VMware ThinApp, Microsoft Application Virtualization y XenApp (Citrix).
* Virtualización de datos. Consiste en integrar datos de fuentes dispersas, en distintas localizaciones y formatos, sin replicar los datos, para construir una capa de datos virtual que facilita la provisión de servicios de datos unificados para dar soporte a múltiples aplicaciones y usuarios. Para ello proporciona una capa de abstracción y una capa de servicios de datos.

## Computación en la nube

La virtualización es la base de la computación en la nube⁣, ya que el software de virtualización es el que ofrece los servicios de la nube a través de la red. Estos programas alojan instancias (máquinas virtuales, contenedores, etc.) que ofrecen los servicios.
Según el tipo de recursos que ofrecen tenemos:
* Infraestructura como servicio o IaaS (siglas del inglés, Infrastructure as a Service), en la que se virtualiza hardware como servidores, conexiones de red, balanceadores de carga o espacio de almacenamiento. Ejemplos de este tipo de plataformas son Amazon Web Services y Microsoft Azure.
* Plataforma como servicio o PaaS (siglas del inglés, Platform as a Service), en las que se ofrece tanto IaaS como software para soportar el ciclo de vida de desarrollo de las aplicaciones (diseño, análisis, desarrollo, pruebas, etc.). Ejemplos de este tipo de plataformas son Google App Engine y Bungee Connect.
* Software como servicio o SaaS (siglas del inglés, Software as a Service), en el que se ofrece una instancia de aplicación y datos. Ejemplos de este tipo de plataformas son Microsoft Office 365 y WordPress. Dentro de este tipo de plataformas, también podemos identificar:
** Identidad como servicio o IDaaS (siglas del inglés, IDentity as a Service), en la que se suministran servicios de identificación.
** Comunicación como servicio o CaaS (siglas del inglés, Communication as a Service), en la que se brindan servicios de comunicación como VoIP, videoconferencias o mensajería instantánea.

## Virtualización asistida por hardware

En ocasiones, el software aprovecha características de hardware que facilitan las tareas de virtualización. En este caso hablamos de virtualización asistida por hardware. Por ejemplo, se han introducido extensiones en la arquitectura de procesador x86 para facilitar las tareas de virtualización de servidores, creando un anillo interior o ring -1 en el que se ejecutará el hipervisor; de esta forma, se aíslan todas las capas superiores de software de las operaciones de virtualización subyacentes.

## Conceptos similares

La simulación consiste en reproducir completamente un sistema a través de software. Se puede recurrir a los simuladores para compilar un programa creado para un sistema operativo concreto en otro sistema diferente. Por ejemplo, el simulador de iPhone en Xcode permite, entre otras cosas, probar el diseño web móvil en un ordenador.
La emulación persigue conseguir que el sistema reproducido consiga los mismos resultados que su equivalente original. Por ejemplo, los emuladores de videoconsolas son diseñados para funcionar como una o varias videoconsolas y así ejecutar un videojuego diseñado para ser jugado en estas.
Por otro lado, existen programas que crean una capa de compatibilidad para remediar los posibles conflictos entre diferentes componentes de software y hardware. Estas soluciones no reproducen un sistema completo, sino solo una parte, por ejemplo, una interfaz. Ejemplos de este tipo de software son Wine y Cygwin.

## Virtualización y ahorro de energía

En estudios centrados en el ahorro de energía que genera la empresa para sus clientes, se muestra que las soluciones de virtualización reducen los costos económicos y emisiones de CO₂.
Esto se puede llevar a cabo fusionando varias máquinas en un solo servidor, disminuyendo así el consumo energético y los costes; ahorrando 7000 kWh o cuatro toneladas de emisiones de CO₂ al año. Los PC virtualizados pueden reducir el consumo de energía y los costos en un 35 %. Hoy en día, la mayor parte de la gente consume entre un 70 y un 80 % de su energía estimada.
Otra medida es la desconexión de los servidores y desktops durante los períodos de inactividad, como por la noche o los fines de semana, con lo que se puede ahorrar aproximadamente un 25 % del consumo energético. Actualmente, las empresas son las más interesadas en la virtualización, ya que les interesa mucho reducir costes y energía.