x86硬件辅助虚拟化之虚拟机与VMM(1)(8)
临界指令实例讲解
我们用一个实际的例子来解释x86指令集的虚拟化漏洞。SMSW指令(取机器状态字的指令)是为了向下兼容老式处理器,这个指令应该由操作系统完成,也就是说需要Ring0才可以,但很可惜它没有被放在特权指令中。在虚拟化环境中,客户机操作系统都工作在非特权层次上(一般为Ring1或者Ring3),前面我们讲到非特权指令在较低特权级别时可以不被VMM捕获而直接执行。
不同的特权级别满足不同程序运行的需求
客户机操作系统在执行这个指令时,直接取到的是真实机器的值(假设取值1为保护模式,0为实模式),现在的VMM一般都工作在保护模式下,如果客户机操作系统正好运行在实模式下,那么问题就出来了,SMSW取到的值是1,表示系统运行在保护模式下,而不是真正的客户机操作系统的实模式的返回值0,这显然是不正确的。
写在最后
讲到这里,大家应该对虚拟化和虚拟机的定义以及VMM有了一个整体的认识,也搞明白了x86指令集为什么是不可虚拟化架构,这为我们更好地理解后续要讲解的硬件辅助虚拟化奠定了一定的理论基础。下一次我们就给大家讲解传统CPU虚拟化模型的技术(特权解除和先陷入后模拟)以及软件CPU虚拟化和硬件CPU辅助虚拟化的解决方法,敬请关注!
MC特约评论员 林昊翔(虚拟化技术爱好者)
虚拟化技术优势日益体现,不仅大幅度降低了IT支出成本、减少能源浪费,而且还极大地增强了系统整体安全性和可靠性。软硬件厂商未来可能携手提高虚拟化产品的自身性能以及提供更丰富的功能。基于主机操作系统的虚拟机产品以及硬件虚拟化技术得到更广泛应用。硬件厂商在操作模式间的转换速度、TLB性能、内存虚拟化和I/O虚拟化等方面加以改进和完善;软件厂商则利用二进制动态翻译及程序行为分析的技术减小性能开销,利用内存和存储的重复删除技术降低资源开销。而分布式文件系统和分布式共享内存等技术的引入将有助于打造一个高可用、高容错的分布式虚拟化软件平台,便于虚拟机的部署和动态迁移。
分享按钮