3

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


编辑:有些人认为这个问题没有显示出研究工作并且正在投票。这些是我看过的一些论文

概述:https ://www.vmware.com/pdf/virtualization.pdf

英特尔文档:https ://software.intel.com/sites/default/files/m/d/4/1/d/8/An_Introduction_to_Virtualization.pdf

简介: 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

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

4

2 回答 2

2

在没有硬件支持的情况下,可以使用半虚拟化。客户操作系统被修改,因此不是直接访问某些硬件资源,而是调用虚拟机管理器 (VMM) 或管理程序。

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

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

于 2015-06-07T07:16:11.693 回答
1

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

于 2015-06-13T19:08:16.883 回答