虚拟化的三个条件:等价性,高效性和资源控制。这三条是针对VMM(Virtual Machine Manager)说的。
陷入和模拟模型 处理器分为两种运行模式:系统模式和用户模式。CPU指令对应分为特权指令和非特权指令。
陷入和模拟模型下,虚拟机用户程序仍然运行在用户模式下,虚拟机的内核也运行在用户模式,成为特权级压缩(Ring Compression)。这种模式下,虚拟机的非特权指令直接运行在处理器上。执行特权指令时会触发处理器异常,从而陷入VMM中,由VMM代理虚拟机完成系统资源的访问----模拟。
X86架构虚拟化的障碍 x86架构并不是所有的敏感指令都是特权指令。---- 解决办法是静态翻译和动态翻译。翻译是指对敏感指令进行翻译,静态是对可执行文件的指令进行翻译,动态翻译是以代码块为单元动态修改二进制代码。
VMX 为了从硬件层面解决x86架构的虚拟化问题,intel开发了VT技术支持虚拟化,为CPU增加了Virtual-Machine Extensions, 简称VMX。
启动VMX支持后, CPU提供两种运行模式:VM Root Mode和 VMX non-Root Mode, 每种模式都支持ring0 ~ ring3 . VMM运行在 Root Mode, VM运行在non-Root Mode。Guest无需再采用特权压缩方式,Guest kernel直接运行在VMX non-Root Mode的ring0种。
这个模式的好处:
Guest用户空间的系统调用直接陷入Guest模式的内核空间,不再陷入Host模式的内核空间。 对于外部中断,会触发CPU从Guest模式退出到Host模式,Host内核处理外部中断后再重新切入Guest模式。 不再是所有的特权指令都会导致处于Guest模式的CPU会发生VM exit,只有敏感指令才会。因为不是所有的特权指令都需要VMM来处理。