这与机器虚拟化有关。我正在经历虚拟化,并了解到在硬件辅助虚拟化技术中,特权指令是通过陷阱-故障方法识别的,并被等效的用户级指令实时替换。但是在缺乏硬件支持的情况下,虚拟化是如何实现的呢?在英特尔VTi或AMD之前,特权指令是如何被软件本身束缚的?在任何地方都使用“二进制翻译”这个术语,它可以用用户指令代替特权指令,但是如何使用虚拟化工具(hypervisor/vmm)来识别客户操作系统运行的特权指令呢?
编辑:有些人认为这个问题并没有表现出研究的努力,而是投了反对票。这些是我看过的一些文件
概述:https://www.vmware.com/pdf/virtualization.pdf
英特尔文档:Virtualization.pdf
诱导:http://www.kernelthread.com/publications/virtualization/
x86虚拟化虚拟化
hw虚拟化的比较:adams.pdf
螺母和螺栓:http://www.anandtech.com/show/2480
半虚拟化:http://en.wikipedia.org/wiki/Paravirtualization
如果有人有任何可以回答上述问题的文件/资料来源,我可能会错过,敬请回答。
发布于 2015-06-07 07:16:11
在缺乏硬件支持的情况下,可以使用半虚拟化。对来宾操作系统进行了修改,以便调用虚拟机管理器(VMM)或虚拟机管理程序,而不是直接访问某些硬件资源。
例如,不能允许x86上的来宾操作系统禁用实际CPU上的中断。相反,客户操作系统调用VMM来模拟禁用中断。
另一种选择是本机虚拟化。在本机虚拟化中,客户操作系统及其进程的指令是模拟的。仿真层允许虚拟化软件处理诸如cli这样的特权指令。因此,本机虚拟化不需要硬件支持,也不需要修改客户操作系统。
发布于 2015-06-13 19:08:16
如果您没有硬件虚拟化,并且不想考虑半虚拟化,则另一个选项是二进制转换。x86的问题(我假设是在谈论x86)是存在某些没有特权(参见Popek和Goldberg虚拟化需求)的耸人听闻的指令。从这个意义上说,特权意味着它将导致从用户模式到内核模式的陷阱。由于这些指令是在来宾内核(它以用户空间特权作为来宾运行)中找到的,但不会导致退出,所以它们可能是一个问题。例如,根据在用户或内核中调用它的不同,popf的行为是不同的(Intel参考手册第2卷,参见关于popf的一节)。因此,当来宾执行popf时,我们希望VM退出,但它不会。在二进制翻译中,我们基本上扫描内核二进制代码,用机器代码替换所有与敏感的非特权指令对应的机器代码,这些代码将执行正确的仿真,或者更有可能导致VM退出,这样虚拟机管理程序就可以进行干预。在这个VMware文档。中可以找到一些这样的东西,我能找到的大多数其他文档,在任何深度解释二进制翻译都在付费墙后面。
https://stackoverflow.com/questions/30641784
复制相似问题