VIRTUALIZACION final.doc
-
Upload
gelitochess -
Category
Documents
-
view
79 -
download
3
Transcript of VIRTUALIZACION final.doc
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.
Se han diseñado las soluciones para que funcionen de manera independiente del
hardware y del sistema operativo y poder brindar a los clientes amplias
posibilidades de elección de plataforma. Como resultado, son soluciones que
proporcionan un punto de integración clave para los proveedores de hardware y
gestión de infraestructuras de cara a ofrecer un valor único y aplicable por igual
en todos los entornos de aplicación y sistemas operativos.
Las empresas que han adoptado estas soluciones de infraestructura virtual nos
han comunicado unos clarísimos resultados positivos, entre ellos:
Índices de utilización del 60 al 80% para servidores x86 (frente al 5 a 15%
en hardware no virtualizado)
Capacidad para el provisioning de nuevas aplicaciones en cuestión de
minutos, en lugar de días o semanas
85% de mejora en tiempo de recuperación de paradas imprevistas
1.9. VENTAJAS DE LA VIRTUALIZACION
Desde una perspectiva de negocio, hay muchas razones para utilizar virtualización.
La mayoría están relacionadas con la consolidación de servidores. Simple, si se
puede virtualizar un número de sistemas infrautilizados en un solo servidor, habrá
ahorro de energía, espacio, capacidad de refrigeración y administración ya que
tendremos menos servidores. Como puede ser difícil determinar el grado de
utilización de un servidor, las tecnologías de virtualización soportan la migración
en directo. La migración en directo permite que un sistema operativo y sus
aplicaciones se muevan a un nuevo servidor para balancear la carga sobre el
hardware disponible.
La virtualización también es importante para los desarrolladores. El núcleo Linux
ocupa un solo espacio de direcciones, lo que significa que un fallo en el núcleo o en
cualquier driver provoca la caída del sistema operativo completo. La virtualización
supone que puedes ejecutar varios sistemas operativos, y si uno cae debido a un
fallo, el hipervisor y el resto de sistemas operativos continuarán funcionando. Esto
puede hacer que depurar el núcleo sea una tarea más parecida a depurar
aplicaciones en el espacio del usuario.
La principal ventaja viene dada por el hecho de que en un único equipo es posible
ejecutar numerosas máquinas virtuales, algo que antes habría requerido numerosos
equipos, produciendo:
Reducción de espacio físico ocupado.
Reducción de consumo eléctrico.
Reducción de calor en los datacenters.
Mayor seguridad: en las empresas o instituciones de bajo presupuesto se suele
utilizar un único servidor para montar todos los servicios, lo que hace que una
vulnerabilidad en cualquiera de los servicios prestados exponga a todos los
demás. Con las máquinas virtuales es posible pensar una máquina por servicio
(o agrupando por tipos de servicios).
Facilidad de administración: al reducir la cantidad de equipos a administrar se
facilita el trabajo en este aspecto.
Mayor disponibilidad: con servidores físicos cualquier cambio de hardware
requería apagar la máquina y con ella dar de baja los servicios para realizar el
mantenimiento. Con las máquinas virtuales es posible moverlas en caliente a
otro servidor, apagar el que se requiera y volver a restaurarlas luego al servidor
original sin necesidad de apagar las máquinas virtuales en ningún momento.
Mejora en la tolerancia a fallos: replicar una máquina virtual es mucho más
sencillo que replicar una máquina física. Aún más, es mucho más económico
tener dos máquinas virtuales exactamente idénticas encendidas todo el tiempo
que dos máquinas físicas.
1.10. PLATAFORMAS DE VIRTUALIZACIÓN
Existen numerosas plataformas para virtualizar. Los más populares de ellos son:
KVM: utiliza virtualización completa por hardware y requiere que el sistema
operativo host sea Linux. Es Open Source y gratuito.
Virtualbox: propiedad de Sun desde hace ya un tiempo, es un producto
Open Source con versiones para Windows, Linux, Mac OS X y OpenSolaris,
VirtualBox permite realizar virtualización completa eligiendo traducción
binaria o asistida por hardware.
VMware: VMware es quizá el producto con más experiencia y madurez en
el mercado. Tiene muchísimas versiones diferentes que soportan múltiples
técnicas de virtualización. Entre ellas, la gama ESX instala directamente el
hypervisor sobre el hardware, sin necesidad de otro sistema operativo que le
sirva de host. Este tipo de plataforma se denomina precisamente non-hosted.
Puede accederse a varias versiones gratuitas y otras son pagas (algunas de
ellas bastante costosas!).
Xen: corre sobre hosts Linux y soporta paravirtualización y virtualización
completa por hardware. Es un muy buen producto muy popular entre los
usuarios de Linux, sobre todo en plataformas de paravirtualización. También
es Open Source.
1.11. OTROS PRODUCTOS Y TECNOLOGÍAS
Bochs y QEMU son emuladores de PC que permiten que sistemas operativos
como Windows o Linux se ejecuten en el espacio de usuario de un sistema
operativo Linux.
z/VM es el sistema operativo VM más nuevo para la arquitectura
z/Architecture de 64 bits.
z/VM proporciona virtualización completa con asistencia de hardware y
soporta un amplio abanico de sistemas operativos, incluido Linux.
User-mode Linux es otra solución de fuente abierta para la
paravirtualización. Cada sistema operativo huesped se ejecuta como un
proceso del sistema operativo anfitrion.
coLinux, o Cooperative Linux, es una solución de virtualización que permite
a dos sistemas operativos compartir de forma cooperativa el hardware
subyacente.
Linux-Vserver es una solución de virtualización a nivel de sistema operativo
para los sistemas GNU/Linux que aisla de forma segura a los servidores
hospedados.
OpenVZ es una solución de virtualización a nivel de sistema operativo que
soporta puntos de control y migración de VPSs sobre la marcha.
Linux KVM es la primera tecnologia de virtualización que ha sido capaz de
integrarse en la línea principal de producción del núcleo Linux. Con solo un
módulo del núcleo, un núcleo Linux que se ejecute sobre hardware con
soporte para la virtualización es capaz de actuar como hipervisor y soportar
sistemas operativos Linux y Windows sin modificar como huespedes.
Order the SEK for Linux, dos DVDs con las últimas versiones de evaluación
de software de IBM para Linux: DB2, Lotus, Rational, Tivoli y WebSphere.
Virtual Linux — IES Puig Castellar
CAPITULO II
MAQUINAS VIRTUALES
2.1. LAS MAQUINAS VIRTUALES
En informática una máquina virtual es un software que emula a una computadora
y puede ejecutar programas como si fuese una computadora real. Este software en
un principio fue definido como "un duplicado eficiente y aislado de una máquina
física". La acepción del término actualmente incluye a máquinas virtuales que no
tienen ninguna equivalencia directa con ningún hardware real.
Una característica esencial de las máquinas virtuales es que los procesos que
ejecutan están limitados por los recursos y abstracciones proporcionados por ellas.
Estos procesos no pueden escaparse de esta "computadora virtual".
Uno de los usos domésticos más extendidos de las máquinas virtuales es ejecutar
sistemas operativos para "probarlos". De esta forma podemos ejecutar un sistema
operativo que queramos probar (Linux, por ejemplo) desde nuestro sistema
operativo habitual (Mac OS X por ejemplo) sin necesidad de instalarlo
directamente en nuestra computadora y sin miedo a que se desconfigure el sistema
operativo primario.
Figura 13: Arquitectura típica de una máquina virtual.
2.2. TIPOS DE MÁQUINAS VIRTUALES
Las máquinas virtuales se pueden clasificar en dos grandes categorías según su
funcionalidad y su grado de equivalencia a una verdadera máquina.
Máquinas virtuales de sistema (en inglés System Virtual Machine)
Máquinas virtuales de proceso (en inglés Process Virtual Machine)
a) MÁQUINAS VIRTUALES DE SISTEMA
Las máquinas virtuales de alivio sistema, también llamadas máquinas virtuales
de hardware, permiten a la máquina física subyacente multiplexarse entre
varias máquinas virtuales, cada una ejecutando su propio sistema operativo. A
la capa de software que permite la virtualización se la llama monitor de
máquina virtual o "hypervisor". Un monitor de máquina virtual puede
ejecutarse o bien directamente sobre el hardware o bien sobre un sistema
operativo ("host operating system").
Figura 14: Funcionamiento de VMWare, una de las máquinas virtuales de sistema más populares.
APLICACIONES DE LAS MÁQUINAS VIRTUALES DE
SISTEMA
- 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.
Una falla de hardware equivale a la falla de todos los sistemas virtuales que operan sobre el mismo.
Para asegurar los servicios se deben adquirir hardware de gran porte y por consiguiente alto costo.
2.4. TÉCNICAS PARA LA CREACIÓN DE MAQUINAS VIRTUALES
a) EMULACIÓN DEL HARDWARE SUBYACENTE (EJECUCIÓN
NATIVA)
Esta técnica se suele llamar virtualización completa (full virtualization) del
hardware, y se puede implementar usando un hypervisor de Tipo 1 o de Tipo
2:
El tipo 1 se ejecuta directamente sobre el hardware
El tipo 2 se ejecuta sobre otro sistema operativo.
Cada máquina virtual puede ejecutar cualquier sistema operativo soportado por
el hardware subyacente. Así los usuarios pueden ejecutar dos o más sistemas
operativos distintos simultáneamente en computadoras "privadas" virtuales.
Figura 16: Arquitectura de Monitor de tipo I.
Figura 17: Arquitectura de Monitor de tipo II.
El sistema pionero que utilizó este concepto fue la CP-40, la primera versión
(1967) de la CP/CMS de IBM (1967-1972) y el precursor de la familia VM de
IBM (de 1972 en adelante). Con la arquitectura VM, la mayor parte de
usuarios controlan un sistema operativo monousuario relativamente simple
llamado CMS que se ejecuta en la máquina virtual VM.
Actualmente tanto Intel como AMD han introducido prestaciones a sus
procesadores x86 para permitir la virtualización de hardware.
b) EMULACIÓN DE UN SISTEMA NO NATIVO
Las máquinas virtuales también pueden actuar como emuladores de hardware,
permitiendo que aplicaciones y sistemas operativos concebidos para otras
arquitecturas de procesador se puedan ejecutar sobre un hardware que en teoría
no soportan. Algunas máquinas virtuales emulan hardware que sólo existe
como una especificación. Por ejemplo:
La máquina virtual P-Code que permitía a los programadores de Pascal
crear aplicaciones que se ejecutasen sobre cualquier computadora con esta
máquina virtual correctamente instalada.
La máquina virtual de Java.
La máquina virtual del entorno .NET.
Open Firmware
Esta técnica permite que cualquier computadora pueda ejecutar software
escrito para la máquina virtual. Sólo la máquina virtual en sí misma debe ser
portada a cada una de las plataformas de hardware.
c) VIRTUALIZACIÓN A NIVEL DE SISTEMA OPERATIVO
Esta técnica consiste en dividir una computadora en varios compartimentos
independientes de manera que en cada compartimento podamos instalar un
servidor. A estos compartimentos se los llama "entornos virtuales". Desde el
punto de vista del usuario, el sistema en su conjunto actúa como si realmente
existiesen varios servidores ejecutándose en varias máquinas distintas. Dos
ejemplos son las zonas de Solaris (Solaris Zones) y la técnica de Micro
Partioning de AIX.
2.5. MÁQUINAS VIRTUALES DE PROCESO
Common Language Runtime - C#, Visual Basic .NET, J#, Managed C++
EiffelStudiopara el lenguaje de programación Eiffel
Lenguaje de programación Erlang
Forth virtual machine - Forth
Glulx - Glulx, Z-code
Harbour - Harbour virtual machine
Hec - Hasm Assembler
Inferno - Limbo
Java virtual machine - Java, Nice, NetREXX
Low Level Virtual Machine (LLVM) - actualmente C, C++, Stacker
Lua
Macromedia Flash Player - SWF
MMIX - MMIXAL
Neko virtual machine actualmente Neko y haXe
O-code machine - BCPL
P-code machine - Pascal
Parrot - Perl 6
Perl virtual machine - Perl
Portable.NET - C#, Visual Basic .NET, J#, Managed C++
YARV - Ruby
Rubinius - Ruby
ScummVM - Scumm
SECD machine - ISWIM, Lispkit Lisp
Sed the stream-editor can also be seen as a VM with 2 storage spaces.
Smalltalk virtual machine - Smalltalk
SQLite virtual machine - SQLite opcodes
Squeak virtual machine - Squeak
SWEET16
TrueType virtual machine - TrueType
Valgrind - chequeo de accesos a memoria y "leaks" en x86/x86-64 code under
Linux
VX32 virtual machine - application-level virtualization for native code
Virtual Processor (VP) from Tao Group (UK).
Waba - similar a Java, para dispositivos pequeños
Warren Abstract Machine - Prolog, CSC GraphTalk
Z-machine - Z-Code
Zend Engine - PHP
2.6. MÁQUINAS VIRTUALES DE SISTEMA
VThere (de Sentillion, Inc.)
ATL (A MTL Virtual Machine)
Bochs emulador de PC x86 y AMD64, portátil y open source
CoLinux Open Source Linux inside Windows
Denali , uses paravirtualization of x86 for running para-virtualized PC operating
systems.
FAUmachine
Hercules emulator , free System/370, ESA/390, z/Mainframe
Integrity Workstation Green Hills Software
LilyVM is a lightweight virtual machine An introduction
Microsoft Virtual PC y Microsoft Virtual Server
OKL4
Parallels Workstation , virtualización de x86 para ejecutar sistemas operativos
Parallels Desktop for Mac , virtualización de x86 para ejecutar máquinas
virtuales en Mac OS X
QEMU , muy popular en entornos Linux
SheepShaver .
Simics
SVISTA
Trango Virtual Processors
TwoOStwo
User-mode Linux
VirtualBox
Virtual Iron (Virtual Iron 3.1)
Virtual Operating System de Star Virtual Machines
VM de IBM
VMware (ESX Server, Fusion, Virtual Server, Workstation, Player y ACE)
Xen
KVM
IBM POWER SYSTEMS
2.7. MÁQUINAS VIRTUALES A NIVEL DE SISTEMA OPERATIVO
OpenVZ
Virtuozzo
FreeVPS
Linux-VServer
FreeBSD Jails
Solaris Containers
AIX Workload Partitions
2.8. LA MÁQUINA VIRTUAL DE JAVA COMO EJEMPLO DE UNA MV
La MV de Java es una máquina de pila. Las instrucciones interpretadas por ella
manipulan datos almacenados como elementos en una pila. El contenido
ejecutable de un archivo de bytecodes contiene un vector de instrucciones
bytecode para cada método. Los bytecodes son instrucciones para la MV, que
tiene algunos registros de variables locales y una pila para la evaluación de
expresiones. Las primeras variables locales son inicializadas con los parámetros
actuales. Cada variable local o elemento de la pila es una palabra que corresponde
a un entero de 32 bits, a un punto flotante o a una referencia a objeto (puntero).
Para puntos flotantes dobles y enteros largos se utilizan dos huecos de la pila.
Figura 18: Ejecución de un programa Java
El lenguaje Java es a la vez compilado e interpretado. Con el compilador se
convierte el código fuente que reside en archivos cuya extensión es .java, a un
conjunto de instrucciones que recibe el nombre de bytecodes que se guardan en un
archivo cuya extensión es .class. Estas instrucciones son independientes del tipo
de computador. El intérprete ejecuta cada una de estas instrucciones en un
computador específico (Windows, Macintosh, etc). Solamente es necesario, por
tanto, compilar una vez el programa, pero se interpreta cada vez que se ejecuta en
un computador.
Cada intérprete Java es una implementación de la Máquina Virtual Java (JVM).
Los bytecodes posibilitan el objetivo de "write once, run anywhere", de escribir el
programa una vez y que se pueda correr en cualquier plataforma que disponga de
una implementación de la JVM. Por ejemplo, el mismo programa Java puede
correr en Windows 98, Solaris, Macintosh, etc.
Java es, por tanto, algo más que un lenguaje, ya que la palabra Java se refiere a
dos cosas inseparables: el lenguaje que nos sirve para crear programas y la
Máquina Virtual Java que sirve para ejecutarlos. Como vemos en la figura, el API
de Java y la Máquina Virtual Java forman una capa intermedia (Java platform) que
aísla el programa Java de las especificidades del hardware (hardware-based
platform).
Figura 19: Arquitectura de la VM de Java
a) PROPIEDADES DEL LENGUAJE JAVA
Se dice que el código Java es portable, debido a que es posible ejecutar el
mismo archivo de clase (.class), sobre una amplia variedad de arquitecturas de
hardware y de software, sin ninguna modificación. Java es un lenguaje
dinámico, debido a que las clases son cargadas en el momento en que son
necesitadas (dinámicamente), ya sea del sistema de archivos local o desde
algún sitio de la red mediante algún protocolo URL. Java tiene la capacidad
de aumentar su sistema de tipos de datos dinámicamente o en tiempo de
ejecución. Este "enlace tardío" (late-binding) significa que los programas sólo
crecen al tamaño estrictamente necesario, aumentando así la eficiencia del uso
de los recursos. Java hace menos suposiciones sobre las implantaciones de las
estructuras de datos, que los lenguajes estáticos de "enlace temprano" o en
tiempo de compilación (early-binding) como C o C++.
Debido a que Java nació en la era post-Internet, fue diseñado con la idea de la
seguridad y la fiabilidad, por lo que se le integraron varias capas de seguridad
para evitar que programas maliciosos pudiesen causar daños en los sistemas,
sobre los que ejecuta la implantación de la Máquina Virtual Java. El lenguaje
Java no está diseñado solamente para crear applets que corren en la ventana
del navegador. Java es un lenguaje de propósito general, de alto nivel, y
orientado a objetos.
Los tipos de programas más comunes que se pueden hacer con Java son los
applets (se ejecutan en el navegador de la máquina cliente) y las aplicaciones
(programas que se ejecutan directamente en la JVM). Otro tipo especial de
programa se denomina servlet que es similar a los applets pero se ejecutan en
los servidores Java.
La API de Java es muy rica, está formada por un conjunto de paquetes de
clases que le proporcionan una gran funcionalidad. El núcleo de la API viene
con cada una de las implementaciones de la JVM:
Lo esencial: tipos de datos, clases y objetos, arrays, cadenas de caracteres
(strings), subprocesos (threads), I/O, propiedades del sistema, etc.
Applets
Manejo de la red (networking)
Internacionalización
Seguridad
Componentes (JavaBeans)
Persistencia (Object serialization)
Conexión a bases de datos (JDBC)
Java proporciona también extensiones, por ejemplo define un API para 3D,
para los servidores, telefonía, reconocimiento de voz, etc.
b) LA MÁQUINA VIRTUAL JAVA
La Máquina Virtual Java (JVM) es el entorno en el que se ejecutan los
programas Java, su misión principal es la de garantizar la portabilidad de las
aplicaciones Java. Define esencialmente un computador abstracto y especifica
las instrucciones (bytecodes) que este computador puede ejecutar. El intérprete
Java específico ejecuta las instrucciones que se guardan en los archivos cuya
extensión es .class. Las tareas principales de la JVM son las siguientes:
Reservar espacio en memoria para los objetos creados
Liberar la memoria no usada (garbage collection).
Asignar variables a registros y pilas
Llamar al sistema huésped para ciertas funciones, como los accesos a los
dispositivos
Vigilar el cumplimiento de las normas de seguridad de las aplicaciones
Java
Esta última tarea, es una de las más importantes que realiza la JVM. Además,
las propias especificaciones del lenguaje Java contribuyen extraordinariamente
a este objetivo:
Las referencias a arrays son verificadas en el momento de la ejecución del
programa.
No hay manera de manipular de forma directa los punteros.
La JVM gestiona automáticamente el uso de la memoria, de modo que no
queden huecos.
No se permiten realizar ciertas conversiones (casting) entre distintos tipos
de datos.
Por ejemplo, cuando el navegador encuentra una página web con un applet,
pone en marcha la JVM y proporciona la información que aparece en la
etiqueta <APPLET > ... </APPLET>. El cargador de clases dentro de la JVM
ve que clases necesita el applet. Dentro del proceso de carga, las clases se
examinan mediante un verificador que asegura que las clases contienen código
válido y no malicioso. Finalmente, se ejecuta el applet.
Figura 20: La Máquina Virtual Implementada para unavariedad de plataformas.
c) ARQUITECTURA DE LA PLATAFORMA JAVA (SISTEMA EN
TIEMPO DE EJECUCIÓN)
Sun utiliza el término "Máquina Virtual Java", para referirse a la
especificación abstracta de una máquina de software para ejecutar programas
Java. La especificación de esta máquina virtual, define elementos como el
formato de los archivos de clases de Java (.class), así como la semántica de
cada una de las instrucciones que componen el conjunto de instrucciones de la
máquina virtual.
A las implantaciones de esta especificación se les conocen como "Sistemas en
Tiempo de Ejecución Java". En la figura 2 se puede observar los componentes
típicos de un sistema de tiempo de ejecución.
Ejemplos de Sistemas de tiempo de ejecución son el Navegador de Nestcape,
el Explorador de Microsoft y el programa Java (incluido en el JDK). Un
sistema de tiempo de ejecución incluye típicamente:
Motor de ejecución. El procesador virtual que se encarga de ejecutar el
código (bytecode), generado por algún compilador de Java o por algún
ensamblador del procesador virtual Java.
Manejador de memoria. Encargado de obtener memoria para las nuevas
instancias de objetos, arreglos, etcétera, y realizar tareas de recolección de
basura.
Manejador de errores y excepciones. Encargado de generar, lanzar y
atrapar excepciones.
Soporte de métodos nativos. Encargado de llamar métodos de C++ o
funciones de C, desde métodos Java y viceversa.
Interfaz multihilos. Encargada de proporcionar el soporte para hilos y
monitores.
Cargador de clases. Su función es cargar dinámicamente las clases Java a
partir de los archivos de clase (.class).
Administrador de seguridad. Se encarga de asegurar que las clases
cargadas sean seguras, así como controlar el acceso a los recursos del
sistema.
Figura 21: Arquitectura del Sistema de Tiempo de Ejecución Java.
Adicionalmente, existe un conjunto de clases Java estándar, fuertemente
ligadas a la implantación de cada MVJ en particular. Ejemplos de esto los
tenemos en las clases encargadas de funciones, como los accesos a los recursos
de la red, manejar el sistema de ventanas, los hilos y el sistema de archivos
local. Todos estos elementos en conjunto actúan como una interfaz de alto
nivel, para acceder a los recursos del sistema operativo. Es esta interfaz la
clave de la portabilidad de los programas Java, debido a que
independientemente del hardware o sistema operativo sobre el que se esté
trabajando, la máquina virtual Java oculta todas estas diferencias.
A continuación describiremos con mayor detalle cada uno de estos elementos.
MOTOR DE EJECUCIÓN
Es la entidad de hardware o software, que ejecuta las instrucciones
contenidas en los códigos de operación (bytecodes) que implementan los
métodos Java. En las versiones iniciales de Sun, el motor de ejecución
consistía de un interprete de códigos de operación. En las versiones más
avanzadas de nuestros días, se utiliza la tecnología de "generación de
código justo en el momento" (Just-in-Time code generation), en dónde las
instrucciones que implementan a los métodos, se convierten en código
nativo que se ejecuta directamente en la máquina sobre la que se subyace.
El código nativo se genera únicamente la primera vez que se ejecuta el
código de operación Java, por lo que se logra un aumento considerable en
el rendimiento de los programas.
EL CONJUNTO DE INSTRUCCIONES DEL PROCESADOR
VIRTUAL
Muchas de las instrucciones del procesador virtual Java, son muy similares
a las que se pueden encontrar para los procesadores comunes y corrientes,
como los Intel, es decir, incluyen los grupos de instrucciones típicos como
los aritméticos, los de control de flujo, de acceso a memoria, a la pila,
etcétera. Una de las características más significativas del conjunto de
instrucciones del procesador virtual Java, es que están basadas en la pila y
utilizan "posiciones de memoria" numeradas, en lugar de registros. Esto es
hasta cierto punto lógico, debido a que la máquina virtual está pensada
para correr sobre sistemas con procesadores sustancialmente diferentes. Es
difícil hacer suposiciones sobre el número o tipo de registros que estos
pudiesen tener. Esta característica de estar basada en operaciones sobre la
pila, impone una desventaja a los programas escritos en Java, contra los
lenguajes completamente compilados, como C o C++, debido a que los
compiladores de estos pueden generar código optimizado para la
plataforma particular sobre la que se esté trabajando, haciendo uso de los
registros, etcétera.
Varias de las instrucciones que componen el conjunto de instrucciones del
procesador virtual de Java, son bastante más complejas que las que se
pueden encontrar en procesadores comunes. Ejemplo de ello, tenemos las
casi 20 instrucciones para realizar operaciones, tales como invocar
métodos de objetos, obtener y establecer sus propiedades o generar y
referenciar nuevos objetos. Es evidente que operaciones de este estilo son
de una complejidad considerable y la proyección a sus respectivas
instrucciones, sobre el conjunto de instrucciones del procesador de la
máquina, implicará a varias decenas de esas instrucciones.
EL VERIFICADOR DE JAVA
Como hemos mencionado anteriormente, una de las principales razones
para utilizar una máquina virtual, es agregar elementos de seguridad a
nuestro sistema, por lo que si un intérprete falla o se comporta de manera
aleatoria, debido a código mal formado, es un problema muy serio. La
solución trivial a este problema sería incluir código encargado de capturar
errores y verificar que el código sea correcto. Es evidente que la principal
desventaja de esta solución, es que volveremos a caer en un sistema
sumamente seguro, pero altamente ineficiente. Los diseñadores de Java
tomaron otro camino. Cuando estaban diseñando el conjunto de
instrucciones para la máquina virtual de Java, tenían dos metas en mente.
La primera era que el conjunto de instrucciones fuera similar a las
instrucciones que se pueden encontrar en los procesadores reales. La
segunda era construir un conjunto de instrucciones que fuera fácilmente
verificable.
En Java, justo después de que se obtiene una clase del sistema de archivos
o de Internet, la máquina virtual puede ejecutar un verificador que se
encargue precisamente de constatar que la estructura del archivo de clase
es correcta. El verificador se asegura que el archivo tenga el número
mágico (0xCAFEBABE) y que todos los registros que contiene el archivo
tengan la longitud correcta, pero aún más importante, comprueba que todos
los códigos de operación sean seguros de ejecutar. Es importante notar que
Java no necesita que el verificador se ejecute sobre el archivo de clase,
sino que es activado por el sistema en tiempo de ejecución y sólo sobre
clases que el mismo sistema decida. Por lo común, las clases verificadas
son las provenientes de Internet.
Aún en nuestros días, los cargadores de clases comerciales tienen varios
defectos, por lo que la construcción de mejores verificadores sigue siendo
un problema abierto. Por ejemplo, Karsten Sohr, en septiembre de 1999
encontró que el cargador de Microsoft tiene problemas con los tipos de
datos, entre los bloques de excepciones, lo que puede provocar
forzamientos de conversiones de tipos arbitrarios, comprometiendo la
seguridad del sistema, debido a que de esta manera es posible acceder a
recursos que debieran estar restringidos.
ADMINISTRADOR DE MEMORIA
Java utiliza un modelo de memoria conocido como "administración
automática del almacenamiento" (automatic storage management), en el
que el sistema en tiempo de ejecución de Java mantiene un seguimiento de
los objetos. En el momento que no están siendo referenciados por alguien,
automáticamente se libera la memoria asociada con ellos. Existen muchas
maneras de implementar recolectores de basura, entre ellas tenemos:
- Contabilizar referencias. La máquina virtual Java asocia un contador a
cada instancia de un objeto, donde se refleja el número de referencias
hacia él. Cuando este contador es 0, la memoria asociada al objeto es
susceptible de ser liberada. Aún cuando este algoritmo es muy sencillo
y de bajo costo (en términos computacionales), presenta problemas con
estructuras de datos circulares.
- Marcar e intercambiar (Mark-and-Sweep). Este es el esquema más
común para implementar el manejo de almacenamiento automático.
Consiste en almacenar los objetos en un montículo (heap) de un
tamaño considerable y marcar periódicamente (generalmente mediante
un bit en un campo que se utiliza para este fin) los objetos que no
tengan ninguna referencia hacia ellos. Adicionalmente existe un
montón alterno, donde los objetos que no han sido marcados, son
movidos periódicamente. Una vez en el montículo alterno, el recolector
de basura se encarga de actualizar las referencias de los objetos a sus
nuevas localidades. De esta manera se genera un nuevo montículo, que
contiene únicamente objetos que están siendo utilizados.
ADMINISTRADOR DE ERRORES Y EXCEPCIONES
Las excepciones son la manera como Java indica que ha ocurrido algo
"extraño" durante la ejecución de un programa Java. Comúnmente las
excepciones son generadas y lanzadas por el sistema, cuando uno de estos
eventos ocurre. De la misma manera, los métodos tienen la capacidad de
lanzar excepciones, utilizando la instrucción de la MVJ, athrow.
Todas las excepciones en Java son instancias de la clase
java.lang.Throwable o de alguna otra que la especialice. Las clases
java.lang.Exception y java.lang.Error, heredan directamente de
java.lang.Throwable. La primera se utiliza para mostrar eventos, de los
cuales es posible recuperarse, como la lectura del fin de archivo o la falla
de la red, mientras que la segunda se utiliza para indicar situaciones de las
cuales no es posible recuperarse, como un acceso indebido a la memoria.
Cuando se genera una excepción, el sistema de tiempo de ejecución de
Java, y en particular el manejador (handler) de errores y excepciones,
busca un manejador para esa excepción, comenzando por el método que la
originó y después hacia abajo en la pila de llamadas. Cuando se encuentra
un manejador, éste atrapa la excepción y se ejecuta el código asociado con
dicho manejador. Lo que ocurre después depende del código del
manejador, pero en general, puede suceder que:
Se utilice un goto para continuar con la ejecución del método original
Su utilice un return para salir del método
Se utilice athrow para lanzar otra excepción
En el caso que no se encuentre un manejador para alguna excepción
previamente lanzada, se ejecuta el manejador del sistema, cuya acción
típica es imprimir un mensaje de error y terminar la ejecución del
programa.
SOPORTE PARA MÉTODOS NATIVOS
Las clases en Java pueden contener métodos que no estén implementados
por códigos de operación (bytecode) Java, sino por algún otro lenguaje
compilado en código nativo y almacenado en bibliotecas de enlace
dinámico, como las DLL de Windows o las bibliotecas compartidas SO de
Solaris.
El sistema de tiempo de ejecución incluye el código necesario para cargar
dinámicamente y ejecutar el código nativo que implementa estos métodos.
Una vez que se enlaza el módulo que contiene el código que implementa
dicho método, el procesador virtual atrapa las llamadas a éste y se encarga
de invocarlo. Este proceso incluye la modificación de los argumentos de la
llamada, para adecuarlos al formato que requiere el código nativo, así
como transferirle el control de la ejecución. Cuando el código nativo
termina, el módulo de soporte para métodos nativos se encarga de
recuperar lo resultados y de adecuarlos al formato de la máquina virtual
Java. De manera análoga, el módulo de soporte para código nativo se
encarga de canalizar una llamada a un método escrito en Java, hecha desde
un procedimiento o método nativo.
INTERFAZ DE HILOS
Java es un lenguaje que permite la ejecución concurrente de varios hilos de
ejecución, es decir, el sistema de tiempo de ejecución de Java tiene la
posibilidad de crear más de un procesador virtual Java, donde ejecutar
diferentes flujos de instrucciones, cada uno con su propia pila y su propio
estado local. Los procesadores virtuales pueden ser simulados por software
o implementados mediante llamadas al sistema operativo, sobre el cual
subyace. En el conjunto de instrucciones de la máquina virtual Java, sólo
existen dos directamente relacionadas con los hilos, monitorenter y
monitorexit, que sirven para definir secciones de código, que deben
ejecutarse en exclusión mutua. El resto del soporte de los hilos se realiza
atrapando llamadas a los métodos pertenecientes a la clase
java.lang.Thread.
CARGADOR DE CLASES
Los programas Java están completamente estructurados en clases. Por lo
tanto, una función muy importante del sistema en tiempo de ejecución, es
cargar, enlazar e inicializar clases dinámicamente, de forma que sea
posible instalar componentes de software en tiempo de ejecución. El
proceso de cargado de las clases se realiza sobre demanda, hasta el último
momento posible.
La Máquina Virtual Java utiliza dos mecanismos para cargar las clases. El
primero consiste en un cargador de clases del sistema, cuya función es
cargar todas las clases estándar de Java, así como la clase cuyo nombre es
estrada vía la línea de comandos. De manera adicional, existe un segundo
mecanismo para cargar clases dentro del sistema, utilizando una instancia
de la clase java.lang.ClassLoader o alguna otra definida por el usuario, que
especialice a la anterior. Es importante hacer notar que el cargador de
clases es uno de los recursos que debe proteger el administrador de
seguridad. No debe permitir, por ejemplo, que los applets no confiables
creen sus propios cargadores debido a que puede ser un punto por el que
pueden romperse las restricciones de seguridad.
Los cargadores especializados por los programadores, pueden definir la
localización remota de donde se cargarán las clases o asignar atributos de
seguridad apropiados para sus aplicaciones particulares. Finalmente, se
puede usar a los cargadores para proporcionar espacios de nombres
separados a diferentes componentes de una aplicación.
d) ARQUITECTURA DE SEGURIDAD EN JAVA
Java utiliza una serie de mecanismos de seguridad, con el fin de dificultar la
escritura de programas maliciosos que pudiesen afectar la integridad de las
aplicaciones y los datos de los usuarios. Cada sistema en tiempo de ejecución
Java tiene la capacidad de definir sus propias políticas de seguridad, mediante
la implantación de un "administrador de seguridad" (security manager), cuya
función es proteger al sistema de tiempo de ejecución, definiendo el ámbito de
cada programa Java en cuanto a las capacidades de acceder a ciertos recursos,
etcétera.
Figura 22: Modelo de seguridad del JDK 1.0.
El modelo de seguridad original proporcionado por la plataforma Java, es
conocido como la "caja de arena" (sandbox), que consiste en proporcionar un
ambiente de ejecución muy restrictivo para código no confiable que haya sido
obtenido de la red. Como se muestra en la figura 3 , la esencia del modelo de
la caja de arena, es que el código obtenido del sistema de archivo local es por
naturaleza confiable. Se le permite el acceso a los recursos del sistema, como
el mismo sistema de archivos o los puertos de comunicación. Mientras, el
código obtenido de la red se considera no confiable. Por lo tanto, tiene acceso
únicamente a los recursos que se encuentran accesibles desde la caja de arena.
Como hemos mencionado, la máquina implementa otros mecanismos de
seguridad, desde el nivel de lenguaje de programación, como la verificación
estricta de tipos de datos, manejo automático de la memoria, recolección
automática de basura, verificación de los límites de las cadenas y arreglos,
etcétera. Todo con el fin de obtener, de una manera relativamente fácil, código
"seguro". En segunda instancia, los compiladores y los verificadores de código
intentan asegurar que sólo se ejecuten códigos de ejecución (bytecodes) Java,
con la estructura correcta y no maliciosos. Asimismo, analizamos cómo con el
cargador de clases se pueden definir espacios de nombres locales, lo que ayuda
a garantizar que un applet no confiable pueda interferir con el funcionamiento
de otros programas. Finalmente, el acceso a los recursos importantes del
sistema, es administrado entre el sistema de tiempo de ejecución y el
administrador de seguridad (Security Manager), que es implementado por la
clase java.lang.SecurityManager, que permite a las implantaciones incorporar
políticas de seguridad. De esta manera, es posible para las aplicaciones
determinar si una operación es insegura o contraviene las políticas de
seguridad, antes de ejecutarla.
Figura 23: Modelo de seguridad del JDK 1.1.
El JDK 1.1 introduce el concepto de "applet firmado" (signed applet), en el
que los applets que poseen una firma digital correcta, son considerados como
confiables. Por lo tanto, reciben los mismos privilegios que el código obtenido
del sistema de archivos. Los applets firmados, junto con la firma, se envían en
un archivo de formato JAR (Java Archive). En este modelo de applets sin
firma, continúan corriendo en la caja de arena. En la figura se puede observar
el modelo de seguridad del JDK 1.1.
Finalmente, como se muestra en la figura 23, en la arquitectura de la
plataforma de seguridad de Java 2 se introdujeron diferentes niveles de
restricción, se eliminó la idea de que el código proveniente del sistema de
archivo local siempre es confiable, etcétera.
Figura 24: Modelo de seguridad de Java 2.
CAPITULO III
VIRTUALIZACION DE ESCRITORIOS
3.1. INTRODUCCIÓN
La virtualización de escritorio es un término relativamente nuevo, introducido en
la década de los 90, que describe el proceso de separación entre el escritorio, que
engloba los datos y programas que utilizan los usuarios para trabajar, de la
máquina física. El escritorio "virtualizado" es almacenado remotamente en un
servidor central en lugar de en el disco duro del computador personal. Esto
significa que cuando los usuarios trabajan en su escritorio desde su portátil u
computador personal, todos sus programas, aplicaciones, procesos y datos se
almacenan y ejecutan centralmente, permitiendo a los usuarios acceder
remotamente a sus escritorios desde cualquier dispositivo capaz de conectarse
remotamente al escritorio, tales como un portátil, PC, smartphone o cliente ligero.
La experiencia que tendrá el usuario está orientada para que sea idéntica a la de un
PC estándar, pero desde un dispositivo de cliente ligero o similar, y desde la
misma oficina o remotamente.
Muchas soluciones comerciales también agregan la capacidad de conmutar
algunas sesiones de cliente entrantes (usando un software de rompimiento de
conexión) en dirección a sistemas de escritorio compartido tradicionales como el
Terminal Services de Microsoft o servidores de aplicaciones de Citrix, servidores
blade, o incluso computadores de escritorio físicos e individuales no usados.
3.2. DEFINICION DE VIRTUALIZACION DE ESCRITORIO
La virtualización de escritorios significa, en esencia, el hecho de separar el
software que ejecuta el escritorio (lo que un usuario final ve en su pantalla y
entiende por “Windows”, en palabras llanas) del equipo que el usuario manipula
físicamente. Consecuencia directa de ello es que el escritorio se ejecuta en modo
remoto en otro sistema, el que conocemos como “servidor de escritorio” y que
necesitamos una conexión de red entre el equipo del usuario y ese servidor.
El escritorio “virtualizado” estará almacenado también en el sistema de disco de
ese servidor remoto y no en el disco local del equipo del usuario. Este concepto
tan simple transforma radicalmente la aproximación que hacemos al servicio que
ofrecemos al usuario final, ya que todos los programas, aplicaciones, procesos y
datos se ejecutan y almacenan de forma centralizada. Tenemos dos consecuencias
inmediatas: la gestión de los escritorios de los usuarios se realiza en los sistemas
centrales, ya no necesitamos complejas herramientas distribuidas; el escritorio del
usuario está en un punto fijo y se puede acceder a él desde cualquier dispositivo y
cualquier lugar, por lo que tampoco necesitamos engorrosas herramientas de
sincronización de datos entre sistemas dispersos.
Una tercera consecuencia es que el usuario puede acceder a su escritorio desde
dispositivos muy variados: un PC, un simple navegador, un netbook, un Thin
Client, etc. Lo único que necesita es conectividad al servidor de escritorios, ya sea
desde la red interna o desde Internet.
La infraestructura que nos permite separar el software de escritorio del hardware
se conoce genéricamente como VDI (Virtual desktop infrastructure), aunque el
nombre es un poco engañoso. Cuando se habla de VDI enseguida pensamos en
virtualización de servidores, hipervisores, etc. En realidad en su opción más
simple es posible virtualizar escritorios sin software de virtualización, como
vamos a ver.
3.3. DEFINICIÓN TÉCNICA DE VIRTUALIZACIÓN DE ESCRITORIO
“La virtualización de escritorio consiste en ejecutar nuestro inicio de sesión no en
nuestro computador como venimos haciendo habitualmente sino que se ejecuta en
el servidor y se muestra en el terminal del usuario.”
“La virtualización de escritorio es encapsular y entregar bien el acceso a la
totalidad de un entorno de un sistema de información o del entorno en sí a un
dispositivo remoto. Este dispositivo puede estar basado en una arquitectura de
hardware completamente diferente a la utilizada por el entorno de escritorio
proyectado. También puede tener como base un sistema operativo totalmente
diferente.”
“La virtualización de escritorio es el uso de máquinas virtuales para permitir que
los múltiples usuarios de la red mantengan sus escritorios individuales en un único
servidor u computador central. El equipo central puede estar localizado en una
residencia, en la empresa o en un centro de datos. Los usuarios pueden estar
geográficamente dispersos y estar conectados al equipo central mediante una red
de área local (LAN), una red de área extensa (WAN) o mediante Internet”.
La virtualización de escritorio ofrece ventajas con respecto al modelo tradicional,
en el que cada computador funciona como una unidad completa y autónoma con
su propio sistema operativo, periféricos y aplicaciones. En general los gastos se
reducen porque los recursos pueden ser compartidos y se asignan a los usuarios en
función de sus necesidades. La integridad de la información del usuario se mejora
por que todos los datos se almacenan y se guardan copias de seguridad en el centro
de datos. Los conflictos en el software se minimizan mediante la reducción del
número total de los programas almacenados en los equipos.
A pesar de la distribución de los recursos, todos los usuarios pueden personalizar y
modificar sus equipos de escritorio para satisfacer sus necesidades específicas. De
esta manera, la virtualización de escritorio ofrece una mayor flexibilidad en
comparación con la paradigma cliente / servidor.
Las limitaciones que tiene la virtualización de escritorios son los riesgos de
seguridad que se generan si la red no está bien gestionada, conlleva una pérdida de
autonomía y privacidad del usuario, los desafíos en la creación y el mantenimiento
de los controladores para las impresoras y otros periféricos, dificultad en la gestión
de complejas aplicaciones como las multimedia y problemas de mantenimiento de
direcciones de los usuarios de máquinas virtuales en correspondencia con los del
centro de datos.
3.4. EL ESCRITORIO COMO UN SERVICIO
El escritorio como un servicio es la disposición de la virtualización de escritorio
como un servicio; "transformando los escritorios en servidor de nube" (cloud
service). Hay varias "soluciones diferentes" basadas en la "ejecución local (o
distribuida) y otras basadas en la ejecución centralizada (o remota)". El escritorio
del usuario se ejecuta en el servidor, que puede ser un PC normal, un servidor
dedicado o incluso un dispositivo de hardware fabricado específicamente para
realizar esa tarea. Las órdenes del usuario se transmiten al servidor a través de la
red, y el servidor envía de vuelta los resultados de las acciones. Según el modelo
utilizado, el servidor puede encargarse de ejecutar todas y cada una de las tareas
que requiera el usuario, o puede delegar algunas de las tareas al computador que
esté utilizando el usuario, a fin de reducir la carga de trabajo del servidor y el
tráfico de la red.
Figura 25: Virtualización de Escritorio
El usuario puede tener un computador completo que haya sido configurado para
depender total o parcialmente de las instrucciones del servidor. O puede tener un
aparato llamado "terminal" que haya sido diseñado para esta tarea, al cual
conectará un monitor, un teclado, y un ratón, y con los cuáles usará la terminal
como si se tratase de un computador completo. Esta terminal sólo funcionará
cuando tenga conexión con un servidor adecuado.
3.5. FUNDAMENTOS
Es complejo instalar y mantener equipos de trabajo separados, además los usuarios
han disfrutado de una capacidad casi ilimitada tanto para instalar como para borrar
software. Debido a esto, los departamentos corporativos de tecnología de
información y los usuarios han usado Terminal Services o Presentation Server de
Citrix para proporcionar un entorno de escritorio estable y simple, pudiendo los
usuario estar usando tanto un PC de escritorio como un cliente ligero.
La virtualización del escritorio proporciona muchas de las ventajas de un servidor
de terminales, si es configurado por los administradores de sistemas pueden
proporcionar a los usuarios mucha más flexibilidad, por ejemplo, cada uno puede
tener permitido instalar y configurar sus propias aplicaciones. Los usuarios
también disponen de la capacidad de acceder a sus escritorios virtuales basados en
servidor desde otras localizaciones.
3.6. INFRAESTRUCTURA DE ESCRITORIO VIRTUAL (VDI)
La Infraestructura de escritorio virtual (Virtual Desktop Infrastructure o VDI) es un
modelo arquitectónico emergente donde los sistemas operativos del cliente se
ejecutan en máquinas virtuales (VM) basadas en servidor en el centro de datos e
interactúan con los dispositivos de cliente de los usuarios, como las computadoras
personales o clientes ligeros. Tal como el escritorio remoto de terminal services,
VDI ofrece a TI la capacidad de centralizar el escritorio de un usuario, en vez de
una sesión de servidor; sin embargo se virtualiza todo el entorno del cliente dentro
del hipervisor basado en servidor. Con VDI, el usuario puede adquirir una
experiencia de escritorio rica e individualizada con un total control administrativo
de escritorios y aplicaciones. Sin embargo, aunque esta arquitectura es flexible, se
requieren considerablemente muchos más recursos de hardware de servidor que en
los enfoques de escritorio remoto de terminal.
VDI es más adecuado para trabajadores contratados y extranjeros, para usuarios
que necesitan acceso a su entorno de trabajo desde cualquier lugar, inclusive desde
una computadora personal que no pertenezca a la compañía, como así también para
clientes empresariales con una estrategia centralizada de escritorios para los
trabajadores de oficina.
Figura 26: Infraestructura de Virtualización de escritorios
3.7. ARQUITECTURA TÉCNICA
Hemos visto que la virtualización de escritorios consiste en ejecutar el escritorio
en un sistema distinto del que utiliza el usuario. Ello nos lleva a distinguir
directamente dos capas diferenciadas, el dispositivo de acceso (el equipo físico
donde “teclea” el usuario) y el servidor de escritorio, el equipo central que ejecuta
el software de escritorio (Windows, Gnome, KDE, etc). Cada una de estas dos
capas puede tratarse de forma independiente y podemos encontrar distintas
combinaciones con soluciones variadas en cada una de ellas. Estrictamente, al
menos conceptualmente, las aplicaciones se ejecutan en una tercera capa, los
servidores de aplicaciones. En muchos casos, sin embargo, los servidores de
escritorios también ejecutan aplicaciones (por ejemplo, las ofimáticas), aunque
esto no siempre es así.
Los dispositivos de acceso pueden tener también una tecnología totalmente
distinta a los propios escritorios: así, por ejemplo, podemos acceder a escritorios
Windows desde Thin Clients basados en Linux. El usuario final tendrá la
experiencia de que su dispositivo es un PC con Windows, pero en realidad estará
ejecutando Linux en un dispositivo de acceso sin que él lo note.
Un punto importante es la forma de comunicación entre los dispositivos de acceso
y los servidores de escritorio. Vamos a utilizar protocolos especiales en función,
básicamente, del tipo de escritorio que utilicemos. Así por ejemplo si queremos
tener escritorios Windows utilizaremos el protocolo RDP y si queremos escritorios
Linux el protocolo X Window. Aunque también tenemos otras opciones, que
elegiremos en función de las prestaciones y entornos en los que queramos
funcionar, como ICA, NX o VNC por ejemplo.
El modelo de virtualización de escritorios nos permite que los escritorios se
ejecuten en servidores virtualizados, pero eso no es imprescindible. De hecho en
los sistemas más simples los escritorios se pueden ejecutar en los tradicionales
servidores de terminales, ya sean Windows, Citrix o Linux. Esa tecnologías nos
permiten ya tener varios usuarios ejecutando su escritorio personalizado en un
sistema central. Ese sistema central estará ubicado, generalmente, en nuestro
centro de datos, pero cada vez son más comunes también las soluciones de hosting
para esos sistemas.
De hecho vamos a encontrar tres tecnologías básicas en los servidores de
escritorio: la ya mencionada de servidores de terminales, la de servidores con
“blades”, en la que cada "blade" ejecuta el escritorio de un usuario y la de
servidores virtuales, en la que los escritorios se ejecutan en máquinas virtuales, ya
sea de modo personalizado (un escritorio para cada usuario) o en modo pool
(varios usuarios comparten un modelo de escritorio genérico). Esta última
tecnología de escritorios virtuales y virtualizados a la vez es la más sofisticada y la
que proporciona mayores beneficios, pero en muchos casos las otras tecnologías
también son perfectamente aplicables y económicamente preferibles.
Otro componente que podemos necesitar en una plataforma VDI es el “broker”.
Un broker, en su versión más simple, es un componente de software que pone en
contacto el usuario que quiere utilizar una plataforma VDI con el escritorio virtual
que debe utilizar. Así, ene esencia, el cometido del broker es identificar el usuario
y, en función de los parámetros que se hayan configurado para ese usuario,
conectarlo con el servidor de escritorio que le corresponda.
En las plataformas más sofisticadas, sin embargo, el broker puede realizar más
funciones. Así, por ejemplo, puede encargarse también (u ordenar a algún otro
software) que arranque una máquina virtual para el escritorio del usuario o
encargarse de validar el usuario en un entorno de Single Sign On.
3.8. EL DISEÑO DE LA INFRAESTRUCTURA
Como vemos una solución de escritorios virtuales puede requerir una arquitectura
compleja, por lo que antes de lanzarse a su puesta en marcha es necesario realizar
un diseño, precedido de una fase en la que establezcamos claramente las
especificaciones y prestaciones que vamos a exigir de la plataforma.
Figura 27: Solución de virtualización de escritorios
En muchos casos la aproximación a una solución de escritorios virtuales no se
aborda con rigor y parece ser que lo único importante es dimensionar los
servidores para que tengan el rendimiento correcto, dejando de lado el resto de
aspectos. Hemos visto muchas propuestas de este tipo en las que ni tan sólo se
habla de la arquitectura, componentes software o requisitos funcionales. La
posterior puesta en marcha de estas soluciones “pobremente” diseñadas frustran al
equipo de IT responsable de su funcionamiento, ya que no se recogen todos los
beneficios que la arquitectura podría proporcionar. No se trata de virtualizar
escritorios porque sí, se trata de virtualizar porque deseamos obtener mejores
prestaciones y reducir los costes de administración.
Para ello es necesario diseñar cada capa de la arquitectura para que cumpla su
función al menor coste posible, con un conocimiento y experiencia de lo que existe
en el mercado y lo que es apropiado para cada caso. Un buen diseño debe
responder por lo menos a las siguientes preguntas:
Respecto los dispositivos de acceso, ¿Reconvertimos los PC actuales en Thin
Clients? ¿Adquirimos Thin Clients tradicionales, con software en PROM, o
utilizamos una solución flexible, con software en streaming? ¿Utilizamos Thin
Clients con prestaciones especiales, como por ejemplo SunRay? ¿Queremos
que los usuarios puedan acceder desde su casa, desde un cibercafé, en roaming?
Respecto a los servidores de escritorio, ¿optamos por una solución de Terminal
Server, blades o máquinas virtuales? ¿Qué tecnología de escritorio utilizamos,
Windows, Linux o mixta en función de las necesidades de los usuarios? ¿Qué
alta disponibilidad queremos? ¿Qué rendimientos esperamos?
Respecto al acceso remoto, ¿Necesitamos conectar usuarios de oficinas remotas?
¿Queremos poder conectarnos desde Internet de modo seguro? ¿Queremos dar
acceso a través de redes móviles?
Si utilizamos máquinas virtuales, ¿qué tecnología implantamos, VMWare, Xen,
VirtualBox, ...? ¿Vamos a necesitar un sistema de gestión específico para los
virtualizadores?
Respecto a aspectos de gestión y administración, ¿Cómo vamos a gestionar los
escritorios? ¿vamos a implantar pools, escritorios personales o ambos?
¿Necesitaremos un broker? ¿Qué queremos que haga el broker? ¿necesitamos
algún sistema de gestión como View de VMWare, Xendesktop, o algún otro
más económico?
Una vez tengamos claro el diseño de la arquitectura software podremos plantearnos
el dimensionamiento del resto de componentes: el número y tamaño de los
servidores en función del número de usuarios, prestaciones y redundancia; la
verificación de la capacidad de las redes internas y externas; los sistemas de
almacenamiento y backup; y los otros componentes que puedan ser necesarios en
función de las especificaciones del proyecto y diseño de la arquitectura software.
Es importante señalar que el dispositivo de acceso sólo necesita una potencia
mínima, con capacidad para manejar tan sólo el software de conexión. Puede ser
un dispositivo simple y barato, con poca memoria y poca necesidad de CPU. Ello
permite que sean dispositivos de muy poco consumo y sin disco o ventiladores, lo
que los hace además silenciosos y más fiables. Para el usuario este dispositivo se
comporta como un terminal transparente y, si se ha configurado para ello, puede ni
tan sólo ser consciente de que las aplicaciones se están ejecutando en otro equipo.
Muchas veces cuando un PC queda obsoleto puede reconvertirse en Thin Client,
alargando su vida útil. En el caso extremo, incluso un PC con una CPU 486 podría
funcionar perfectamente como Thin Client.
3.9. BENEFICIOS
Al igual que cualquier otra tecnología, la virtualización de escritorios proporciona
una serie de beneficios clave que hace que esta tecnología sea la elegida por un
gran número de usuarios:
a) AUMENTA LA SEGURIDAD DE LOS ESCRITORIOS Y
DISMINUYE LOS COSTOS DE SOPORTE.
Las organizaciones tienen una gran cantidad de problemas otorgando permisos
a los usuarios de sus equipos informáticos. Resulta complicado otorgar los
mínimos permisos posibles y ofrecer a los usuarios un entorno de trabajo
flexible con todas las funcionalidades que requieren para realizar su trabajo,
sobre todo a aquellos usuarios que viajan. La virtualización del escritorio
posibilita centralizar los escritorios en servidores centrales y gestionar dichos
escritorios individualmente de manera remota. Esto provee a los usuarios una
experiencia de escritorio completa y permite al personal de IT gestionar los
escritorios virtualmente en lugar de físicamente. Disminuye radicalmente el
coste de mantenimiento de los escritorios ya que no permites a sus usuarios
modificar nada del Sistema Operativo, principal causa de los problemas en las
organizaciones.
b) REDUCE LOS COSTOS GENERALES DE HARDWARE
La virtualización de escritorio implica que usted no tiene que tener equipos de
última tecnología, por que todas las aplicaciones del escritorio son ejecutadas
centralmente en un servidor remoto. Esto significa que los equipos que los
usuarios están utilizando para conectarse al servidor tienen un periodo de vida
mayor. Estos costes pueden reducirse aún más si para acceder a los escritorios
virtuales utilizamos clientes ligeros, que son mucho menos costosos que los
PC tradicionales.
c) ASEGURAR LA CONTINUIDAD DEL NEGOCIO
Un estudio reciente indica que la gran mayoría de las organizaciones no tienen
planes de continuidad del negocio actuales. El estudio se basa en una encuesta
realizada a 100 administradores de IT de Pymes del Reino Unido (empresas
con 30-500 empleados) llevada a cabo por ICM Investigación. La encuesta
sugiere que ante la posibilidad de un fallo en el transporte público o desastre
en el lugar de trabajo, muchas empresas no estarían en condiciones reabrir el
negocio, mientras que los usuarios de la virtualización de escritorios serían
capaces de ofrecer a sus usuarios una clave personal para acceder a sus
escritorios desde cualquier ubicación.
d) ALTERNATIVA ECOLÓGICA
Los escritorios virtuales almacenados en el servidor central son una alternativa
ecológica a los PC tradicionales. Un estudio realizado en 2008 por The
Climate Group indica que los PC consumen alrededor de tres veces más
energía que el centro de datos. Uno de los mayores beneficios de la
virtualización de servidores es el ahorro de energía que se produce cuando
varios servidores a baja utilización ejecutando aplicaciones se combinan en
una única pieza física de hardware.
e) MEJORAR LA SEGURIDAD DE LOS DATOS
La virtualización de escritorio hace que todos los datos de los usuarios de los
escritorios, y por lo tanto de las organizaciones, se almacenen centralmente en
los servidores, absolutamente nada se almacena a nivel local. Por lo que si el
empleado pierde o le roban el portátil, no se pierden los datos y tampoco
dichos datos pasan a manos peligrosas.
3.10. VENTAJAS
El modelo de virtualización de escritorios ofrece ventajas palpables sobre la
arquitectura tradicional de disponer de un PC completo en el puesto de trabajo de
cada usuario, con su propio sistema operativo, aplicaciones y necesidad de gestión
(antivirus, parches, instalación de aplicaciones, reparaciones, etc). El precio de
adquisición del hardware también se puede reducir, ya que aunque un equipo que
pueda utilizarse como servidor de escritorios tiene un coste más alto que un PC
ordinario puede dar servicio a varias decenas de usuarios y su potencia se
aprovecha mejor al ser un recurso compartido. Adicionalmente se aumenta la
seguridad de los datos, ya que es fácil realizar backup de toda la información en el
centro de datos.
Las principales ventajas son las siguientes:
Implementación instantánea de nuevos escritorios.
Prácticamente cero tiempo de inactividad en caso de fallos de hardware.
Reducción significativa del coste de los nuevos despliegues.
Sólida capacidad de gestión de la imagen del escritorio.
El ciclo de actualización de los PC pasa a ampliarse a 5-6 años o más.
Escritorios existentes incluyen múltiples monitores, audio/video bidireccional,
streaming de video, soporte a los puertos USB, etc.
Capacidad de acceso a los usuarios de empresas a sus escritorios virtuales desde
cualquier PC, incluida el PC de la casa del empleado.
Recursos a medida de las necesidades del escritorio.
Múltiples escritorios bajo demanda.
Libre provisión de equipos de sobremesa (controlada por las políticas de cada
corporación).
3.11. DESVENTAJAS
La arquitectura, sin embargo, también tiene algunas limitaciones, que pueden no
hacerla adecuada para algunos usuarios concretos. Por ejemplo:
Los usuarios pierden autonomía sobre sus equipos, por lo que pueden
presentarse ciertas reticencias si están acostumbrados a instalar aplicaciones y
almacenar datos privados (“No puedo pasar las fotos a mi computador”)
Peor soporte para impresoras y periféricos que estén conectados al computador.
La arquitectura prácticamente exige que las impresoras se conecten
directamente a la red y no a los equipos de los usuarios.
Las aplicaciones multimedia con uso intensivo de video en alta resolución
pueden no tener un buen rendimiento. Si es necesario ejecutar aplicaciones
multimedia con video en alta resolución puede ser necesario que los
dispositivos de acceso decodifiquen el video localmente, lo que añade cierta
complejidad al sistema y exige dispositivos de mayor potencia.
Dependencia del sistema a la disponibilidad de los servidores de escritorio y
infraestructura de red. Es necesario contemplar algún nivel de redundancia para
ambos subsistemas si queremos garantizar el uptime.
Cierta necesidad de formación en los técnicos que deban desplegar y administrar
la infraestructura. La administración de una infraestructura para escritorios
virtuales requiere ciertos conocimientos específicos y en algunos casos algunos
cambios en los modos de trabajo y procedimientos operativos.
3.12. LA INDUSTRIA DE LA VIRTUALIZACIÓN DE ESCRITORIO.
Según Gartner Inc. el mercado del escritorio virtual alojado en servidores (HVD)
aumentará hasta conseguir los 49 millones de unidades en el 2013, frente a más de
500.000 unidades en 2009. Los ingresos mundiales del sector pasarán a ser de
alrededor de $1.3 billones a $1.5 billones en 2009, y esto corresponde a menos del
1% del mercado de PC de todo el mundo profesional. El informe de Gartner
“Emerging Technology Analysis: Hosted Virtual Desktops” también indican que
mientras que en las empresas el gasto en hardware disminuirá, éstos requerirán
mas servidores, ancho de banda y software para soportar nuevas arquitecturas.
Gartner calcula que aproximadamente el 15% de los actuales profesionales de todo
el mundo desplazarían el PC tradicional hacia HVDs en 2014, lo que equivale a
cerca de 66 millones de dispositivos conectados. Los EE.UU. alcanzaría el doble
de la media de todo el mundo con más de 18 millones de dispositivos conectados.
Tras un primer comienzo lento, el mercado del HVDs se acelerará en 2010 y 2011.
A pesar de las nuevas mejoras en el rendimiento y la capacidad de gestión que se
espera de HVDs en 2009, la actual recesión económica que inhiba la adopción de
HVDs a corto plazo, porque requieren grandes despliegues en las inversiones
iniciales en infraestructura de red y el servidor. Debido a los recortes
presupuestarios actuales, se espera que las implementaciones HVD previstas se
retrasen a 2010 y 2011.
CAPITULO IV
VIRTUALBOX
4.1. VirtualBox
VirtualBox es un programa que permite crear máquinas virtuales. Originalmente fue
desarrollado por la empresa Innotek, que actualmente es propiedad de la empresa
Sun.
VirtualBox puede ejecutarse en multitud de sistemas operativos anfitriones como,
por ejemplo, Windows, OS X, Linux y Solaris. La lista completa de sistemas
operativos huésped con soporte se puede consultar en:
http://www.VirtualBox.org/wiki/Guest_OSes e incluye, entre otros, Linux,
Windows, Solaris, FreeBSD, Open BSD y MS-DOS. La virtualización de los
sistemas operativos es transparente, es decir, no hace falta modificar el sistema
operativo huésped para virtualizarlo.
4.2. LICENCIAS DE VIRTUALBOX
Actualmente existen dos versiones del programa VirtualBox: VirtualBox versión
propietaria y VirtualBox Open Source Edition, llamada VirtualBox OSE.
La versión propietaria se distribuye como un programa binario ejecutable con una
licencia comercial que es gratuita para uso personal, educativo o de evaluación
según se recoge en la documentación de licencia en
http://www.virtualbox.org/wiki/Licensing_FAQ.
La versión privada se puede descargar desde http://www.VirtualBox.org/. La
versión Open Source de VirtualBox se distribuye conforme a la licencia GPL. Esta
versión libre es equivalente a la versión privada, pero algunas funciones de la
versión privada no estén presentes en la versión OSE. Por ejemplo, la versión libre
no implementa el controlador USB ni el SATA. La versión libre viene incluida en
Ubuntu Linux. Los binarios para Windows se pueden descargar desde
http://vboxwin32.sourceforge.net/, pero no se actualizan tan rápidamente como la
versión propietaria.
4.3. TÉCNICAS DE VIRTUALIZACIÓN
VirtualBox permite que las instrucciones de la máquina virtual se ejecuten en el
procesador de la máquina real, excepto aquellas que puedan interferir en el
funcionamiento de la máquina real. Por ejemplo, cuando la máquina virtual ejecuta
instrucciones que escriben información en el disco duro, el programa VirtualBox
toma el control de las instrucciones y realiza la escritura en un disco virtual que,
generalmente, es un archivo.
Para realizar el proceso de virtualización, VirtualBox utiliza dos tipos de técnicas:
técnicas por software y técnicas por hardware:
a) Virtualización por software
Las técnicas de virtualización por software posibilitan la virtualización en todo
tipo de PC, antiguos y nuevos, pero las máquinas virtuales son lentas y necesita
de más tiempo de microprocesador.
b) Virtualización por hardware
Las técnicas de virtualización por hardware aceleran la ejecución del huésped,
pero sólo funcionan con microprocesadores modernos. En el caso de
microprocesadores Intel, la virtualización por hardware se denomina VT-x y en
el caso de AMD, se denomina AMD-V. En la mayoría de computadores, la
virtualización por hardware se debe habilitar en la BIOS.
En algunos casos será necesario consultar el manual del microprocesador de la
PC para más información. La paginación anidada (nested paging) es una técnica
de virtualización por hardware que puede mejorar la gestión de la memoria. Los
usuarios pueden habilitar o deshabilitar manualmente ambas opciones. En el
caso de emular un microprocesador con arquitectura de 64 bits o bien en el caso
de simular más de una CPU en la maquina virtual, la aceleración por hardware
deberá estar activada.
VirtualBox puede ejecutar como huésped, además de Windows y Linux, otros
sistemas operativos como Open-Solaris, OpenBSD, OS/2, Syllable, ReactOS,
SkyOS y Haiku.
4.4. CONFIGURACIÓN DE LA RED EN LA MÁQUINA HUÉSPED DE
VIRTUALBOX
En las máquinas huésped de VirtualBox se pueden instalar hasta ocho tarjetas de red
virtuales. VirtualBox emula cinco tipos diferentes de tarjeta de red virtual.
Cuando el usuario crea una nueva máquina huésped y elije el sistema operativo que
contendrá, VirtualBox le asigna automáticamente una tarjeta de red compatible en
modo NAT. Los modos de funcionamiento de una tarjeta de red virtual son los
siguientes:
No conectado: en este modo, la tarjeta virtual existe en el huésped, pero está
configurada como si no tuviera ningún cable conectado.
NAT: NAT (siglas de Network Address Translation) es el modo por defecto de
la tarjeta de red virtual. Este modo permite al huésped navegar por Internet,
descargar ficheros y leer el correo electrónico sin necesidad de configurar el
sistema operativo huésped. En este modo, la máquina virtual puede conectarse a
otras redes mediante un router virtual proporcionado por VirtualBox.
Dicho router sirve direcciones DHCP del tipo 10.0.x.0/24 donde x=2 para la
primera tarjeta de red, x=3 para la segunda tarjeta de red, etc. En el caso de una
única tarjeta de red, el router tiene como puerta de enlace la dirección 10.0.2.2,
como servidor DNS la dirección 10.0.2.3 y la primera dirección DHCP asignada
es la 10.0.2.15. La arrancada por el método PXE es compatiblecon el modo
NAT.
Como desventaja, en este modo, los comandos que envían paquetes ICMP como
ping o traceroute pueden no funcionar correctamente y, en principio, la máquina
virtual no es accesible desde Internet.
Adaptador puente (Bridge): en este modo, se crea una tarjeta de red virtual en
el anfitrión que intercepta el tráfico de red y puede inyectar paquetes en la red,
de manera que el huésped se configura como si estuviera conectado por un cable
a la tarjeta de red virtual del anfitrión.
Red Interna: en este modo, se crea una red virtual visible entre las máquinas
virtuales, pero invisible al anfitrión o a máquinas externas a la red.
Adaptador Sólo-Anfitrión: en este modo se crea una tarjeta de red virtual en el
anfitrión que puede conectarse con las máquinas virtuales sin necesitar que el
anfitrión tenga una tarjeta de red.
4.5. INSTALACIÓN DE VIRTUALBOX
a) INSTALACIÓN DE VIRTUALBOX EN WINDOWS
Después de descargar el programa en formato binario, ejecute el fichero
ejecutable con un doble clic.
Figura 28.
Lea y acepte la licencia marcando la opción I accept the terms in the License
Agreement.
Figura 29.
Seleccione la ruta del directorio donde se instalará el programa:
Figura 30.
Cree los accesos directos al programa:
Figura 31.
El siguiente aviso alerta de que la instalación de VirtualBox desconectará el
computador temporalmente de la red. Para continuar la instalación, pulse el
botón Yes y a continuación el botón Install.
Figura 32.
Durante la instalación aparecerán avisos como el siguiente donde se alerta al
usuario de que la instalación no ha superado la prueba del logotipo de
Windows. Esto es debido a que el hardware virtual instalado no incluye una
firma digital que indica que ha superado los procedimientos de prueba del
sistema operativo. Continúe la instalación con el botón Continuar.
Figura 33.
Pulse el botón Finish para acabar la instalación:
Figura 34.
b) INSTALACIÓN DE VIRTUALBOX EN UBUNTU
Ejecute desde la consola:
sudo gedit /etc/apt/sources.list
y añada la línea:
deb http://download.virtualbox.org/virtualbox/debian jaunty non-free
Actualice los paquetes:
sudo apt-get update;apt-get upgrade
Añada la firma de los paquetes:
wget –q http://download.virtualbox.org/virtualbox/debian/sun_vbox.asc
-O- | sudo apt-key add –
Instale Virtualbox:
sudo apt-get install dkms virtualbox-3.0
Una vez instalado, el programa se ejecuta desde el menú principal de Gnome
con las opciones Aplicaciones->Accesorios->VirtualBox
4.6. CASO PRÁCTICO: CREACIÓN DE UNA MÁQUINA VIRTUAL PARA
INSTALAR UBUNTU 9.04
Cuando se crea una máquina virtual y se selecciona el sistema operativo que se
desea instalar, VirtualBox asignará de forma automática los requisitos
recomendados de memoria, disco duro y otras configuraciones El objetivo de la
práctica consiste en crear una máquina virtual para instalar Ubuntu 9.04 desde una
imagen del CD autónomo de instalación en formato ISO.
Para crear una máquina virtual, ejecute VirtualBox y seleccione en el menú del
programa la opción Máquina -> Nueva. Pulse el botón Siguiente para continuar.
Figura 35.
Seleccione el nombre de la máquina virtual, el tipo de sistema operativo huésped
Linux y la versión Ubuntu . Pulse Siguiente para continuar.
Figura 36.
Seleccione 512 MB de memoria para el sistema operativo huésped. Recuerde que la
cantidad asignada será a cuenta de la memoria del sistema operativo anfitrión. Pulse
Siguiente para continuar.
Figura 37.
A continuación, cree un fichero que será el disco duro virtual del sistema operativo
huésped. En este caso, asigne 20 GB al disco duro virtual . Pulse el botón Nuevo
para continuar.
Figura 38.
Un nuevo asistente aparecerá para ayudar a crear el disco duro virtual. Pulse
Siguiente para continuar.
Figura 39.
El disco duro virtual puede ser de dos tipos:
Dynamic Expanded Storage: en este caso, el tamaño del disco duro virtual
ocupa poco espacio y va creciendo dinámicamente hasta el límite del tamaño
asignado conforme crecen los ficheros del Sistema Operativo Huésped. Este
método tiene la ventaja de que el disco duro virtual ocupa el espacio necesario
en el disco duro y el tamaño del fichero crece si se necesita. Como
inconveniente, la creación de ficheros en el disco virtual es lenta.
Fixed Storage: en este caso, se crea un fichero del mismo tamaño que el disco
duro virtual. Este método tiene la ventaja de que el acceso al disco duro virtual
es rápido, pero como inconveniente, ocupa más espacio.
Seleccione el método Dynamic Expanded Storage.
Figura 40.
VirtualBox crea máquinas virtuales con soporte de USB 2.0, iSCSI, ethernet a
Gigabit y controladores SATA.
En Location, seleccione el nombre del fichero que contendrá el disco duro virtual.
En el campo Size, marque 20 GiB como el tamaño máximo del disco duro virtual.
Es recomendable no utilizar espacios en el campo Location. Utilice el símbolo de
subrayado o el guión para separar palabras
Figura 41.
Finalice el asistente de creación de discos duros con la opción Terminar.
Figura 42.
Ahora ya está configurado el disco duro virtual. Pulse Siguiente para continuar.
Figura 43.
Finalice el asistente de creación de máquinas virtuales con la opción Terminar.
Figura 44.
a) ASISTENTE PARA LA INSTALACIÓN DE UN SISTEMA
OPERATIVO HUÉSPED.
Una vez creada la máquina virtual, se le deberá instalar un sistema operativo
para que sea funcional. Para ello, utilice en el menú de VirtualBox la opción
Máquina e Iniciar.
Figura 45.
Como es la primera vez que se inicia la máquina virtual, se ejecutará un asistente
que ayudará a configurar el dispositivo que se utilizará para instalar el sistema
operativo huésped. Para este ejemplo, seleccione una imagen en formato ISO del
CDROM de instalación del sistema operativo Ubuntu. Pulse el botón en forma
de carpeta
Figura 46.
Pulse sobre el icono Agregar y navegue por el disco duro y seleccione el fichero
en formato ISO que contiene una copia del sistema operativo Ubuntu.
Figura 47.
Una vez seleccionado el fichero en formato ISO, pulse el botón Siguiente.
Figura 48.
Un fichero ISO es un archivo que, según el estándar ISO 9660 de la
Organización Internacional para la Estandarización, almacena una imagen exacta
de un sistema de ficheros de un disco óptico como un CD o un DVD. El
asistente avisará que cuando se cierre la máquina virtual, el dispositivo de
arrancada se desmontará automáticamente. Deberá desmontar el dispositivo de
arrancada una vez instalado el sistema operativo para que la secuencia de
instalación no se vuelva a ejecutar. Pulse el botón Terminar.
Figura 49.
A continuación, el sistema operativo huésped se instalará como si se tratase de
un sistema operativo real.
Figura 50.
4.7. INSTALACIÓN DE CONTROLADORES DE DISPOSITIVOS EN
HUÉSPEDES
Después de instalar el sistema operativo huésped, se deben instalar una serie de
programas llamados drivers o controladores para interactuar con los periféricos
virtuales, como por ejemplo, la tarjeta de red virtual. Los controladores para las
máquinas virtuales vienen incluidos en un CDROM virtual que puede montarse en
el huésped con la opción Dispositivos ->Instalar Guest Additions (Aplicaciones del
huésped).
a) INSTALACIÓN DE CONTROLADORES DE DISPOSITIVOS EN UN
HUÉSPED UBUNTU
En el caso de un huésped Ubuntu, aparecerá en el escritorio el CDROM virtual,
dentro del cual ejecutaremos el fichero autorun.sh:
Figura 51.
Seleccione la opción Ejecutar en un terminal e introduzca la contraseña de
superusuario:
Figura 52.
Finalmente, apague la máquina huésped. La próxima vez que inicie el sistema,
los controladores de dispositivo se ejecutaran automáticamente.
b) INSTALACIÓN DE CONTROLADORES DE DISPOSITIVOS EN UN
HUÉSPED WINDOWS
La instalación de los controladores en un huésped Windows preguntará al
usuario si desea instalar los dispositivos virtuales. Pulse el botón Instalar
Figura 53.
COMBINACIONES DE TECLAS ESPECIALES
Algunas combinaciones de teclas especiales afectan al funcionamiento de los
sistemas operativos y la pulsación de dichas teclas en el sistema operativo
huésped puede provocar efectos no deseados en el sistema operativo
anfitrión. La Tecla Anfitrión en VirtualBox es la tecla CTRL derecha.
Las siguientes combinaciones de teclas realizan envíos de teclas especiales al
huésped:
- Tecla anfitrión + Del: envía Ctrl+Alt+Del al sistema operativo huésped.
Esta combinación de teclas apaga o inicia la sesión en Windows.
- Tecla anfitrión + Backspace: envía Ctrl+Alt+Backspace al sistema
operativo huésped. Esta combinación de teclas reinicia el modo gráfico
en Linux.
- Tecla anfitrión + Fx: siendo Fx una tecla de función, envía Ctrl+Alt+Fx
al sistema operativo huésped. Esta combinación de teclas cambia entre
las terminales de Linux.
OPCIONES ESPECIALES DE VIRTUALBOX
VirtualBox proporciona las siguientes opciones especiales:
- Modo Fluído o Seamless Mode: este modo de funcionamiento permite
ver únicamente la ventana activa del huésped en el anfitrión. Para activar
o desactivar este modo, pulse simultáneamente la Tecla Anfitrión y la
letra L.
4.8. CONFIGURACIÓN DE LAS MÁQUINAS VIRTUALES
Una vez creada una máquina virtual con VirtualBox, se puede cambiar su
configuración mediante la opción del menú MáquinaéConfiguración o bien
utilizando el icono con la etiqueta Configuración de la barra de iconos.
Figura 54.
Las diferentes configuraciones de dispositivos y carpetas se muestran en el panel
izquierdo y en el panel derecho se muestran las diferentes opciones organizadas en
pestañas. En la siguiente sección se explicarán los parámetros de configuración.
Figura 55.
a) CONFIGURACIÓN GENERAL
Figura 56.
La configuración del sistema se configura en las siguientes pestañas:
Básico:
- Name: nombre de la máquina virtual
- Sistema Operativo: nombre del sistemaoperativo huésped. Por ejemplo:
Linux, Windows, Solaris, etc.
- Versión: versión del sistema operativo. Por ejemplo: Debian, Ubuntu,
Red Hat, etc.
Avanzado:
- Snapshot Folder: nombre de la carpeta donde se guardarán las
instantáneas de la máquina virtual.
- Shared Clipboard: método para compartir el portapapeles entre el
sistema operativo anfitrión y el sistema operativo huésped.
Por defecto es Bidireccional, de manera que se puede copiar y pegar
texto entre el sistema operativo huésped y el anfitrión. Esta característica
sólo se puede utilizar si el sistema operativo anfitrión tiene instaladas las
Aplicaciones del Huésped.
- Removable Media: con esta opción activa, VirtualBox recuerda que
elementos están montados y los vuelve a montar cuando se reinicia la
máquina virtual.
- Mini ToolBar: esta opción configura el modo de visualización de la
tabla de herramientas de VirtualBox cuando la máquina virtual ocupa la
pantalla completamente o si se ejecuta en modo Fluido.
Figura 57.
- Descripción: permite al usuario escribir una descripción de la máquina
virtual.
b) CONFIGURACIÓN DEL SISTEMA
Motherboard:
- Base Memory: controla de cuanta memoria dispondrá el huésped.
- Boot Order: configura el orden de arrancada de los dispositivos.
- Extended Features: configura la activación de ACPI (Advanced
Configuration Power management Interface) y IO APIC. Estas opciones
no se deben deshabilitar después de instalar un huésped Windows.
Processor:
- Processor: permite definir entre 1 y 32 CPU virtuales en el huésped.
- Habilitar PAE/NX: PAE (Physical Address Extension) es una opción de
la CPU que permite a un microprocesador de 32 bits direccionar más de
4 GiB de RAM mediante una técnica consistente en utilizar 36 bits para
direccionar la memoria. Algunos sistemas operativos, como Ubuntu
Server, necesitan tener activada esta opción.
-
Acceleration:
- Habilitar VT-x/AMD-V: esta opción permite utilizar la virtualización
por hardware si están disponibles en el microprocesador.
- Enable Nested Paging: permite utilizar el método de paginación anidada
si está disponible.
Figura 58.
c) CONFIGURACIÓN DE LA PANTALLA
Video:
- Video Memory: controla la cantidad de memoria de vídeo de la máquina
virtual.
- Enable 3D Acceleration: habilita la aceleración 3D. Esta característica
sólo se puede utilizar si el anfitrión tiene instaladas las Aplicaciones del
Huésped.
- Remote Display: esta opción permite controlar el huésped remotamente
mediante un cliente RDP (Remote Desktop Protocol).
Figura 59.
d) CONFIGURACIÓN DE LOS DISCOS DUROS
IDE Controller Type: permite configurar el tipo de controlador IDE.
Enable Additional Controler: permite añadir otros controladores de disco
SATA o SCSI.
Attachments: permite añadir o eliminar discos de la máquina virtual.
Figura 60.
Los discos se gestionan mediante el Manejador de Medios Virtuales pulsando el
tercer icono (Seleccionar disco duro). Mediante este gestor se puede crear un
nuevo disco, agregarlo en la lista de disponibles, eliminarlo o liberarlo. Esta
última opción se refiere a desconectar el disco duro virtual de su huésped
asociado.
Figura 61.
e) CONFIGURACIÓN DE LOS DISPOSITIVOS ÓPTICOS
Monta la unidad de CD/DVD: con esta opción seleccionada, la unidad
óptica física se montará en el huésped o bién se montará un archivo imagen
de un CD/DVD en formato ISO. En el caso de que la unidad óptica sea
física, con el parámetro Habilitar Passthrough puede utilizar la grabadora
óptica del anfitrión. Para gestionar las imágenes de CD/DVD, utilice el
Manejador de Medios Virtuales.
Figura 62.
f) CONFIGURACIÓN DE LOS DISQUETES
Con esta acción activada, podrá gestionar los diquetes reales o virtuales con el
Manejador de Medios Virtuales.
Figura 63.
g) CONFIGURACIÓN DE LOS DISPOSITIVOS DE AUDIO
Esta opción permite configurar que controlador de audio del anfitrión se
comunicará con el huésped, así como el tipo de controlador de audio del
huésped.
Figura 64.
h) CONFIGURACIÓN DE LA RED
Esta opción permite configurar hasta cuatro adaptadores de red en el huésped.
Las redes en las que se encuentran las máquinas virtuales son privadas e internas
e invisibles para el anfitrión.
Adapter type: define el tipo de tarjeta de red virtual del huésped.
Attached to: configura el modo en que el adaptador de la máquina huésped
se conecta a una red.
Botón de MAC : permite generar una nueva MAC para identificar la
tarjeta de red.
Figura 65.
i) CONFIGURACIÓN DE LOS PUERTOS SERIE
Esta opción permite habilitar los puertos serie en la máquina virtual huésped.
Figura 66.
j) CONFIGURACIÓN DE LOS DISPOSITIVOS USB
Con esta acción activada, la máquina virtual puede acceder a los dispositivos
USB seleccionados mediante el Filtro de Dispositivos. Para que los dispositivos
USB funcionen más rápidamente y si la máquina real da soporte a la conexión
USB 2.0, es conveniente activar la opción Enable USB 2.0(EHCI) Controller.
Figura 67.
k) CONFIGURACIÓN DE LOS DIRECTORIOS COMPARTIDOS
Esta opción permite compartir un directorio en el anfitrión para ser accedido por
el huésped. Esta característica sólo se puede utilizar si el huésped tiene
instaladas las Aplicaciones del Huésped. Supondremos en este ejemplo que la
carpeta del anfitrión se llama documentos2010. Para acceder a la carpeta desde
un huésped Windows como la unidad W:, ejecute: net use w: \\vboxsvr\
documentos2010
Para acceder a la carpeta desde un huésped Linux y montarla en /mnt, ejecute:
mount -t vboxsf documentos2010 /mnt
Figura 68.
l) GESTIÓN DE LA MÁQUINA VIRTUAL
Una vez instalado el sistema operativo huésped, Virtualbox permite gestionar las
siguientes opciones:
Menú Máquina:
Figura 69.
- Modos de vídeo: modo de pantalla completa, modo fluído,
autodimensionar o ajustar el tamaño de la ventana.
Por defecto, la pantalla de la máquina virtual huésped se autodimensiona
cuando se cambia el tamaño de la ventana.
- Inhabilitar la Integración del Raton: con las Aplicaciones del
huésped instaladas, el ratón se comparte entre el anfitrión y el huésped.
Si no están instaladas, el usuario debe cambiar el control del ratón de
forma manual con la Tecla Anfitrión.
- Insertar combinaciones de teclas: envía combinaciones de teclas
especiales al huésped.
- Tomar instantánea: para la máquina virtual y realiza una copia de la
máquina en el estado actual para que, posteriormente, se pueda continuar
ejecutando el sistema a partir del instante en que se ha tomado.
- Diálogo de Información de Sesión: muestra información sobre el uso
del hardware de la sesión actual.
Figura 70.
Menú Dispositivos: Este menú permite gestionar los dispositivos de la
máquina virtual e instalar las Aplicaciones del huésped.
Figura 71.
4.9. DISTRIBUCIÓN DE IMÁGENES DE DISCO
Virtualbox asigna un identificador a cada imagen de disco que queda almacenado en
la propia imagen. Como resultado, no se pueden tener dos imágenes con el mismo
identificador en la lista del Manejador de Medios Virtuales.
a) CASO PRÁCTICO: GENERACIÓN DE IMÁGENES
COMPRIMIDAS
Las imágenes dinámicas de discos virtuales crecen conforme se instalan
aplicaciones en el sistema operativo huésped, pero la imagen dinámica no
decrece, ya que si se crea un fichero en la máquina virtual y después se borra, el
sistema operativo marca el espacio donde estaba el fichero como utilizable, pero
no borra la información que había.
El objetivo de la práctica consiste en comprimir tanto como sea posible un disco
virtual dinámico original.vdi de 20 Gib para poder enviarlo por la red de forma
rápida. Para ello, generaremos un disco duro virtual minimizado.vdi que
contendrá sólo los sectores utilizados del disco virtual original.vdi y, finalmente,
comprimiremos el fichero resultante con 7zip.
Llenar de zeros los sectores no utilizados
Primeramente, se debe llenar de ceros los sectores de disco no utilizado. De
esta manera, Virtualbox detectará dichos sectores no utilizados y los
eliminará.
En el caso de que el huésped sea Windows, desfragmente el disco duro y
descargue el programa sdelete de:
http://technet.microsoft.com/en-us/sysinternals/bb897443.aspx
y descomprímalo en c:\sdelete
A continuación, ejecute:
c:\sdelete -c C:
Y apague el huésped.
En el caso de que el huésped sea Linux, el programa zerofree llena de ceros
los sectores no utilizados de las particiones en formato ext2 y ext3 del disco
duro.
Para instalar zerofree, abra la consola desde el menú principal de Gnome,
seleccionando las opciones Aplicaciones -> Accesorios -> Terminal e instale
el paquete zerofree:
$ sudo apt-get install zerofree
A continuación, para ver que particiones están montadas con el formato ext2
o ext3, ejecute:
$ mount|grep ext
El resultado del anterior comando mostrará el nombre de la partición.
/dev/sda1 on / type ext3 (rw,relatime)
En este ejemplo, la partición /dev/sda1 está en formato ext3. Si la partición
delsu sistema operativo huésped no es /dev/sda1, sustituya /dev/sda1 por su
partición. Para ejecutar el sistema operativo en modo monousuario, de
manera que no habrá otros procesos escribiendo al disco duro mientras se
llenan de ceros los sectores no utilizados, ejecute:
$ sudo init 1
Y seleccione la opción con las flechas la opción root Drop to root shell
prompt y con la tecla tabulador y Enter seleccione Ok. A continuación,
monte el sistema de ficheros en modo lectura con la orden:
$ sudo mount -n -o remount,ro -t ext3 /dev/sda1 /
Ejecute zerofree para llenar de ceros los sectores no utilizados:
$ sudo zerofree /dev/sda1
Finalmente, apague el huésped:
$ sudo init 0
Desde el Manejador de medios, libere el disco original.vdi y elimínelo con el
botón Eliminar
Figura 72.
A continuación, con el botón Keep, bórrelo de la lista de discos del
Manejador de medios, pero no lo elimine del disco duro.
Figura 73.
Para crear la nueva imagen compactada, si su huésped es Windows, ejecute
desde la consola:
set path=%path%;%VBOX_INSTALL_PATH%
cd %HOMEPATH%\.VirtualBox\HardDisks
VboxManage clonehd original.vdi minimizado.vdi
Si su huésped es Linux, ejecute:
cd ~\.VirtualBox\HardDisks
VboxManage clonehd original.vdi minimizado.vdi
Finalmente, comprima la imagen minimizado.vdi con un compresor como
7zip para reducir su tamaño y hacer más fácil su distribución.
4.10. PRUEBAS DE RENDIMIENTO DE LA MÁQUINA REAL Y LA
MÁQUINA VIRTUAL
Para comparar el rendimiento del hardware, se utilizan programas que realizan
pruebas de rendimiento llamadas, en inglés, benchmark. Las pruebas de
rendimiento se realizan, sobretodo, para comparar la relación velocidad/precio
de diferente hardware.
Hardinfo es un programa que realiza benchmarks en Linux. Una vez instalado,
desde el menú principal de Gnome, seleccione Sistema -> Preferencias ->
System Profiler and Bechmark.
El programa muestra el hardware del computador realiza diferentes tipos de
pruebas de rendimiento de la CPU:
Figura 74.
El programa permite generar un informe en HTML del hardware del computador
y de las pruebas de rendimiento mediante el icono Generate Report.