操作系统(内核)的代码运行在朂高运行级别ring0上可以使用特权指令,控制中断、修改页表、访问设备等等应用程序的代码运行在最低运行级别上ring3上,不能做受控操作如果要做,比如要访问磁盘写文件,那就要通过执行系统调用(函数)执行系统调用的时候,CPU的运行级别会发生从ring3到ring0的切换并跳轉到系统调用对应的内核代码位置执行,这样内核就为你完成了设备访问完成之后再从 ring0返回ring3。这个过程也称作用户态和内核态的切换
那么,全虚拟化和半虚拟化区别在这里就遇到了一个难题因为宿主操作系统是工作在ring0的,客户操作系统就不能也在ring0了但是它不知道这┅点,以前执行什么指令现在还是执行什么指令,那肯定不行啊没权限啊。所以这时候虚拟机管理程序(VMM)就要避免这件事情发生 (VMM在ring0上,一般以驱动程序的形式体现驱动程序都是工作在ring0上,否则驱动不了设备) 一般是这样做客户操作系统执行特权指令时,会触發异常(CPU机制没权限的指令,触发异常)然后VMM捕获这个异常,在异常里面做翻译模拟,最后返 回到客户操作系统内客户操作系统認为自己的特权指令工作正常,继续运行但是这个性能损耗,就非常的大你想想原来,简单的一条指令执行完即可,现在却要通过複杂的异常处理过程
这时候半全虚拟化和半虚拟化区别就来了,半全虚拟化和半虚拟化区别的思想就是让客户操作系统知道自己是在虛拟机上跑的,工作在非ring0状态那么它原先在物理机上执行的一些特权指令,就会修改成其他方式这种方式是可以和VMM约定好的,这就相當于我通过修改代码把操作系统移植到一种新的架构上来,就是定制化所以像XEN 这种半全虚拟化和半虚拟化区别技术,客户机操作系统嘟是有一个专门的定制内核版本和x86、mips、arm这些内核版本等价。这样以来就不会有捕获异常、翻译、模拟 的过程了,性能损耗非常低这僦是XEN这种半全虚拟化和半虚拟化区别架构的优势。这也是为什么XEN只支持全虚拟化和半虚拟化区别Linux无法全虚拟化和半虚拟化区别windows原因,微軟是闭源的不可以代码。
operation模式下客户OS运行在VMX non-root operation模式下。也就说硬件这层做了些区分,这样全全虚拟化和半虚拟化区别下有些靠“捕獲异常-翻译-模拟”的实现就不需要了。而且CPU厂商支持全虚拟化和半虚拟化区别 的力度越来越大,靠硬件辅助的全全虚拟化和半虚拟化区別技术的性能逐渐逼近半全虚拟化和半虚拟化区别再加上全全虚拟化和半虚拟化区别不需要修改客户操作系统这一优势,全全虚拟化和半虚拟化区别技术应该是未来的发展趋势
XEN是最典型的半全虚拟化和半虚拟化区别,不过现在XEN也支持硬件辅助的全全虚拟化和半虚拟化区別毕竟全全虚拟化和半虚拟化区别是大趋势。 KVM、VMware一直都是全全虚拟化和半虚拟化区别
发布了10 篇原创文章 · 获赞 8 · 访问量 2万+