做虚拟化相关的工作也有一段时间了,抽出时间把做过的项目和常用的技术梳理一下,能加深理解也能提高。
这篇文章本来打算和以前一样用英文来写,发现太过于耗费时间,毕竟不是母语写作,还是有点难度的。
这篇文章主要总结和介绍一下关于VMM的分类:
按照虚拟平台分类, 可以分为全虚拟化(Full Virtualization)和半虚拟化(Para Virtualization)。
1)全虚拟化:简单来说,就是无需对运行在虚拟化平台上的OS做任何修改;
1,软件辅助的全虚拟化
常见做法就是优先级压缩(Ring Compression)和二进制代码翻译(Binary Translation)。
优先级压缩: 简单来说就是让guest OS跑在较VMM的ring 0 低的优先级ring 1 上,当需要执行特权指令时就触发异常,被VMM截获。
二进制代码翻译:我的理解就是VMM对于guest的二进制代码,发现需要处理的guest指令就将其翻译成支持虚拟化的指令。
2,硬件辅助完全虚拟化
软件辅助的虚拟化,就相当于在系统上打补丁,x86厂商尝试在硬件的层面来改善这个问题,就是在硬件本身加入足够的虚拟化功能,
可以截获操作系统对于敏感资源和敏感指令的操作,从而向VMM报告异常。