domingo, 18 de enero de 2009

Consideraciones en la programación de un monitor de una máquina virtual

El monitor de máquina virtual (VMM) es una clase de software usado para administrar máquinas virtuales (VM). Cada VM se comporta como una máquina física completa y puede cargar sistemas operativos y aplicaciones. El software VMM funciona con el nivel máximo de privilegios y es propietario del hardware del sistema que controle. El VMM controla la creación de una VM, las transferencias de control a una VM, y situaciones de administración que pueden causar transiciones entre las VMs guest y los host VMM. El VMM también permite a las VMs compartir el hardware que controla y proporciona aislamiento entre VMs. El guest software que se ejecuta en una VM no es consciente de las transiciones que pueden ocurrir entre el VM y su host.
Las instrucciones VMX están solamente disponibles en operaciones raíz VMX. Un intento de ejecutar una instrucción VMX en operaciones no raíz VMX causa una salida de la VM. El procesador hace varias comprobaciones mientras se ejecuta cualquier instrucción VMX. Es necesario software para comprobar RFLAGS.CF y RFLAGS.ZF para determinar el éxito o fracaso de las ejecuciones de instrucciones VMX. Después de una instrucción de entrada VM, completa correctamente la comprobación general y se comprueban los controles VMX y el área de estado del host, cualquier error encontrado mientras se carga el estado del guest causa que el procesador cargue el estado desde el área de estado del host del VMCS como si hubiera ocurrido una salida de la VM. Este fallo de comportamiento se diferencia de una salida de la VM en que no se guarda ningún estado del guest en el área de estado de guest.
Los VMMs necesitan asegurarse de que el procesador está en modo protegido con paginación antes de entrar en operación VMX.
Los diseños VMM mas comunes serán VMM simétricos. Este tipo de VMM ejecuta los mismos binarios VMM en todos los procesadores lógicos. Como un sistema operativo simétrico, el VMM simétrico es escrito para asegurar que todos los datos críticos están actualizados por solo un procesador en un tiempo, que a los dispositivos de E/S se accede de forma secuencial, y así en adelante. Sin embargo, también es posible un diseño VMM asimétrico, pero es mucho más fácil depurar un VMM asumiendo simetría de las capacidades hardware. Otra ventaja puede ser que una instalación de software de salida puede continuar funcionando sin tener que actualizar la VMM, cuando la instalación de software se actualiza para funcionar en hardware con mayores capacidades VMX en el procesador.
Antes de activar VMX, un MP-aware tiene que comprobar para asegurarse de que todos los procesadores del sistema son compatibles y soportan las características requeridas. Esto se puede hacer en 3 pasos:
- Comprobar el CPUID en cada procesador lógico para asegurarse de que está soportado VMX y que es compatible con el conjunto de características.
- Comprobar los identificadores de revisión VMCS en cada procesador lógico.
- Comprobar cada campo 'allowed-1' o 'allowed-0' de las MSRs en cada procesador.
Los campos de los registros de control (CR0, CR4) controlan varios aspectos de operación del procesador. El VMM tiene que impedir modificaciones de los guest en los bits de CR0 o CR4 que estén reservados en el tiempo en el que se escribe la VMM.
La VMX proporciona características hardware que se pueden usar para mejorar el rendimiento de la virtualización en un procesador. Las VMMs tienen que estar diseñadas para usar este soporte correctamente. La idea básica de estas optimizaciones es reducir el número de salidas VM mientras se ejecuta un guest VM:
- Acceso de lectura en los registros de control; las lecturas de CR0 o CR4 no provocan salidas de VM
- Acceso de escritura en los registros de control; la mayoría de los diseños VMM requieren la protección de solo ciertos bits de los registros de control. El acceso de escritura a los otros no es problema; esto se consigue con una máscara. La escritura en los bits no protegidos de esos registros no provocarán la salida de la VM.
- Derechos de acceso basados en la protección de la tabla de paginación
- Administración de falta de paginación

No hay comentarios: