hypervisor是直接运行在物理硬件上的“数字守门人”,分type-1(如esxi、hyper-v)和type-2(如virtualbox)两类;通过cpu硬件辅助虚拟化(vmexit/vmresume)、ept/npt内存映射、及全虚拟化/半虚拟化/设备直通三种i/o路径实现高效资源隔离与共享。

要理解服务器、云平台甚至嵌入式设备如何同时运行多个操作系统,必须先搞懂Hypervisor——它不是软件工具,而是直接接管物理硬件的“数字守门人”,负责把CPU、内存、I/O设备切分成互不干扰的虚拟资源单元。
Hypervisor的本质定位
它是一层极轻量的系统级软件,【不依赖宿主操作系统】,直接运行在物理服务器硬件之上(Type-1)或嵌套于宿主OS内核中(Type-2)。它的存在让多个虚拟机(VM)能共享同一套物理资源,却彼此感知不到对方的存在。
关键区别在于:Type-1 Hypervisor(如VMware ESXi、Microsoft Hyper-V、Xen)自身就是操作系统内核的替代者,启动后立即接管硬件;而Type-2(如VirtualBox、VMware Workstation)本质是宿主OS上的一个进程,所有硬件访问都要经由宿主OS中转,性能损耗明显更高。
CPU虚拟化怎么实现的
现代CPU(Intel VT-x / AMD-V)提供硬件辅助支持,核心机制是引入两种执行模式:
① Hypervisor运行在最高特权级(Root Mode),全程掌控中断、内存映射和指令拦截;
② 虚拟机运行在受限特权级(Non-root Mode),一旦执行敏感指令(如修改CR3寄存器、写I/O端口),CPU自动触发VMExit,将控制权交还给Hypervisor处理;
处理完毕后,Hypervisor调用VMRESUME指令让虚拟机从断点继续执行——整个过程对客户操作系统完全透明,延迟控制在纳秒级。
内存虚拟化为什么不能靠软件模拟
客户机看到的地址是GVA(Guest Virtual Address),经过客户机页表转换为GPA(Guest Physical Address),再由Hypervisor映射到真实的HPA(Host Physical Address)。若全靠软件遍历页表做转换,每次内存访问都将引发多次访存,性能崩塌。
因此,Intel EPT(Extended Page Tables)和AMD NPT(Nested Page Tables)被强制启用:【EPT必须由Hypervisor预先配置并开启,否则虚拟机无法启动】。硬件在MMU中内置二级地址转换引擎,GVA→GPA→HPA全程由CPU流水线完成,避免软件介入,性能损耗压至5%以内。
I/O设备虚拟化的真实路径
方法一:全虚拟化(Emulation)
Hypervisor模拟真实网卡、磁盘控制器(如e1000、IDE),客户机安装通用驱动即可运行。但所有I/O请求都需经Hypervisor解包、重构造、转发,吞吐低、延迟高,仅适合测试环境。
方法二:半虚拟化(Paravirtualization)
客户机安装特制驱动(如Linux virtio-blk、virtio-net),主动通过hypercall通知Hypervisor执行I/O,绕过指令模拟开销。Windows需启用Integration Services,Linux发行版默认已集成virtio支持。
方法三:设备直通(Passthrough)
将物理GPU、NVMe SSD或SR-IOV网卡直接分配给单个VM,Hypervisor仅做DMA地址重映射(依赖Intel VT-d/AMD-Vi),实现接近裸金属的I/O性能。注意:【直通设备在分配期间对其他VM完全不可见,且无法热迁移】。











