lunes, 19 de enero de 2009

Administrar condiciones límite en un monitor de máquina virtual

Las operaciones VMX permiten controlar las interrupciones externas al guest y al host. Con el control del host de las interrupciones externas, el VMM administra los controladores de interrupciones físicas en la plataforma y las interrupciones generadas a través de ella. El VMM expone dispositivos de control de interrupciones virtuales emuladas por software (como las PIC y APIC) para cada instancia de VM guest. Las arquitecturas IA-32 y Intel 64 usan vectores de 8 bits de los cuales 244 (desde 20H hasta FFH) están disponibles para interrupciones externas. Estos vectores se utilizan para seleccionar la entrada apropiada en la tabla de descriptores de interrupciones (IDT).
Para conocer los requisitos de virtualización de interrupciones, el VMM necesita ser propietario de las interrupciones físicas y de los controladores de interrupciones en la plataforma. Para ello necesita exponer los dispositivos de control de interrupciones virtuales en las máquinas virtuales y restringir el acceso al guest a la plataforma de controladores de interrupciones. En la IA-32 y en Intel 64 existen 3 tipos de mecanismos de control de interrupciones externas: los controladores de interrupciones programables (PIC), los controladores de interrupciones programables avanzados (APIC), y las interrupciones señaladas por mensajes (MSI).
Pueden ocurrir condiciones durante las entradas y salidas de una VM y otras situaciones que den lugar a un error. Todas las salidas de una VM cargan el estado del procesador desde el área de estado del host del VMCS. La consistencia de este estado es comprobada antes de que se cargue; normalmente estas comprobaciones son correctas porque el estado del host es comprobado en la entrada al VM. Sólo es posible el fallo si el software del host es incorrecto o si los datos VMCS en la región VMCS en memoria fueron escritos por el software guest desde la última entrada a la VM. Las salidas VM pueden fracasar por estas razones:
- Hubo un fallo almacenando los MSRs guest.
- Hubo un fallo al cargar un PDPTR.
- El VMCS de control fue corrompido y no se puede completar la salida de la VM.
- Hubo un fallo al cargar los MSRs del host.
- Hubo una comprobación de máquina.
Si se da uno de estos problemas en una salida de la VM, resulta en un aborto del VMX.
Un VMM puede poner un procesador lógico en estado de actividad 'wait-for-SIPI' si soporta cierto sistema operativo del guest usando el algoritmo de start-up multiprocesador. Un guest con acceso directo al APIC local físico y usando el algoritmo, manda una secuencia INIT-SIPI-SIPI IPI para comenzar el procesador de aplicaciones. A fin de trampear las SIPIs, el VMM tiene que encender el procesador lógico objetivo de los SIPIs en el modo 'wait-for-SIPI'