X86 没有硬件支持,机器虚拟化是如何实现的

X86 没有硬件支持,机器虚拟化是如何实现的,x86,operating-system,virtual-machine,virtualization,itanium,X86,Operating System,Virtual Machine,Virtualization,Itanium,这是关于机器虚拟化的。 我正在经历虚拟化,并了解到通过硬件辅助虚拟化技术,特权指令通过陷阱故障方法识别,并在运行中替换为等效的用户级指令。但是,在没有硬件支持的情况下,虚拟化是如何实现的?在英特尔VTi或AMD-V之前,特权指令是如何被软件本身捕获的?在任何地方都会使用“二进制转换”这一术语,就用用户指令替换特权指令而言,这很好,但虚拟化工具(hypervisor/vmm)如何识别来宾操作系统运行的特权指令 编辑: 有些人认为这个问题没有显示出研究的努力,所以投了反对票。这些是我看过的一些文件

这是关于机器虚拟化的。 我正在经历虚拟化,并了解到通过硬件辅助虚拟化技术,特权指令通过陷阱故障方法识别,并在运行中替换为等效的用户级指令。但是,在没有硬件支持的情况下,虚拟化是如何实现的?在英特尔VTi或AMD-V之前,特权指令是如何被软件本身捕获的?在任何地方都会使用“二进制转换”这一术语,就用用户指令替换特权指令而言,这很好,但虚拟化工具(hypervisor/vmm)如何识别来宾操作系统运行的特权指令


编辑: 有些人认为这个问题没有显示出研究的努力,所以投了反对票。这些是我看过的一些文件

概述:

英特尔文档:

引言:

x86虚拟化

硬件sf虚拟化的比较:

螺母和螺栓:

半虚拟化:


如果任何人有任何论文/资料可以回答上述问题,我可能错过了,请回答。

在没有硬件支持的情况下,可以使用。对来宾操作系统进行了修改,以便调用virtual machine manager(VMM)或虚拟机监控程序,而不是直接访问某些硬件资源

例如,不能允许x86上的来宾操作系统禁用实际CPU上的中断。相反,来宾操作系统调用VMM来模拟禁用中断


另一种选择是。在本机虚拟化中,来宾操作系统及其进程的指令是模拟的。仿真层允许虚拟化软件处理特权指令,如cli。因此,本地虚拟化既不需要硬件支持,也不需要修改客户操作系统。

< P>如果没有硬件虚拟化,并且不想考虑半虚拟化,则另一个选项是二进制翻译。x86的问题(我假设我们谈论的是x86)是存在某些非特权的敏感指令()。从这个意义上讲,特权意味着它将导致从用户模式到内核模式的陷阱。由于这些指令位于来宾内核(以来宾权限运行)中,但不会导致退出,因此它们可能是一个问题。例如,根据是在用户还是在内核中调用,popf的行为会有所不同(《英特尔参考手册》第2卷,请参阅关于popf的部分)。因此,当来宾执行popf时,我们希望VM退出,但它不会。在二进制翻译中,我们基本上扫描内核二进制文件,并用机器代码替换与敏感的非特权指令相对应的所有机器代码,这些机器代码将执行正确的模拟,或者更可能导致VM退出,以便虚拟机监控程序可以进行干预。在我能找到的解释二进制翻译的大多数其他文档中都可以找到一点这一点,这些文档位于付费墙后面。

捕获特权指令是标准技术。无需更换,内核只需执行等效的操作并递增指令指针即可让程序继续运行。@HansPassant您能否分步详细说明从来宾操作系统发出特权指令到下一条指令开始执行之间会发生什么?没错,然而,我的问题不是这样。当无法修改来宾操作系统(例如windows xp)时,它是如何实现的?尽管这有一些附加值,但还是要感谢。”这种方法通常被称为“本机虚拟化”“,与单纯的模仿不同。使用这种方法,正如BOCHS等程序所执行的那样,来宾代码不允许直接在主机上运行。相反,每一条机器指令都被翻译(“模拟”)。“-同意。我的问题是,它如何识别guest何时发出特权指令,并有选择地模拟它们,而不是模拟guest发出的每一条指令..?实际上,仿真器有一个大表,指示操作码是否具有特权。表值由指令集体系结构决定。1是否正确。来宾操作系统的地址范围是已知的,并且可以根据地址隔离源自这些地址范围的任何操作码。2.将来宾操作系统地址范围中的操作码与“大表”进行比较,然后决定进一步的操作过程。谢谢@Craig,您能指出一些材料/资源吗?这些材料/资源将允许我在较低的抽象级别上深入了解此实现的更多细节。特别是表等#1-是的,来宾操作系统地址范围是已知的。此外,来宾操作系统通常在处理器的内核或特权模式下执行#是的,没错#3.我会看仿真文件。从