x86 intel virtualization computer-architecture xen

¿Qué son las instrucciones "no virtualizables" en la arquitectura x86?



intel virtualization (1)

Para virtualizar una ISA, se deben cumplir ciertos requisitos. Popek y Goldberg usaron algo como lo siguiente:

Una máquina tiene al menos dos modos (a) modo de usuario y (b) modo de sistema . Normalmente, las aplicaciones se ejecutan en modo de usuario y el sistema operativo se ejecuta en modo de sistema . En el modo de sistema , el código / programa puede ver y manipular la máquina sin restricciones. En el modo de usuario , el código / programa tiene algunas limitaciones en lo que puede hacer, por ejemplo, no puede acceder a toda la memoria de la máquina sin obtener primero el permiso.

Las instrucciones son (a) privilegiadas o (b) no privilegiadas . Trampas de instrucciones privilegiadas cuando se ejecutan en modo usuario . La captura significa que la máquina se ve forzada a entrar en el modo de sistema, por lo que ejecuta algún código del sistema operativo para hacer frente a la situación. En cierto sentido, alertan al sistema operativo cuando se ejecutan.

Las instrucciones también pueden ser (a) sensibles o (b) no sensibles . Las instrucciones confidenciales modifican parte de los recursos de la máquina o muestran un comportamiento diferente dependiendo de si se ejecutan en modo de usuario o sistema .

Al virtualizar un ISA, es importante que el monitor de la máquina virtual (VMM) pueda detectar y manejar sin problemas cualquier intento del programa o del sistema operativo invitado para modificar los recursos de la máquina. Debe poder ver cuando se ejecutan instrucciones confidenciales . Para hacer esto, todas las instrucciones confidenciales deben tener privilegios y, por lo tanto, captura cuando se ejecutan. Cuando quedamos atrapados, podemos ingresar al modo del sistema y al código de llamada de VMM para manejar la modificación de recursos.

El problema es que no todas las instrucciones confidenciales de X86 son instrucciones privilegiadas . Esto significa que la modificación de recursos puede ocurrir sin que VMM vea y maneje, lo que puede ser peligroso. Alternativamente, podría significar ejecutar una instrucción dentro del sistema operativo invitado en modo de usuario y ver un efecto diferente al haberlo ejecutado en modo de sistema . Según este documento, hay diecisiete instrucciones en x86 que son confidenciales pero no tienen privilegios . Un ejemplo es POPF cuando tiene diferentes semánticas según el modo de la máquina.

Antes de la llegada de la virtualización asistida por hardware, existían instrucciones que no podían virtualizarse debido a varios motivos. ¿Alguien puede explicar cuáles son esas instrucciones y por qué no pueden virtualizarse?