Los requisitos de virtualización de Popek y Goldberg son un conjunto de condiciones suficientes para que una arquitectura informática admita la virtualización de sistemas de manera eficiente. Fueron introducidos por Gerald J. Popek y Robert P. Goldberg en su artículo de 1974 "Requisitos formales para arquitecturas virtualizables de tercera generación". [1] Aunque los requisitos se derivan de supuestos simplificadores, siguen representando una forma conveniente de determinar si una arquitectura informática admite una virtualización eficiente y proporcionan pautas para el diseño de arquitecturas informáticas virtualizadas.
Las máquinas virtuales de sistema son capaces de virtualizar un conjunto completo de recursos de hardware, incluyendo un procesador (o procesadores), recursos de memoria y almacenamiento y dispositivos periféricos. Un monitor de máquina virtual (VMM, también llamado hipervisor ) es la pieza de software que proporciona la abstracción de una máquina virtual. Hay tres propiedades de interés al analizar el entorno creado por un VMM: [2]
En la terminología de Popek y Goldberg, un VMM debe presentar las tres propiedades. En la terminología utilizada en el libro de referencia de Smith y Nair (2005), se supone que los VMM satisfacen las propiedades de equivalencia y control de recursos, y aquellos que además cumplen con la propiedad de rendimiento se denominan VMM eficientes . [3]
Popek y Goldberg describen las características que debe poseer la arquitectura del conjunto de instrucciones (ISA) de la máquina física para ejecutar máquinas virtuales que poseen las propiedades mencionadas anteriormente. Su análisis deriva dichas características utilizando un modelo de "arquitecturas de tercera generación" (por ejemplo, IBM 360, Honeywell 6000, DEC PDP-10) que, no obstante, es lo suficientemente general como para extenderse a las máquinas modernas. Este modelo incluye un procesador que opera en modo de sistema o de usuario y tiene acceso a una memoria lineal y uniformemente direccionable. Se supone que un subconjunto del conjunto de instrucciones está disponible solo cuando está en modo de sistema y que la memoria se direcciona en relación con un registro de reubicación. No se modelan las E/S ni las interrupciones.
Para derivar sus teoremas de virtualización, que dan condiciones suficientes (pero no necesarias) para la virtualización, Popek y Goldberg introducen una clasificación de algunas instrucciones de una ISA en 3 grupos diferentes:
El resultado principal del análisis de Popek y Goldberg puede expresarse de la siguiente manera.
Teorema 1. Para cualquier computadora convencional de tercera generación , se puede construir un VMM efectivo si el conjunto de instrucciones sensibles para esa computadora es un subconjunto del conjunto de instrucciones privilegiadas.
Intuitivamente, el teorema establece que para construir un VMM es suficiente que todas las instrucciones que puedan afectar el correcto funcionamiento del VMM (instrucciones sensibles) siempre capturen y pasen el control al VMM. Esto garantiza la propiedad de control de recursos. Las instrucciones no privilegiadas, en cambio, deben ejecutarse de forma nativa (es decir, de manera eficiente). También se deduce que se mantiene la propiedad de equivalencia.
Este teorema también proporciona una técnica simple para implementar un VMM, llamada virtualización de trampa y emulación , más recientemente llamada virtualización clásica : debido a que todas las instrucciones sensibles se comportan bien, todo lo que el VMM tiene que hacer es atrapar y emular cada una de las instrucciones sensibles. [4] [5]
Un problema relacionado es el de derivar condiciones suficientes para la virtualización recursiva, es decir, las condiciones bajo las cuales se puede construir una máquina virtual que pueda ejecutarse en una copia de sí misma. Popek y Goldberg presentan las siguientes condiciones (suficientes).
Teorema 2. Una computadora convencional de tercera generación es virtualizable recursivamente si:
Algunas arquitecturas, como la x86 sin asistencia de hardware , no cumplen estas condiciones, por lo que no se pueden virtualizar de la manera clásica. Pero las arquitecturas aún se pueden virtualizar por completo (en el caso de la x86, es decir, a nivel de CPU y MMU) mediante el uso de diferentes técnicas como la traducción binaria, que reemplaza las instrucciones sensibles que no generan trampas, [4] que a veces se denominan instrucciones críticas. Sin embargo, este procesamiento adicional hace que el VMM sea menos eficiente en teoría, [5] pero las trampas de hardware también tienen un costo de rendimiento no despreciable. [ cita requerida ] Un sistema de traducción binaria de almacenamiento en caché bien ajustado puede lograr un rendimiento comparable, y lo hace en el caso de la traducción binaria x86 en relación con la asistencia de hardware x86 de primera generación, que simplemente hizo que las instrucciones sensibles fueran atrapables. [6] Efectivamente, esto da un teorema con diferentes condiciones de suficiencia. [ cita requerida ]
Teorema 3. Se puede construir un VMM híbrido para cualquier máquina de tercera generación en la que el conjunto de instrucciones sensibles al usuario sea un subconjunto del conjunto de instrucciones privilegiadas:
Las condiciones para la virtualización de ISA expresadas en el Teorema 1 pueden ser relajadas a expensas de la propiedad de eficiencia. Se han construido VMM para ISA no virtualizables (en el sentido de Popek y Goldberg) de manera rutinaria.
La virtualización de tales arquitecturas requiere un manejo correcto de las instrucciones críticas , es decir, instrucciones sensibles pero sin privilegios. Un enfoque, conocido como parcheo , adopta técnicas comúnmente utilizadas en la recompilación dinámica : las instrucciones críticas se descubren en tiempo de ejecución y se reemplazan con una trampa en el VMM. Se han propuesto varios mecanismos, como el almacenamiento en caché del código de emulación o las asistencias de hardware , para hacer que el proceso de parcheo sea más eficiente. Un enfoque diferente es el de la paravirtualización , que requiere que los sistemas operativos invitados se modifiquen ( porten ) antes de ejecutarse en el entorno virtual.
En esta sección se presentan algunas arquitecturas relevantes y cómo se relacionan con los requisitos de virtualización.
La arquitectura PDP-10 tiene algunas instrucciones que son sensibles (alteran o consultan el modo del procesador) pero no privilegiadas. [7] Estas instrucciones guardan o restauran los códigos de condición que contienen bits USER o IOT:
Todas las instrucciones sensibles en el Sistema/370 son privilegiadas: satisface los requisitos de virtualización. [8]
El Motorola MC68000 tiene una única instrucción sensible sin privilegios:
Esta instrucción es sensible porque permite el acceso a todo el registro de estado, que incluye no solo los códigos de condición sino también el bit de usuario/supervisor, el nivel de interrupción y el control de seguimiento. En la mayoría de los miembros posteriores de la familia, a partir del MC68010 , la instrucción MOVE from SR se hizo privilegiada y se proporcionó una nueva instrucción MOVE from CCR para permitir el acceso solo al registro de código de condición. [9] [10]
El conjunto de instrucciones IA-32 del procesador Pentium contiene 18 instrucciones sensibles y sin privilegios. [11] Se pueden clasificar en dos grupos:
La introducción de los conjuntos de instrucciones AMD-V e Intel VT-x en 2005 permite que los procesadores x86 cumplan con los requisitos de virtualización de Popek y Goldberg.
El esfuerzo necesario para soportar la virtualización en la arquitectura IA-64 se describe en un artículo de 2000 de Magenheimer y Christian. [12]
En UltraSPARC Architecture 2005 se especificó un modo "hiperprivilegiado" para la arquitectura UltraSPARC . [13] Define una plataforma sun4v [14] que es un superconjunto de la plataforma sun4u , pero que aún cumple con la especificación SPARC v9 Nivel 1 [15] .
Todas las instrucciones sensibles en el conjunto de instrucciones de PowerPC son privilegiadas. [16] [17]
El requisito de eficiencia en la definición de Popek y Goldberg de una VMM se refiere únicamente a la ejecución de instrucciones no privilegiadas, que deben ejecutarse de forma nativa. Esto es lo que distingue a una VMM de la clase más general de software de emulación de hardware . Desafortunadamente, incluso en una arquitectura que cumple con los requisitos de Popek y Goldberg, el rendimiento de una máquina virtual puede diferir significativamente del hardware real. Los primeros experimentos realizados en el System/370 (que cumple con los requisitos formales del Teorema 1) mostraron que el rendimiento de una máquina virtual podía ser tan bajo como el 21% de la máquina nativa en algunos puntos de referencia. El costo de atrapar y emular instrucciones privilegiadas en la VMM puede ser significativo. Esto llevó a los ingenieros de IBM a introducir una serie de asistencias de hardware , que prácticamente duplicaron el rendimiento de las máquinas virtuales System/370. [18] Las asistencias se agregaron en varias etapas. Al final, hubo más de 100 asistencias en los últimos modelos System/370. [19]
Uno de los principales factores que impulsaron el desarrollo de asistencias de hardware para el System/370 fue la propia memoria virtual. Cuando el invitado era un sistema operativo que implementaba por sí mismo memoria virtual, incluso las instrucciones no privilegiadas podían experimentar tiempos de ejecución más largos, una penalización impuesta por el requisito de acceder a tablas de traducción que no se utilizan en la ejecución nativa (ver tablas de páginas ocultas ). [20]
{{cite book}}
: Mantenimiento de CS1: falta la ubicación del editor ( enlace )