INTRODUCCION En informática, virtualización es un término amplio que se refiere a la abstracción de los recursos de una computadora. Este término es bastante antiguo: viene siendo usado desde antes de 1960, y ha sido aplicado a diferentes aspectos y ámbitos de la informática, desde sistemas computacionales completos hasta capacidades o componentes individuales. El tema en común de todas las tecnologías de virtualización es la de ocultar los detalles técnicos a través de la encapsulación. La virtualización crea un interfaz externo que esconde una implementación subyacente mediante la combinación de recursos en locaciones físicas diferentes, o mediante la simplificación del sistema de control. Un reciente desarrollo de nuevas plataformas y tecnologías de virtualización han hecho que se vuelva a prestar atención a este maduro concepto. De modo similar al uso de términos como "abstracción" y "orientación a objetos", virtualización es usado en muchos contextos diferentes. Suele dividirse en dos categorías principales: Virtualización de plataforma que involucra la simulación de máquinas virtuales. Virtualización de recursos que involucra la simulación de recursos combinados, fragmentados o simples. Asimismo, el término virtualización es un concepto importante en contextos no computacionales. Muchos sistemas de control implementan interfaces virtuales en un mecanismo
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
INTRODUCCION
En informática, virtualización es un término amplio que se refiere a la abstracción de los
recursos de una computadora. Este término es bastante antiguo: viene siendo usado
desde antes de 1960, y ha sido aplicado a diferentes aspectos y ámbitos de la
informática, desde sistemas computacionales completos hasta capacidades o
componentes individuales. El tema en común de todas las tecnologías de virtualización
es la de ocultar los detalles técnicos a través de la encapsulación. La virtualización crea
un interfaz externo que esconde una implementación subyacente mediante la
combinación de recursos en locaciones físicas diferentes, o mediante la simplificación
del sistema de control. Un reciente desarrollo de nuevas plataformas y tecnologías de
virtualización han hecho que se vuelva a prestar atención a este maduro concepto. De
modo similar al uso de términos como "abstracción" y "orientación a objetos",
virtualización es usado en muchos contextos diferentes. Suele dividirse en dos
categorías principales:
Virtualización de plataforma que involucra la simulación de máquinas virtuales.
Virtualización de recursos que involucra la simulación de recursos combinados,
fragmentados o simples.
Asimismo, el término virtualización es un concepto importante en contextos no
computacionales. Muchos sistemas de control implementan interfaces virtuales en un
mecanismo complejo; de esta manera el pedal del acelerador de un automóvil moderno
hace más que solo aumentar el flujo del combustible hacia el motor; y el sistema de
vuelos por cables (fly by wire) presenta un avión virtual simplificado que tiene muy
poco que ver con la implementación física.
En este trabajo tratamos de recopilar toda la información necesaria sobre virtualización,
profundizando aspectos internos del sistema, soporte de hardware y casos de uso.
Creemos que éste es un tema muy importante en la formación profesional de los
egresados de la carrera profesional de Computación e Informática. Al final podremos
evaluar las distintas implementaciones de virtualización determinando en cada caso
posibles modificaciones o soluciones óptimas para diferentes necesidades.
En el trabajo se darán algunos ejemplos de virtualización en distintas plataformas,
virtualizaciones tanto desde Windows como desde Linux, usando alguna de las
plataformas de virtualización existentes, VMware, VirtualBox, etc. para intentar realizar
distintos ejemplos y a la vez para comparar el rendimiento que nos ofrecen estas
soluciones, tanto para el anfitrión como para el invitado.
CAPITULO I
VIRTUALIZACION
1.1. DEFINICION GENERAL
En términos técnicos de computación, la virtualización es un medio para crear una
versión “virtual” de un dispositivo o recurso, como un servidor, un dispositivo de
almacenamiento, una red o incluso un sistema operativo, donde se divide el recurso
en uno o más entornos de ejecución. También se le conoce como la habilidad de
tener varios sistemas operativos funcionando al mismo tiempo en un mismo
computador o servidor.
Figura 1.: Virtualización
Virtualización es el concepto que describe la habilidad de tener varios sistemas
operativos funcionando al mismo tiempo en un mismo computador.
Virtualización es una tecnología que permite que en el sistema operativo (SO) que
se tiene en la PC, se pueda montar y hacer funcionar otro SO, o como quien dice
otro computador “Totalmente” independiente.. Solo imaginemos que tenemos un
computador dentro de nuestro computador. Pues esto es tener en Windows XP o
Vista o Linux o Mac o cualquiera que sea su SO otro “computador” o SO que
puede ser el mismo u otro SO que funciona de forma independiente como se
muestra en las siguientes imágenes.
Figura 2: Windows vista en vista
Figura 3: Windows XP en Linux
Figura 4: Windows XP en Mac
1.2. DEFINICIÓN TÉCNICA DE VIRTUALIZACIÓN
Virtualización es el concepto que describe como en un solo computador físico se
coordina el uso de los recursos para que varios sistemas operativos puedan
funcionar al mismo tiempo de forma independiente y sin que ellos (los SO) sepan
que están compartiendo recursos con otros sistemas operativos.
Para lograr esto son necesarios los siguientes componentes:
Un computador físico o CPU o unidad física de hardware.
De acuerdo al tipo de virtualización, la segunda capa es un sistema operativo
o un hipervisor que va instalado como anfitrión o sistema principal, esta es la
parte de la capa que coordina los recursos del sistema como memoria,
procesador, archivos, impresora, tarjeta de red, etc.
Uno o mas sistemas operativos que son los invitados.
Figura 5.: Virtualización
En la figura anterior vemos como lo primero que tenemos en la parte de abajo es
el hardware o la parte física del computador (CPU, Memoria, Tarjeta de red o NIC
y Disco Duro), sobre esa capa física va una capa de software que es el que
coordina el acceso a las partes físicas del computador, esta capa es el hipervisor o
un sistema operativo como Windows o Linux que actúan como anfitrión.
Dentro del hipervisor o el contenedor que esté en un sistema operativo anfitrión
van los otros sistemas operativos invitados y es ahí donde se crea una capa virtual
que le hace creer a los invitados que ellos tienen los recursos físicos que tiene el
computador.
1.3. CONCEPTOS BÁSICOS
a) HYPERVISOR
En los años ‘60, IBM llamaba al sistema operativo “supervisor“. Por esto, a
aquellos con capacidad de correr otros sistemas operativos sobre ellos los llamó
“hypervisors“, terminología que persiste en la actualidad. Al hypervisor también
se lo denomina “sistema operativo host“.
b) MAQUINAS VIRTUALES
Las “máquinas virtuales” (como la Java Virtual Machine o el BCPL de los ‘60)
proveen una CPU virtual. Su objetivo no es virtualizar todo el hardware, sino
solamente permitir la ejecución de código portable en distintas arquitecturas
(esto se conoce como “virtualización a nivel de aplicación”). Un intento similar
consiste en la traducción de instrucciones al nivel de la CPU, tal como lo
realizan los procesadores Crusoe.
c) ANFITRIÓN E INVITADO
Los dos conceptos más importantes para entender qué es la virtualización son
los de anfitrión e invitado. Ambos conceptos se refieren a nuestro sistema
operativo, y por lo tanto deberíamos hablar de sistema operativo anfitrión y
sistema invitado.
El anfitrión es el computador en el cual instalamos nuestro programa de
virtualización y que asignará o prestará determinados recursos de hardware
a la máquina virtual que creemos.
El invitado es el computador virtual que hemos creado, mediante nuestro
programa de virtualización y al cual hemos asignado determinados recursos
para funcionar.
d) VIRTUALIZADOR
Un virtualizador es, por su parte, un software que permite crear máquinas
virtuales dentro de una máquina física. La principal diferencia con un emulador
es que no traduce instrucciones sino que las ejecuta directamente, con lo cuál no
es posible virtualizar un guest diseñado para una plataforma diferente a la del
host. No obstante, la ventaja de esto es que se obtiene un rendimiento mucho
mayor comparado con los emuladores.
e) EMULADOR
Un emulador es un software que es capaz de ejecutar programas escritos para
otra plataforma o arquitectura como si estuvieran en realidad ejecutándose en
ella, dado que traduce cada instrucción de la máquina huésped a una instrucción
válida para la arquitectura del host. Por ejemplo, un emulador permitiría
ejecutar un programa de Mac OS X en Linux. En el caso de un emulador, el
software que permite ejecutar es el mismo (sin ninguna modificación) que
funciona en la plataforma para la que fue originalmente desarrollado.
f) SIMULADOR
En este caso, se trata de un software que copia el comportamiento de otro,
intentando ser lo más parecido al software que trata de imitar. Notar que un
simulador se trata de otro software distinto al que intenta simular.
1.4. HISTORIA DE LA VIRTUALIZACION
Hace más de 40 años, mucho antes de que se inventara Linux, IBM tenía un
problema. El nuevo System/360 funcionaba de un modo totalmente distinto al del
anticuado 7070. Para facilitar la migración de los clientes potenciales, IBM quería
que las aplicaciones antiguas funcionaran en el nuevo sistema. Tras varias pruebas,
IBM se decantó finalmente por una idea ofrecida por el ingeniero Larry Moss, el
cual sugirió una combinación de software y una extensión de hardware especial. La
solución consistía en la ejecución y monitorización paso a paso de la aplicación
antigua convirtiendo sus comandos en otros que el nuevo System /360 pudiera
entender. De este modo, el nuevo computador se comportaría exactamente igual
que su predecesor. Este sencillo juego de manos permitía a los compradores del
nuevo modelo la posibilidad de continuar usando sus aplicaciones 7070. Dado que
este software emulaba el comportamiento de otro computador, Larry Moss bautizó
su invento como “emulador”.
Probablemente IBM ha sido quién más ha contribuido al desarrollo de las máquinas
virtuales, así se tiene el CP-40, desarrollado para un versión modificada del IBM
360/40; el CP-67, desarrollado para el IBM 360/67, el famoso VM/370, y muchos
más. Típicamente las máquinas virtuales de IBM eran “copias” idénticas del
hardware. Un componente llamado Virtual Machine Monitor (VMM) corría
directamente en el hardware real. Luego múltiples máquinas virtuales podían
crearse vía el VMM, y cada instancia de ellas podía correr su propio sistema. La
oferta actual del VM de IBM es considerada una de las plataformas más respetadas
y robustas. Con posterioridad al desarrollo de la máquinas virtuales ha ocurrido: La
vitualización de las CPU y los sistemas de I/O a mediados de los 80, por ejemplo
Windows, LPARS IBM / Hitachi, las x86. Y, a mediado de los 90 esta tecnología
se ha desplazado a los Open Systems, por ejemplo los servidores SUN E10K
1.5. TÉCNICAS DE VIRTUALIZACIÓN
Las técnicas de virtualización, surgidas en el ámbito de los mainframes durante los
años 70 para la optimización de los, por aquel entonces, muy escasos recursos
informáticos, están experimentando un resurgimiento en la actualizad motivado
principalmente por la situación actual del hardware, que es cada vez más potente
(en términos de CPU, memoria y espacio de almacenamiento) y a la vez más
barato. No en vano, la virtualización está considerada una de las tecnologías
estratégicas actuales, con un mayor impacto en los próximos años.
Las técnicas de virtualización generales son:
a) EMULACION
El método de virtualización con el que todos estamos más familiarizados es la
emulación. Todos hemos ejecutado el emulador de nintendo para juegos, o el
de pocket PC, por poner ejemplos. Y todos sabemos cual es su principal
problema: La lentitud. El overhead de simular byte a byte un hardware por
software hace trabajar a las CPU de manera considerable. El desarrollo de
emuladores es una tarea ardua y propensa a errores. La emulación se basa en
crear máquinas virtuales que emulan el hardware de una o varias plataformas
hardware distintas. Este tipo de virtualización es la más costosa y la menos
eficiente, ya que obliga a simular completamente el comportamiento de la
plataforma hardware a emular e implica también que cada instrucción que se
ejecute en estas plataformas sea traducida al hardware real.
Figura 6: Emulación
Sin embargo la emulación tiene características interesantes, como poder ejecutar
un sistema operativo diseñado para una plataforma concreta sobre otra
plataforma, sin tener que modificarlo, o en el desarrollo de firmware para
dispositivos hardware, donde se pueden comenzar estos desarrollos sin tener que
esperar a tener disponible el hardware real.
b) VIRTUALIZACION COMPLETA
Con este término se denominan aquellas soluciones que permiten ejecutar
sistemas operativos huésped (Guest), sin tener que modificarlos, sobre un
sistema anfitrión (Host), utilizando en medio un Hypervisor o Virtual Machine
Monitor que permite compartir el hardware real. Esta capa intermedia es la
encargada de monitorizar los sistemas huésped con el fin de capturar
determinadas instrucciones protegidas de acceso al hardware, que no pueden
realizar de forma nativa al no tener acceso directo a él. Su principal ventaja es
que los sistemas operativos pueden ejecutarse sin ninguna modificación sobre
la plataforma, aunque como inconveniente frente a la emulación, el sistema
operativo debe estar soportado en la arquitectura virtualizada.
Figura 7: Virtualización completa
En lo que respecta al rendimiento, éste es significativamente mayor que en la
emulación, pero menor que en una plataforma nativa, debido a la
monitorización y la mediación del hypervisor. Sin embargo, recientes
incorporaciones técnicas en las plataformas x86 hechas por Intel y AMD,
como son Intel VT y AMD-V, han permitido que soluciones basadas en la
virtualización completa se acerquen prácticamente al rendimiento nativo.
Hay que tener en cuenta también que la virtualización completa no se refiere a
todo el conjunto de hardware disponible en un equipo, sino a sus componentes
principales, básicamente el procesador y memoria. De esta forma, otros
periféricos como tarjetas gráficas, de red o de sonido, no se virtualizan. Las
máquinas huésped no disponen de los mismos dispositivos que el anfitrión,
sino de otros virtuales genéricos. Por ejemplo, si se dispone de una tarjeta
nVidia GeForce en el anfitrión, los equipos huésped no verán esta tarjeta sino
una genérica Cirrus.
Aquí podemos hablar entonces de dos estrategias para la virtualización
completa:
1) Virtualización completa con traducción binaria: esta técnica traduce las
instrucciones del kernel del sistema operativo virtualizado mientras que
ejecuta directamente las instrucciones de las aplicaciones de usuario. Este
tipo de virtualización es muy eficiente y tiene la ventaja de que puede
llevarse a cabo en cualquier hardware.
2) Virtualización completa asistida por hardware: en este el propio
hardware provee la tecnología para que las máquinas virtuales puedan
ejecutar el sistema operativo en el nivel privilegiado que utilizaría si
estuviera instalado físicamente. En otras palabras, lo que antes se hacía con
una traducción binaria ahora se ejecuta directamente. Lógicamente, la
performance en los procesadores modernos es mayor con este método. Su
desventaja es obvia: el hardware que se utilice debe tener incorporada la
tecnología de virtualización.
c) PARAVIRTUALIZACION
La paravirtualización surgió como una forma de mejorar la eficiencia de las
máquinas virtuales y acercarlo al rendimiento nativo. Para ello se basa en que
los sistemas virtualizados (huésped) deben estar basados en sistemas
operativos especialmente modificados para ejecutarse sobre un hypervisor. De
esta forma no es necesario que éste monitorice todas las instrucciones, sino
que los sistemas operativos huésped y anfitrión colaboran en la tarea.
La paravirtualización (PV) parte de la base de que el sistema operativo
huesped "sabe" perfectamente que está siendo ejecutado en un entorno virtual,
y modifica su comportamiento de acuerdo con esto. Los sistemas operativos
necesitan ser modificados para adaptarse a un entorno "hardware" virtual, lo
que implica que hay una relación directa entre cómo se escribe el kernel del
sistema operativo y cómo virtualiza la capa de virtualización. Realmente la
Paravirtualización no es virtualización pura, sino más bien una colaboración
entre la capa de virtualización y el sistema operativo virtualizado. Esto
funciona bastante bien en entornos abiertos, donde el kernel del sistema
operativo (como linux o BSD) puede ser modificado para tener en cuenta que
"debajo" hay una capa de virtualización, pero en el caso de otros OS'es (como
es el caso de Windows), la cosa no está tan clara. En este caso, hablar de
rendimiento nativo es realmente relativo, ya que un OS's virtualizado no
ejecuta exactamente el mismo código ni opera igual que si corriera en
hardware real.
Figura 8: Paravirtualización
Este sistema tiene varias ventajas, entre ellas la poca carga que le da al
procesador al no tener que tener una capa completa de virtualización que se
encarga de administrar los recursos y virtualizarlos. Otra de las ventajas, es
que los sistemas invitados no tienen que limitarse a los accesorios de hardware
que sean soportados por el hipervisor, pues al invitado actuar directamente con
la parte física es posible manejar todos los accesorios que maneja el sistema
operativo montado en el invitado. Este sistema utiliza memoria compartida que
puede ser usada por dos programas diferentes de esta forma envía y recibe
información de los invitados para el hipervisor de esa forma es que se alcanzan
buenos niveles de rendimiento. La desventaja es que para poder hacer esto, el
hipervisor necesita modificar los sistemas operativos que se montan como
invitados, es decir toma el código del sistema operativo y le agrega algunas
líneas, así es como ya se puede imaginar solo sistemas operativos como Linux
o BSD al cualquiera de código abierto pueden ser usados. Windows no es una
opción en este caso, pues Bill Gates jamás permitiría que alguien manipule su
código. La buena noticia es que Intel y AMD están produciendo procesadores
que soportan sistemas operativos sin necesidad de modificarlos así es que
Windows sigue estando en la baraja de opciones, claro si se tiene uno de estos
procesadores como Intel VT o el AMD‐V.
El software de paravirtualización mas conocido es Xen que se ofrece como
software libre, este es desarrollado por una compañía llamada XenSource. Esta
aplicación la podemos encontrar gratis en algunas distribuciones de Linux
como Fedora, Red Hat, Suse, Debian o Ubuntu. También Microsoft con su
nuevo Hyper‐V soporta paravirtualización.
La figura siguiente muestra la arquitectura de la paravirtualización.
Figura 9: Arquitectura de la paravirtualización
Uno de los componentes más destacados de esta familia es Xen. Permite
paravirtualización utilizando sistemas operativos modificados, y virtualización
completa sobre procesadores con tecnología Intel-VT o AMD-V.
1.6. SOPORTE HARDWARE PARA LA VIRTUALIZACIÓN COMPLETA Y LA
PARAVIRTUALIZACIÓN EN PCs.
Para construir una máquina virtual tenemos que asignar determinados recursos de
hardware, que por lo general son espacio en disco duro, memoria RAM o número
de procesadores que el anfitrión cede al invitado. Además lo normal es que
tengamos que indicar el tipo de sistema operativo que queremos alojar en esta
máquina virtual, especificando si es Windows o una distribución de Linux.
Cuando tengamos nuestra máquina virtual el siguiente paso que debemos hacer
consistirá en instalar un sistema operativo, ya sea Windows o Linux y funcionará
con las mismas reglas que lo hace en un computador normal, actualizaciones,
licencias, instalación de software adicional, etc. Por lo tanto también son
susceptibles de ser atacados por malware como cualquier otro computador. Por
todas estas características que hemos comentado tendríamos que decir que para que
la virtualización funcione aceptablemente bien se necesitarán computadores
modernos y potentes, que puedan ceder recursos a sus sistemas invitados para que
luego funcionen bien. Por ejemplo si tenemos un computador con un procesador
mononúcleo y 1 GB de memoria RAM será complicado ceder recursos para el
invitado. Funcionará pero la experiencia sería mejor con procesadores multinúcleo
y más capacidad de memoria. Respecto al disco duro, no sería tan importante
porque podemos ceder el espacio en un disco duro externo sin problemas.
Intel está produciendo una nueva tecnología de virtualización que soportará
hipervisores en dos de sus arquitecturas, tanto en x86 (VT-x) como en Itanium (VT-
i). VT-x soporta dos nuevos modos de operación, uno para la VMM (root) y otro
para los sistemas operativos hospedados (no root). En el modo root se cuentan con
todos los privilegios, mientras que en el modo no root no se tienen privilegios
(incluso para el nivel 0). La arquitectura también permite cierta flexibilidad al
definir las instrucciones que provocan que una VM (sistema operativo hospedado)
retorne al VMM y almacene el estado del procesador. También se han añadido otras
capacidades, consulte la sección recursos.
AMD está produciendo la tecnología Pacifica en la que el hardware asiste a la
virtualización. Entre otras cosas, Pacifica mantiene un bloque de control para los
sistemas operativos hospedados que se guarda con la ejecución de instrucciones
especiales. La instrucción VMRUN permite a una máquina virtual (y sus sistema
operativo hospedado asociado) ejecutarse hasta que el VMM recupere el control (lo
que también es configurable). Las opciones de configuración permiten que el VMM
adapte los privilegios de cada uno de los huéspedes. Pacifica también compensa la
traducción de direcciones con unidades de gestión de memoria (MMU) para el
anfitrión y los huéspedes. Estas nuevas tecnologías pueden utilizarse en varias de
las técnicas de virtualización que se han discutido, como Xen, VMware, User-mode
Linux y otras.
1.7. TIPOS DE VIRTUALIZACIÓN
La virtualización tiene múltiples usos y de acuerdo a estos podemos determinar que
tipo de virtualización es. Los más comunes de forma muy general son la
virtualización de servidores, virtualización de clientes y virtualización de
almacenamiento de datos o por que no llamarlo virtualización de discos duros, esta
división no es definitiva y otras personas podrían darle otra forma de dividir los
tipos de virtualización pero definitivamente estos son los mas comunes. Por lo que,
vamos a clasificarlos en tres grandes grupos: Virtualización de plataforma,
Virtualización de los recursos y Otros Tipos de virtualización.
a) VIRTUALIZACIÓN DE PLATAFORMA
Abstracción de todos los recursos de computación de un huésped dentro de un
anfitrión (host). Esta involucra la simulación de máquinas virtuales. La
virtualización de plataforma es llevada a cabo en una plataforma de hardware
mediante un software “host” (“anfitrión”, un programa de control) que simula un
entorno computacional (máquina virtual) para su software “guest”.
Este software “guest”, que generalmente es un sistema operativo completo, corre
como si estuviera instalado en una plataforma de hardware autónoma.
Típicamente muchas máquinas virtuales son simuladas en una máquina física
dada. Para que el sistema operativo “guest” funcione, la simulación debe ser lo
suficientemente robusta como para soportar todas las interfaces externas de los
sistemas guest, las cuales pueden incluir (dependiendo del tipo de virtualización)
los drivers de hardware.
Dentro de la virtualización de plataforma podemos considerar los siguientes
subtipos:
EMULACIÓN O SIMULACIÓN.
La máquina virtual simula un hardware completo, admitiendo un sistema
operativo “guest” sin modificar para una CPU completamente diferente. Este
enfoque fue muy utilizado para permitir la creación de software para nuevos
procesadores antes de que estuvieran físicamente disponibles. Por ejemplo
Bochs, PearPC, Qemu sin aceleración, y el emulador Hercules. La emulación
es puesta en práctica utilizando una variedad de técnicas, desde state
machines hasta el uso de la recopilación dinámica en una completa
plataforma virtual. Esta forma de virtualizar es donde el software de
virtualizacion genera crea una capa de software que representa el hardware.
Se que sonó un poquito confuso pero desglosémoslo un poco.
El software de virtualización genera una capa donde se emulan los recursos
del computador para que el sistema operativo instalado dentro del software
funcione creyendo que esta solo en un computador.
Figura 10: Emulación De Hardware
Lo que se hace es primero tener un sistema operativo instalado en el cliente,
luego se instala el software de emulación de hardware que una vez instalado
y configurado queda listo para instalar otro sistema operativo invitado, esto
se hace a través del software de virtualización en vez de instalarse
directamente en el computador anfitrión quien configura el contenedor o lo
que conocemos como la maquina virtual. Después de esto la instalación del
nuevo sistema operativo invitado se hace igual que como si lo estuviéramos
haciendo en un computador nuevo. Algunos de estos programas son
completamente gratis y muy fáciles de instalar y configurar como el virtual
PC 2007 de Windows, el QEMU o el VirtualBoxpara Linux. Algunos no
gratis pero sin lugar a duda muy buenos son el VMware virtual desktop o
VMware server, Microsoft también tiene un Virtual Server, Para Mac existe
el Parallels de SWsoft o el Fusion de VMware.
VIRTUALIZACIÓN NATIVA Y VIRTUALIZACIÓN COMPLETA.
La máquina virtual simula un hardware suficiente para permitir un sistema
operativo “guest” sin modificar (uno diseñado para la misma CPU) para
correr de forma aislada. Típicamente, muchas instancias pueden correr al
mismo tiempo. Este enfoque fue el pionero en 1966 con CP-40 y
CP-67/CMS, predecesores de la familia de máquinas virtuales de IBM.
Algunos ejemplos: VMware Workstation, VMware Server, Parallels
Desktop, Adeos, Mac-on-Linux, Win4BSD, Win4Lin Pro y z/VM.
VIRTUALIZACIÓN PARCIAL (Incluido el llamado “address space
virtualization”).
La máquina virtual simula múltiples instancias de mucho (pero no de todo)
del entorno subyacente del hardware, particularmente address spaces. Este
entorno admite compartir recursos y aislar procesos, pero no permite
instancias separadas de sistemas operativos “guest”. Aunque no es vista
como dentro de la categoría de máquina virtual, históricamente éste fue un
importante acercamiento, y fue usado en sistemas como CTSS, el
experimental IBM M44/44X, y podría decirse que en sistemas como
OS/VS1, OS/VS2 y MVS.
PARAVIRTUALIZACIÓN.
La máquina virtual no necesariamente simula un hardware, en cambio ofrece
un API especial que solo puede usarse mediante la modificación del sistema
operativo “guest”. La llamada del sistema al hypervisor tiene el nombre de
“hypercall” en Xen y Parallels Workstation; está implementada vía el
hardware instruction DIAG (“diagnose”) en el CMS de VM en el caso de
IBM (este fue el origen del término hypervisor). Ejemplo: VMware ESX
Server, Win4Lin 9x y z/VM.
VIRTUALIZACIÓN A NIVEL DEL SISTEMA OPERATIVO.
Virtualizar un servidor físico a nivel del sistema operativo permitiendo
múltiples servidores virtuales aislados y seguros correr en un solo servidor
físico. El entorno del sistema operativo “guest” comparte el mismo sistema
operativo que el del sistema “host” (el mismo kernel del sistema operativo es
usado para implementar el entorno del “guest”). Las aplicaciones que corren
en un entorno “guest” dado lo ven como un sistema autónomo. Ejemplos:
Linux-VServer, Virtuozzo, OpenVZ, Solaris Containers y FreeBSD Jails.
Las aplicaciones que trabajan dentro de los invitados lo hacen como si
estuviesen funcionando en un computador dedicado para ellos. Esta forma de
virtualizar también es conocida como virtualización en contenedores pues los
SO invitados están contenidos en una especie de caja que le permita trabajar
de forma casi independiente, claro todo esto basado en la disponibilidad del
SO anfitrión quien por obvias razones debe estar funcionando bien primero
para permitir el funcionamiento de los invitados. Esta forma de virtualizar es
eficiente e ideal cuando se requieren maquinas virtuales con un mismo
sistema operativo, también reduce los costos de licencias pues con un solo
sistema operativo se pueden montar el anfitrión y todas sus maquinas
virtuales.
Algunas de las compañías mas importantes en esta franja de la virtualización
son por supuesto VMware con VMware server, Sun como parte del sistema
operativo Solaris, SWsoft quien ofrece la versión comercial de Virtuozzo, y
Microsoft con su nuevo Hyper‐V.
VIRTUALIZACIÓN DE APLICACIONES.
Consiste en el hecho de correr una desktop o una aplicación de server
localmente, usando los recursos locales, en una máquina virtual apropiada.
Esto contrasta con correr la aplicación como un software local convencional
(software que fueron “instalados” en el sistema). Semejantes aplicaciones
virtuales corren en un pequeño entorno virtual que contienen los
componentes necesarios para ejecutar, como entradas de registros, archivos,
entornos variables, elementos de uso de interfaces y objetos globales. Este
entorno virtual actúa como una capa entre la aplicación y el sistema
operativo, y elimina los conflictos entre aplicaciones y entre las aplicaciones
y el sistema operativo. Los ejemplos incluyen el Java Virtual Machine de
Sun, Softricity, Thinstall, Altiris y Trigence (esta metodología de
virtualización es claramente diferente a las anteriores; solo una pequeña línea
divisoria los separa de entornos de máquinas virtuales como Smalltalk,
FORTH, Tel, P-code).
Figura 11: Virtualización de Aplicaciones
b) VIRTUALIZACIÓN DE RECURSOS
Permite la agrupación de diversos dispositivos dando la idea de ser uno sólo, o la
partición de un dispositivo en varios de forma virtual. Se originó a base de la
virtualización de plataforma, definiéndose como la abstracción de los recursos
específicos de un sistema, es decir, como capacidad de espacio usado. De esta
forma, se podrá simular los recursos de una computadora o máquina, de modo
que podremos diferenciar de ella el nombre de los espacios, recursos de redes
(VNP), etc. Este tipo de virtualización permite:
Agrupar los recursos de tal manera que sean vistos como uno, como por
ejemplo:
- RAID (Redundant Array of Inexpensive Disks): simula un único
dispositivo de almacenamiento a partir de múltiples dispositivos.
- LVM (Logical Volume Management): combina muchos discos en un
gran disco lógico.
- SAN (Storage Area Network): simula dispositivos de almacenamiento
locales a partir de dispositivos remotos.
- Virtualización de almacenamiento: Que es la virtualización del
almacenamiento físico al almacenamiento lógico.
- Virtualización de Redes y equipamiento de redes: Se utilizan para
trabajar múltiples enlaces combinados mientras ofrecen un enlace único
y con mayor amplitud de banda
- VNP (Red Privada Virtual): Vendría a ser la extensión de una red local
a Internet
- CLUSTER: combinan múltiples computadoras en una gran mega-
computadora. Son un grupo de PCs construidos con hardware barato
conectados en red que se comportan como un único computador de gran
potencia al estar juntos.
Dividir los recursos en múltiples recursos de manera que cada uno sea
independiente:
- Partición de disco duro: De esta manera podemos tener cada espacio
virtual de manera específica para cada función.
- Partición de ancho de banda: Así, podremos dividir la conexión en
varias multiconexiones virtuales.
- Zoning: Divide un ancho de banda en una red de almacenamiento.
c) OTROS TIPOS DE VIRTUALIZACIÓN
VIRTUALIZACIÓN DE CLIENTES
Clientes son aquellos computadores de escritorio, portátiles o terminales que
se conectan a uno o varios servidores para hacer el trabajo que necesitan,
esta idea es muy popular en las compañías, relacionado a arquitectura cliente
servidor.
Virtualización de clientes es la virtualización que se produce en maquinas
que se conectan a los servidores para realizar su trabajo, ósea en clientes. La
razón del porque se podría virtualizar clientes es muy sencilla, imagínese una
compañía mediana que tenga unos 500 usuarios, ósea 500 computadores en
diferentes departamentos, ahora imagine que usted trabaja para el
departamento de sistemas y que le toca actualizar un programa o
simplemente revisar y borrar archivos no deseados o programas que son
instalados sin autorización. Pues si no tiene unas restricciones fuertes
montadas en el sistema la otra opción seria ir de computador en computador
y hacer lo que tiene que hacer. Ahora imagine que en su compañía usan
virtualización de clientes (Citrix o algo parecido) pues lo único que usted
tiene que hacer es ir al servidor o los servidores donde están instalados los
clientes y hacer las actualizaciones. Estamos hablando ahora que en vez de
tener que ir a cada uno de sus clientes usted lo hace en un solo punto y una
sola vez.
EMPAQUETAMIENTO DE APLICACIONES O PROGRAMAS.
Es cuando se instala un programa dentro de un contenedor que aísla el
programa e impide que este pueda afectar el sistema operativo del
computador. El contenedor le provee de forma virtual al programa instalado
todos los recursos que el necesita, como archivos necesarios, registro y
estructura de datos. La idea de esta tecnología es aislar los programas entre si
para que no se afecten los unos a los otros y obviamente por seguridad, pues
de esta forma ningún programa puede comprometer la seguridad del sistema
operativo o crear o copiar virus. Algunos de las compañías que proporcionan
este tipo de tecnología son Altiris con su SVS, Thinstall o SoftGrid de
Microsoft.
PRESENTACIÓN DE PROGRAMAS EN TIEMPO REAL.
Es cuando un programa funciona en el cliente a través de un contenedor que
aísla completamente el programa de los recursos de su PC y que permita que
el programa corra en un servidor o sitio remoto y que básicamente usted solo
puede interactuar con el programa a través del teclado y el mouse. Esta
forma de virtualización soluciona el problema de tener un programa
actualizado con la última versión para todos los usuarios, pues usted solo
tendrá que mantener una copia actualizada en el servidor que es la que es
accesada por el cliente. Esta es una solución muy buena en ambientes de
oficina donde el tráfico de la red es en su mayoría interno y los clientes
siempre están conectados. Algunos ejemplos de esta forma de virtualización
es Citrix con su Presentation Server.
VIRTUALIZACIÓN DE SERVIDORES.
Esta es probablemente el tipo de virtualización mas usado en todo el mundo,
y es por las ventajas que genera el virtualizar un servidor en ahorro de
energía, de espacio y en facilidad de administración de menos servidores
físicos, de esto hablaremos en “Razones para virtualizar”. Para esto no hay
definición especifica que sea diferente de las antes planteadas, pues
virtualización de servidores es como su nombre lo indica la virtualización de
un servidor, y sabemos que servidores son aquellos computadores
principales a los que los clientes u otros computadores se conectan para
obtener archivos, impresoras o en general manejar todos los recursos de la
red.
1.8. USOS DE LA VIRTUALIZACIÓN
Los usos más comunes son:
a) CONSOLIDACIÓN DE SERVIDORES.
Se ocupa de la tecnología de virtualización para consolidar muchos servidoresen
uno o pocos servidores virtuales. De este modo el servidor físico es
transformado en una máquina virtual anfitrión residente en una máquina virtual
del sistema principal, Eso es conocido también como Physical-to-Virtual o
transformación “P2V”. En la práctica esto permite administrar varios servidores
físicos como si fueran uno solo.
b) RECUPERACIÓN DE FALLAS – DISASTER RECOVERY.
Las máquinas virtuales pueden utilizarse como ambientes de respaldo en vivo -
hot standby- para los servidores de producción físicos. Esto permite cambiar la
filosofía clásica del Backup-and-Restore por medio de la capacidad de hacer
boot de los respaldos imágenes en las máquinas virtuales que están en vivo,
posibilitando que éstas tomen la carga del servidor de producción que se está
yendo fuera de servicio.
c) PORTABILIDAD PARA APLICACIONES.
Para hacer portables las aplicaciones para los dispositivos USB –Pen Drive por
ejemplo- los desarrolladores de software tienen que hacer que el registro –clave
de autorización de uso- y sus archivos almacenados aparezcan siempre como si
estuvieran en el directorio en que normalmente operan. Esto es particularmente
complicado para aplicaciones como el Adobe Photoshop o el Microsoft Word,
luego hacer que este tipo de aplicaciones corran en directorios distintos al en que
fueron instaladas plantea un gran desafío técnico.
d) LEGACY APPLICATIONS.
La operación de estas aplicaciones puede ser muy bien atendida por máquinas
virtuales. Es común que muchas de estas aplicaciones legacy no puedan
funcionar en los procesadores y sistemas operativos actuales. Y, aún si pueden
hacerlo terminan subutilizándolos de manera que la virtualización termina
siendo una muy buena alternativa.
e) AMBIENTES PARA PRUEBAS – SANDBOXES.
Las máquinas virtuales pueden usarse para generar ambientes seguros, aislados
para probar aplicaciones o sistemas nuevos cuyo comportamiento está recién
conociéndose. Estos ambientes se pueden crear dinámicamente, según sean las
necesidades del software que se necesita probar.
f) INFRAESTRUCTURA VIRTUAL
Una infraestructura virtual consiste en el mapping dinámico de recursos físicos
en función de las necesidades de la empresa. Una máquina virtual representa los
recursos físicos de un único computador, mientras que una infraestructura virtual
representa los recursos físicos de la totalidad del entorno de TI, aglutinando
computadores x86, así como su red y almacenamiento asociados, en un pool
unificado de recursos de TI.
Estructuralmente, una infraestructura virtual consta de los siguientes
componentes:
Hipervisor de un solo nodo para hacer posible la virtualización de todos los
computadores x86.
Un conjunto de servicios de infraestructura de sistemas distribuida basada en
la virtualización, como gestión de recursos, para optimizar los recursos
disponibles entre las máquinas virtuales.
Soluciones de automatización que proporcionen capacidades especiales para
optimizar un proceso de TI concreto, como provisioning o recuperación ante
desastres. Mediante la separación de la totalidad del entorno de software de
su infraestructura de hardware subyacente, la virtualización hace posible la
reunión de varios servidores, estructuras de almacenamiento y redes en pools
compartidos de recursos que se pueden asignar de forma dinámica, segura y
fiable a las aplicaciones según sea necesario. Este enfoque innovador permite
a las organizaciones crear una infraestructura informática con altos niveles
de utilización, disponibilidad, automatización y flexibilidad utilizando
componentes básicos de servidores económicos y estándar del sector.
Figura 12: Vitualización de Infraestructura
Las soluciones de infraestructura virtual son ideales para entornos de producción
en parte debido a que se ejecutan en servidores y escritorios estándar de la
industria y son compatibles con una amplia gama de sistemas operativos y
entornos de aplicación, así como de infraestructuras de red y almacenamiento.
- Varios sistemas operativos distintos pueden coexistir sobre la misma
computadora, en sólido aislamiento el uno del otro, por ejemplo para
probar un sistema operativo nuevo sin necesidad de instalarlo
directamente.
- La máquina virtual puede proporcionar una arquitectura de
instrucciones (ISA) que sea algo distinta de la verdadera máquina. Es
decir, podemos simular hardware.
- Varias máquinas virtuales (cada una con su propio sistema operativo
llamado sistema operativo "invitado" o "guest"), pueden ser
utilizadas para consolidar servidores. Esto permite que servicios que
normalmente se tengan que ejecutar en computadoras distintas para
evitar interferencias, se puedan ejecutar en la misma máquina de
manera completamente aislada y compartiendo los recursos de una
única computadora. La consolidación de servidores a menudo
contribuye a reducir el coste total de las instalaciones necesarias para
mantener los servicios, dado que permiten ahorrar en hardware.
- La virtualización es una excelente opción hoy día, ya que las
máquinas actuales (Laptops, desktops, servidores) en la mayoría de
los casos están siendo "sub-utilizados" (gran capacidad de disco duro,
memoria RAM, etc.), llegando a un uso de entre 30% a 60% de su
capacidad. Al virtualizar, la necesidad de nuevas máquinas en una ya
existente permite un ahorro considerable de los costos asociados
(energía, mantenimiento, espacio, etc).
b) MÁQUINAS VIRTUALES DE PROCESO
Una máquina virtual de proceso, a veces llamada "máquina virtual de
aplicación", se ejecuta como un proceso normal dentro de un sistema operativo
y soporta un solo proceso. La máquina se inicia automáticamente cuando se
lanza el proceso que se desea ejecutar y se detiene para cuando éste finaliza.
Su objetivo es el de proporcionar un entorno de ejecución independiente de la
plataforma de hardware y del sistema operativo, que oculte los detalles de la
plataforma subyacente y permita que un programa se ejecute siempre de la
misma forma sobre cualquier plataforma.
El ejemplo más conocido actualmente de este tipo de máquina virtual es la
máquina virtual de Java. Otra máquina virtual muy conocida es la del entorno
.Net de Microsoft que se llama "Common Language Runtime".
Figura 15: Funcionamiento de la máquina virtual de Java, una de las máquinas virtuales de proceso más populares.
2.3. INCONVENIENTES DE LAS MÁQUINAS VIRTUALES
Una de las razones del porque las máquinas virtuales, no son la panacea de la computación, es que agregan gran complejidad al sistema en tiempo de ejecución. La principal desventaja de las máquina virtual, es que en la aplicación de algunos proceso tendrá como efecto la lentitud del computador, es decir, la computadora en la cual se está ejecutando este proceso debe tener una capacidad bastante notable “debe ser de gran capacidad o potente”.
Los lenguajes basados en máquina virtual, poseen una desventaja es que efectivamente son más lentos que los lenguajes completamente compilados, debido a la sobrecarga que genera tener una capa de software intermedia entre la aplicación y el hardware de la computadora, sin embargo, Esta desventaja no es demasiado crítica.