Los Requerimientos de virtualización de Popek y Goldberg son un conjunto de condiciones suficientes para que una arquitectura de computadores soporte eficientemente la virtualización. Fueron elaborados por Gerald J. Popek y Robert P. Goldberg en su artículo de 1974 Formal Requirements for Virtualizable Third Generation Architectures.[1] Aunque los requisitos se derivan de suposiciones simplificadas, todavía constituyen una manera eficaz de determinar si una arquitectura soporta eficientemente la virtualización, y proporciona líneas maestras para el diseño de arquitecturas virtualizables.
Definición de máquina virtual
Los sistemas de máquinas virtuales son capaces de virtualizar un conjunto completo de recursos de hardware, incluyendo al procesador (o procesadores), memoria, recursos de almacenamiento y dispositivos periféricos. Un monitor de máquina virtual (VMM, Virtual Machine Monitor, también llamado hipervisor) es la pieza fundamental de software que provee la abstracción de una máquina virtual. Hay tres características de interés cuando se analiza el entorno creado por un VMM:
Equivalencia / Fidelidad Un programa corriendo bajo el VMM debe exhibir un comportamiento esencialmente idéntico a aquel demostrado cuando se ejecuta directamente en una máquina equivalente.
Control de recursos / Seguridad El VMM debe estar en completo control de los recursos virtualizados.
Eficiencia / Performance Una fracción estadísticamente dominante de las instrucciones de máquina debe ser ejecutada sin la intervención del VMM.
En la terminología de Popek y Goldberg, un Monitor de Máquina Virtual debe presentar las tres propiedades. En la terminología usada en el libro de referencia de Smith y Nair (2005), se asume que los monitores cumplen las características de equivalencia y control de recursos, y aquellos que cumplen además la característica de performance son llamados monitores eficientes.
Popek y Goldberg describen las características que el Set de Instrucciones de la Arquitectura (ISA) de la máquina física debe poseer para poder correr VMMs que presenten las propiedades arriba mencionadas. Su análisis deriva tales características usando un modelo de "arquitecturas de tercera generación" (por ej. IBM 360, Honeywell 6000, DEC PDP-10) que es sin embargo suficientemente general para ser extendido a máquinas actuales. Este modelo incluye un procesador que opera en modo núcleo (o de sistema) o modo de usuario, y tiene acceso a memoria lineal y uniformemente direccionable. Se asume que un subconjunto del set de instrucciones solo puede ser usado desde el modo de sistema y que la memoria es direccionada relativamente a un registro de reubicación. La E/S y las interrupciones no están modeladas.
Teoremas de la virtualización
Para llegar a sus teoremas de virtualización, que dan condiciones suficientes (mas no necesarias) para la virtualización, Popek y Goldberg clasifican las instrucciones de un ISA en 3 diferentes grupos:
- Instrucciones privilegiadas
- Aquellas que generan un trap si el procesador se encuentra en modo de usuario pero no lo hacen si se encuentra en modo núcleo.
- Instrucciones sensibles de control
- Aquellas que intentan cambiar la configuración de los recursos en el sistema.
- Instrucciones sensibles de comportamiento
- Aquellas cuyo comportamiento o resultado dependen de la configuración de los recursos.
El resultado principal del análisis de Popek y Goldberg puede entonces ser expresado de la siguiente forma.
Teorema 1. Para cualquier computadora convencional de tercera generación, se puede construir un VMM efectivo si el conjunto de instrucciones sensibles es un subconjunto de las instrucciones privilegiadas.
Intuitivamente, el teorema establece que para construir un VMM es suficiente con que todas las instrucciones que pueden afectar el correcto funcionamiento del VMM (las instrucciones sensibles) siempre generen un trap y pasen el control al VMM. Esto garantiza la propiedad de control de recursos. Las instrucciones no privilegiadas, en cambio, deben ser ejecutadas nativamente (para lograr eficiencia). Así también se consigue la propiedad de equivalencia.
Este teorema también brinda una técnica simple para implementar un VMM, llamada trap-and-emulate virtualization (virtualización de atrapar y emular), más recientemente llamada virtualización clásica: dado que todas las instrucciones sensibles se comportan apropiadamente, todo lo que el VMM tiene que hacer es atrapar y emular cada una de ellas.
Un problema relacionado es el de obtener condiciones suficientes para la virtualización recursiva, esto es, las condiciones bajo las que se puede construir un VMM que pueda correr sobre una copia de sí mismo. Popek y Goldberg presentan las siguientes condiciones suficientes.
Teorema 2. Una máquina convencional de tercera generación es recursivamente virtualizable si * es virtualizable y * se puede construir para ella un VMM sin ninguna dependencia de sincronización.
Algunas arquitecturas, como la x86 sin asistencia de hardware, no cumplen estas condiciones, así que no pueden ser virtualizadas de la manera clásica. Pero aun pueden ser completamente virtualizadas (en el caso de x86, a nivel de CPU y MMU) usando diferentes técnicas como la traducción binaria, que reemplaza las instrucciones sensibles que no generan traps, también llamadas instrucciones críticas. Este procesamiento adicional hace al VMM menos eficiente en teoría, pero los traps de hardware también tienen un costo de performance no despreciable, y un sistema de traducción binaria bien afinado puede conseguir rendimiento comparable, lo cual sucede en el caso de las traducción binaria de x86 en relación con la primera generación de x86 asistida por hardware, que solamente hacía que las instrucciones sensibles fueran atrapables. Esto lleva a un teorema con diferentes condiciones suficientes.
Manejo de las instrucciones críticas
Las condiciones para la virtualización del Set de Instrucciones de la Arquitectura (ISA), expresado en el Teorema 1, pueden ser relajadas a expensas de la propiedad de eficiencia. De hecho, se construyen a menudo VMMs para ISAs no virtualizables (en el sentido dado por Popek y Goldberg).
La virtualización de tales arquitecturas requiere el apropiado manejo de las instrucciones críticas, es decir, las instrucciones sensibles pero no priviligiadas. Una aproximación, conocida como patching, adopta técnicas comúnmente utilizadas en recompilación dinámica: las instrucciones críticas son identificadas en tiempo de ejecución y reemplazadas con un trap al VMM. Se han propuesto varios mecanismos para hacer este proceso más eficiente; entre ellos, la asistencia por hardware y el almacenamiento en caché del código de emulación. Una aproximación diferente es la paravirtualización, la cual requiere que el sistema operativo huésped sea modificado (portado) antes de ser ejecutado en el entorno virtual.
Referencias
- ↑ Gerald J. Popek and Robert P. Goldberg (1974). «Formal Requirements for Virtualizable Third Generation Architectures». Communications of the ACM 17 (7): 412 -421.