Para comprender los retos que tuvo que afrontar la virtualización debemos tener en cuenta que:
Los sistemas operativos están diseñados para ejecutarse directamente en el hardware (sobre el propio componente físico o metal desnudo), asumiendo que es lo mejor. Como muestra la figura una arquitectura x86 ofrece cuatro niveles de privilegio (anillos 0 , 1 , 2 y 3) a los sistemas operativos y aplicaciones para gestionar el acceso al hardware y periféricos.
Mientras que las aplicaciones a nivel de usuario normalmente se ejecutan en el anillo 3 , el sistema operativo tiene que tener acceso directo a la memoria y el hardware y deberá ejecutar sus instrucciones privilegiadas en el anillo 0 . La virtualización de la arquitectura x86 requiere la colocación de una capa de virtualización en el sistema operativo (que deberia estar en el anillo más privilegiados 0 ) para crear y administrar las máquinas virtuales que ofrecen los recursos compartidos.
Considerando que algunas instrucciones sensibles no pueden ser virtualizadas ya que tienen semánticas diferentes cuando no se ejecutan en el anillo 0. La dificultad en la colocación de trampas y la traducción de estos pedidos de instrucciones confidenciales y privilegiadas en tiempo de ejecución, hizo que la virtualizacion fuera todo un reto imposible sobre una arquitectura x86.
En 1998 VMware resolvió el reto, desarrollando técnicas de traducción binaria que permiten que las máquinas virtuales se ejecuten en el anillo 0 para el aislamiento y el rendimiento , moviendo el sistema operativo a un anillo de nivel de usuario con privilegio mayor que las aplicaciones en el anillo 3 , pero de menos privilegio para el monitoreo de la maquina virtual desde el anillo 0. Toda empresa que desarrolle soluciones de virtualización es libre de interpretar los desafíos técnicos y el desarrollo de soluciones con diferentes fortalezas y debilidades. En este articulo mencionaremos tres técnicas alternativas para el manejo de las instrucciones confidenciales y privilegiadas para virtualizar el CPU de una arquitectura x86 :
- La virtualización completa usando traducción binaria
- Paravirtualización o virtualización asistida de sistemas operativos
- Hardware de virtualización asistida ( primera generación)
