Para todos aquellos que nos centramos en el mundo Linux, existe algo que es indispensable, y es el particionamiento del disco duro. De esta forma, podemos tener en una partición nuestra distribución 'fija' y en la otra ir probando las diferentes novedades que puedan ir surgiendo. Sin embargo, no todos están a favor de esta opción, puesto que es verdad que cuando más 'sufre' el disco duro es durante una instalación, y el ir instalando distribución tras distribución con el paso de un par de años le pesará a dicha pieza de nuestro equipo.

Como alternativa tenemos la virtualización. La virtualización es la creación de una versión virtual de algún recurso tecnológico (con la intermediación de un software), por ejemplo un dispositivo de almacenamiento, una plataforma de hardware, etc...

Los Hipervisores (o VMM Virtual Machine Monitors) son una pieza clave en este puzzle, ya que permiten que diferentes SO's, tareas y configuraciones de software coexistan en una misma máquina, abstrayendo los recursos físicos de esta para las distintas máquinas virtuales. La independencia entre estas diferentes máquinas virtualizadas está garantizada y proporcionan una interfaz única para el hardware.

Existen fundamentalmente dos tipos de hipervisores:

1. Nativo o Bare-Metal: donde el hipervisor es una capa entre el hardware y el sistema operativo. Aquí al sistema operativo se le denomina Dominio de Control y funciona sobre el hipervisor, y los invitados son los llamados Dominios Lógicos.

2. Hosted: El hipervisor es una capa de software que funciona sobre el sistema operativo anfitrión, El invitado o cliente podrá ver el sistema operativo que ya esté funcionando, no podrá usar una capa con sistema operativo propio.

En el artículo de hoy nos centraremos en esta segunda categoría, desglosándola en los diferentes métodos de virtualización que podemos usar según nuestras necesidades y capacidad de nuestro equipo. Se resumen en Emulación, Virtualización completa, Paravirtualización y Virtualización Ligera.

Emulación.

Con la emulación se consigue simular la máquina al completo, hardware incluido. Permite a los huéspedes de diferentes arquitecturas hardware funcionar dentro de un mismo entorno virtualizado. Comúnmente es utilizado para desarrollar software sin que el hardware esté disponible físicamente. La única pega de este tipo de virtualización es que al compartirse el hardware de la máquina, el rendimiento general de esta baja considerablemente.

Hardware>hardware 1>sistema operativo>apps >hardware 2>sistema operativo>Apps

Virtualización Completa.

A diferencia de la emulación los sistemas operativos a virtualizar están diseñados para funcionar en la misma arquitectura que el anfitrión. Ideal si se combina con hardware CMT, Intel VT, AMD-V, ya que estas CPU's controlan el acceso a instrucciones de Virtualización. La ventaja de este sistema es la flexibilidad puesto que permite virtualizar diferentes sistemas operativos de distintas plataformas, y por contras tenemos el rendimiento con CPU's distintas a las mencionadas y el hecho de que no se puedan emular otras arquitecturas.

Hardware>Hipervisor>Sistema operativo>Apps Hardware>Hipervisor>Sistema Operativo>Apps Hardware>Hipervisor>Sistema Operat........

Paravirtualización.

Este método permite virtualizar por software diferentes sistemas operativos, cada uno como si fuese un equipo independiente. El único requisito es que el sistema virtualizado (o invitado) sea soportado de forma nativa por la API (Interfaz de Programación de Aplicaciones), ya que lo que básicamente ofrece es una versión virtualizada 'modificada' del equipo anfitrión, ya que lo que se verá en el equipo invitado será la misma arquitectura del anfitrión. Las ventajas de este sistema de virtualización son el rendimiento que llega a ofrecer incluso con CPU's convencionales, la escalabilidad, facilidad de gestión y el aislamiento entre usuarios. Sin embargo, todos los sistemas deberán tener la misma arquitectura y tendremos que estar modificando los sistemas invitados a cada cuanto.

Hardware>Hipervisor>Kernel Modificado>Sistema Invitado Hardware>Hipervisor>Dominio de Control Hardware>Hipervisor>Kernel Modificado>Sistema Invitado

Virtualización Ligera.

También denominada 'virtualización a nivel de sistema operativo', lo que hace es virtualizar servidores en la capa del sistema operativo (Kernel) y crea particiones aisladas o entornos virtuales en un único servidor físico e instancia de sistema operativo para maximizar los esfuerzos de administración de hardware, software y gestión de datos. El hipervisor tiene una capa base (normalmente un Kernel) que se carga directamente en el servidor creado en el Kernel del anfitrión. La siguiente capa superior muestra todo el hardware virtualizado asignado a la máquina virtual, y una vez cargada esta ya se puede cargar el sistema operativo y finalmente las aplicaciones con las que se trabajarán. Es el método que más ventajas implementa, ya que carga muy rápido los sistemas virtualizado, ofrece un rendimiento muy similar al de una instalación nativa, la capa de virtualización es ligera por lo que también será muy rápida de gestionar por el procesador, etc... La única pega quizás sea la dificultad que conlleva asilar unos usuarios de otros.

Hardware>Hipervisor>Kernel virtualizado>Sistema Operativo>Apps >Kernel virtualizado>Sistema Operativo>Apps >Kernel virtualizado>Sistema Operativo>Apps

Luego, existen también otros tipos de virtualizaciones, llamémoslas 'menores', que básicamente son aplicaciones que emulan otras aplicaciones, bibliotecas, etc... Por mencionar tres de las más conocidas:

Virtualización de Bibliotecas: Wine . Es un subconjunto de la API de Win32 para poder ejecutar aplicaciones Windows bajo otros sistemas operativos, como Linux.

Virtualización de aplicación: Java Virtual Machine, es el mejor ejemplo de entorno de ejecución virtual, que cuenta con una API para la ejecución en diferentes plataformas.

Virtualización de escritorio: donde se implementa el escritorio como servicio al que accedemos remotamente para trabajar con nuestro disco duro. SunVDI nos podría servir de ejemplo.

Esperemos que estas notas introductorias al mundo de la virtualización levante vuestra curiosidad y os lleve a investigar. De no ser así, en próximos posteos incluiremos algún tutorial sobre este tema. No dejéis de suscribiros para estar al día de las últimas noticias y otras publicaciones muy interesantes.

Fuentes: Amit Singh “An Introduction to Virtualization” (2004): http://www.kernelthread.com/publications/virtualization/