无Intel-VT/AMD-SVM的传统x86架构是否支持Type 1 Hypervisor?
一、硬件辅助虚拟化出现前,传统x86支持Type1 Hypervisor吗?
当然支持。最典型的例子是2001年发布的VMware ESX Server,它是标准的Type1 Hypervisor,直接运行在裸机硬件上,完全不需要宿主操作系统,而Intel VT-x和AMD SVM分别到2005、2006年才推出。
二、如何处理无法跨特权级触发陷阱的敏感指令?
传统x86架构天生有“虚拟化不友好”的缺陷:部分敏感指令(比如POPF、PUSHF、MOV CR0的部分操作、INVD等)在非Ring0特权级执行时,不会触发陷阱,导致纯**捕获-模拟(trap-and-emulate)**机制失效。早期Type1 Hypervisor主要靠两种核心技术解决这个问题:
动态二进制翻译:
Hypervisor运行在最高特权级Ring0,客户机操作系统原本要在Ring0执行的指令,会被动态翻译成在Ring1(中间特权级)执行的代码。翻译时会把那些不会触发陷阱的敏感指令做两种处理:要么替换成能主动触发Hypervisor陷阱的指令(比如INT中断),让Hypervisor接管并模拟指令的正确效果;要么直接计算指令结果并更新虚拟寄存器状态,跳过陷阱开销。这种方式既保留了特权级隔离(Hypervisor在Ring0,客户机OS在Ring1,应用在Ring3),又用动态翻译补全了捕获-模拟的漏洞。影子页表:
针对内存虚拟化相关的敏感指令(比如MOV CR3、INVLPG),Hypervisor会维护一套“影子页表”。客户机OS看到的是虚拟页表,而实际硬件使用的是Hypervisor管理的影子页表,负责把客户机虚拟地址直接映射到物理地址。当客户机修改自身页表时,Hypervisor会捕获操作并同步更新影子页表,同时直接模拟那些不会触发陷阱的页表指令效果,确保内存访问的正确性和隔离性。
内容的提问来源于stack exchange,提问作者Phantom

