Supongo que está hablando de que el SO invitado modifica la tabla de vectores de interrupción del SO host, ¿correcto? Y no estoy seguro de cómo se conecta el microcontrolador y la “paravirtualización”. Aquí solo me centraré en los conceptos de virtualización clásicos en la CPU normal. Franky, no conozco ningún microcontrolador que implemente software de virtualización (ya sea hardware o software).
El primer IDT (tabla de descriptores de interrupción) siempre se define y ejecuta en el Anillo 0 (es decir, requisitos de hardware y nada que ver con la virtualización). Y en la virtualización (de las cuales hay dos: Tipo 1 y Tipo 2), puede hacer que el SO invitado se ejecute en el Anillo 0 o que no sea cero (por ejemplo, VMware es el anillo 1 y QEMU es el anillo 3). Si el SO invitado está en el anillo 0, puede ejecutar su IDT, pero si no lo está, entonces se necesita la emulación de IDT, en el nivel que no sea el anillo0.
En la virtualización de tipo 1, nuevamente hay dos tipos de arquitectura: HVM (asistida por hardware) y paravirtualización.
- ¿Cuándo puedo decir que he dominado el lenguaje C para sistemas integrados?
- ¿Qué debería leer un estudiante universitario para mantenerse al día con el mundo de los sistemas integrados?
- Cómo convertirse en un geek de sistemas embebidos
- Soy de ECE y lo tengo en TCS. Mi interés está en el sistema integrado. Entonces, ¿hay alguna posibilidad de integrarse en TCS?
- ¿Cuál es el mejor microcontrolador en términos de costo: PIC o Arduino?
En HVM está ejecutando IDT en ring0. Pero no en paravirtualización.
Hipervisores y virtualización: VMware, Hyper-V, XenServer y KVM
Y el IDT para HVM (asistido por hardware) también es compartido por todos los SO invitados (el “controlador de dispositivo” a continuación está en el anillo 0):
En la virtualización de tipo 2, el sistema operativo host siempre tiene el control del IDT. Y hay dos posibilidades: virtualización de hadware (p. Ej., KVM) o virtualización emulada por software (Boch).
En el escenario KVM, el IDT del SO huésped se está ejecutando en el anillo 3, por lo que no hay forma de interferir con el IDT del sistema operativo del host en el anillo 0, pero la interferencia a través de la ruta de vulnerabilidad aún es posible, ya que KVM tiene un componente de módulo de núcleo ejecutándose en el anillo 0.
En el caso de Boch, * teóricamente * no hay forma de modificar el anillo 0 IDT (host) por un anillo 3 IDT (invitado).
Para resumir:
Tanto para el tipo 1 como para el tipo 2, siempre que use “virtualización de hardware”, el ID del sistema operativo invitado está en el anillo 0: