这是关于机器虚拟化的。 我正在进行虚拟化并了解通过硬件辅助虚拟化技术,特权指令通过陷阱故障方法识别,并在运行时替换为等效的用户级指令。但是,如果没有硬件支持,虚拟化是如何实现的?在英特尔VTi或AMD-V之前,特权指令是如何被软件本身捕获的?无处不在:使用“二进制转换”术语,只要用用户指令替换特权指令就可以了,但是如何通过虚拟化工具(hypervisor / vmm)识别来宾os运行的特权指令
修改: 有些人认为这个问题并没有表现出研究成果,也没有进行投票。这些是我经历过的一些论文
概述:https://www.vmware.com/pdf/virtualization.pdf
intel doc:https://software.intel.com/sites/default/files/m/d/4/1/d/8/An_Introduction_to_Virtualization.pdf
Intorduction:http://www.kernelthread.com/publications/virtualization/
x86虚拟化http://en.wikipedia.org/wiki/X86_virtualization
hw sf虚拟化的比较:http://www.vmware.com/pdf/asplos235_adams.pdf
螺母和螺栓:http://www.anandtech.com/show/2480
半虚拟化:http://en.wikipedia.org/wiki/Paravirtualization
如果有人有任何纸张/来源可以回答上面提到的问题而且我可能错过了善意的回复。
答案 0 :(得分:2)
如果没有硬件支持,可以使用paravirtualization。客户操作系统已经过修改,因此不会直接访问某些硬件资源,而是调用虚拟机管理器(VMM)或虚拟机管理程序。
例如,不允许x86上的客户机操作系统禁用实际CPU上的中断。相反,来宾操作系统调用VMM来模拟禁用中断。
另一种选择是native virtualization。在本机虚拟化中,来宾操作系统及其进程的说明是模拟。仿真层允许虚拟化软件处理诸如 cli 之类的特权指令。因此,本机虚拟化既不需要硬件支持也不需要修改客户操作系统。
答案 1 :(得分:2)
如果您没有硬件虚拟化,并且您不想考虑半虚拟化,则另一种选择是二进制转换。 x86(我假设是在谈论x86)的问题在于,某些敏感指令没有特权(See Popek and Goldberg virtualization requirements)。在这个意义上,我认为它会导致从用户到内核模式的陷阱。由于这些指令位于来宾内核(以用户空间权限作为来宾运行)中,但不会导致退出,因此可能会出现问题。例如,popf的行为会有所不同,具体取决于它是在用户还是内核中调用(英特尔参考手册第2卷,请参阅popf部分)。因此,当guest虚拟机执行popf时,我们希望VM退出,但它不会。在二进制转换中,我们基本上扫描内核二进制文件,并将与敏感非特权指令相对应的所有机器代码替换为执行正确仿真的机器代码,或者更可能导致VM退出,以便管理程序可以进行干预。可以在this VMware document.中找到一点这方面的内容。我发现的大多数其他文档都可以解释任何深度的二进制翻译都是付费墙。