Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Curso:
Internet y Windows
TABLA DE CONTENIDO
Introducción a las máquinas virtuales ........................................................................................... 2
HISTORIA ...................................................................................................................................... 2
¿Qué es una máquina virtual? ................................................................................................... 3
Herramientas de virtualización más conocidas ....................................................................... 4
Utilidades y usos más frecuentes de las máquinas virtuales ................................................ 6
Comparativa de herramientas de virtualización....................................................................... 7
Herramienta de virtualización "Virtual PC 2007"de Microsoft................................................ 8
Requisitos del sistema ................................................................................................................. 9
Instalación de Virtual PC 2007 ................................................................................................... 9
MAQUINA VIRTUAL QEMU ..................................................................................................... 10
Módulo de aceleración para Qemu.......................................................................................... 12
Qemu monitor: ............................................................................................................................ 13
Optimización de estado de CPU .............................................................................................. 14
Introducción a las máquinas virtuales
HISTORIA
La historia de las computadoras data de varias décadas atrás. Para ser preciso, su
historia se divide en etapas que dan comienzo desde 1955 hasta la actualidad. La
evolución de todos los elementos relacionados con las computadoras actuales no
es lo que nos ocupa, sino que nos referiremos a la forma en que evolucionaron los
sistemas capaces de correr máquinas virtuales (VM).
La necesidad de la existencia de VM da comienzo por la necesidad de obtener un
sistema operativo que fuese capaz de soportar múltiples usuarios corriendo sobre
él (timesharing1), es decir que fuese capaz de ejecutar los procesos que éstos
necesitaban correr. Durante este período surgieron varios Sistemas operativos (SO)
que trataron de solucionar esta necesidad. IBM desarrolló un SO llamado OS/360.
En un comienzo no estaba capacitado para soportar time-sharing, pero tras surgir
esta necesidad se le incorporó esta función. A pesar de los intentos de IBM por dotar
al 360 con ésta funcionalidad, lograron obtener un sistema que era muy pesado, e
inconsistente.
Para solucionarlo se propuso un nuevo sistema (en 1972 que aun esta presente en
la actualidad) llamado VM/370 (1). Éste marcó un punto muy importante en la
historia, ya que para poder proporcionar un sistema de tiempo compartido, se basó
en una serie de conceptos que no se habían tenido en cuenta hasta la fecha. Éstos
fueron:
• Una máquina extendida con interfaz más conveniente que el mero hardware.
Además, existen en Internet muchas máquinas virtuales listas para ser ejecutadas
y que permiten tener un entorno de desarrollo web en muy pocos minutos: Linux
con Apache, PHP y mySQL instalado y configurado de manera directa, o bien una
solución wiki lista para ser usada simplemente descargando una máquina virtual.
Xen: Una herramienta muy usada en la comunidad Linux puesto que hasta hace
poco tiempo sólo podía usar Linux/Unix como sistema anfitrión. Con la versión Xen
3.0 ya se puede instalar en Windows.
VirtualBox: una herramienta para Windows y para Linux (la versión para MAC
actualmente está en desarrollo en fase pre-alfa) liberada bajo licencia GPL y con un
rendimiento similar al de otras aplicaciones como VirtualPC o VMWare.
QEMU, VMWare y Microsoft Virtual PC son las tres herramientas más utilizadas.
Por ello y por ser distribuidas de forma gratuita el monográfico se centrará en ellas.
Además, se ha incluido VirtualBox porque es de código abierto y permite estudiar
su código en caso de estar interesado.
Sistemas
VirtualBox: Windows, Linux
operativos VMWare server: Windows, Linux
VMWare server
anfitriones Virtual PC 2007: Windows, MacOS
soportados
En resumen, se podría afirmar que las tres aplicaciones son buenas soluciones de
virtualización. Probablemente la balanza se inclina por VMWare server por la
existencia de máquinas virtuales disponibles en Internet que agilizan el uso de las
máquinas virtuales y por la cantidad de información que existe sobre ella en la red.
Además, Virtual PC 2007 es una herramienta que no podrá ser usada por los
usuarios de Linux, mientras que las otras dos están disponibles en versiones para
Windows y para Linux.
Una herramienta de virtualización es una aplicación que permite crear PCs virtuales
que tienen el mismo comportamiento que un PC real pudiendo acceder a los
dispositivos físicos del equipo que los alberga, instalar SO, programas, navegar por
internet, etc., con la diferencia con el PC real de que los PCs virtuales no son más
que archivos. En el caso de los PCs virtuales o máquinas virtuales creados Virtual
PC se trata de archivos con extensión. vmc.
Los sistemas operativos anfitriones o en los que se puede instalar Virtual PC 2007
son:
Qemu puede ser instalado bajo Linux, Windows, FreeBSD y MacOSX, pero la
versión para Windows todavía se encuentra en estado "Alfa" de desarrollo.
X86
X86_64
ARM
SPARC
PowerPC
MIPS
SPARC64
PowerPC64
m68k
SH-4
Qemu posee también la capacidad de simular un sistema que posea hasta 255
procesadores Emulación de "modo de usuario":
En este modo, Qemu permite ejecutar procesos de Linux compilados para una
determinada arquitectura, en otra. Esto se realiza por motivos de diferencias entre
arquitecturas de 32 bits o de 64 y por el "endianness"
X86
ARM
SPARC
PowerPC
MIPS
SPARC64
m68k
SH-4
Módulo de aceleración para Qemu
El módulo es llamado Kqemu, escrito por el mismo autor de Qemu, solo que el otro
es libre pero no posee el código abierto.
Qemu monitor:
Traducción Dinámica:
La idea es dividir todas las instrucciones x86 en instrucciones más simples. Cada
instrucción está implementada por un trozo de código en C. Luego una utilidad de
compilación toma el correspondiente archivo objeto para realizar un generador
dinámico de código, quien concatena las instrucciones simples, para armar una
función.
Una idea clave para obtener una performance óptima es que se puedan pasar
parámetros constantes a las operaciones simples. Para ese propósito, rea
locaciones de archivos ELF son generados con gcc para cada parámetro constante.
Luego la utilidad de compilación puede ubicar las realocaciones y generar el código
C apropiado cuando se esté construyendo el código dinámico. De ésta manera,
Qemu no es más complicado de portar que un linkeador dinámico.
Para aún mayor velocidad, las variables de registros estáticos de gcc son usadas
para mantener el estado de la CPU virtual.
Alocación de registro
Desde que Qemu usa simples instrucciones fijas, no puede hacerse una alocación
de registros eficiente. De todas formas, dado que los CPU's RISC poseen muchos
registros, la mayor parte del estado de la CPU virtual puede ser puesto en registros
sin hacer una complicada Alocación.
La CPU x86 posee muchos estados internos, los cuales cambian la forma en la que
se evalúan las instrucciones. Para obtener una buena velocidad, la fase de
traducción considera que alguna información de los estados del CPU x86 virtual no
pueden cambiar en él.
Por ejemplo, si los segmentos SS, DS y ES poseen una base cero, entonces el
traductor ni siquiera genera una suma para la base del segmento.
Cache de traducción
Emulación de la MMU
Para la emulación de la MMU, Qemu utiliza la llamada al sistema mmap(). Funciona
mientras el Sistema Operativo emulado no use una zona reservada por el sistema
operativo host (como la zona sobre 0xc0000000 en un Linux x86).
De manera de ser más rápido, Qemu no controla cada bloque básico por si alguna
interrupción de hardware se encuentra pendiente, sino que el usuario debe llamar,
asíncronamente, una función específica, para anunciar que hay una interrupción
pendiente. Ésta función resetea el encadenamiento del bloque básico que está
actualmente en ejecución. Se asegura que la ejecución va a retornar pronto en el
bucle principal del emulador de la CPU. Luego el bucle principal puede comprobar
si la interrupción está pendiente y manejarla.