【问题标题】:how is machine-virtualization achieved without hardware support在没有硬件支持的情况下如何实现机器虚拟化
【发布时间】:2015-08-18 22:38:26
【问题描述】:

这是关于机器虚拟化的。 我正在经历虚拟化,并了解到通过硬件辅助虚拟化技术,特权指令由陷阱故障方法识别,并动态替换为等效的用户级指令。但是在没有硬件支持的情况下,虚拟化是如何实现的?在 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

如果有人有任何论文/资料可以回答上面提出的问题,我可能错过了回复。

【问题讨论】:

  • 捕获特权指令是标准技术。无需替换,内核只需执行等效操作并递增指令指针即可让程序继续运行。
  • @HansPassant 你能详细说明从客户操作系统发出特权指令到下一条指令开始执行之间的步骤吗?

标签: x86 operating-system virtual-machine virtualization itanium


【解决方案1】:

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

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

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

【讨论】:

  • 没错,但我的问题不是这样。当客户操作系统无法修改时,例如 windows-xp..,它是如何实现的?
  • 感谢,虽然这有一些附加值,“这种方法,通常称为“本机虚拟化”,不同于单纯的模拟。使用这种方法,如 BOCHS 等程序执行的,来宾代码不是允许直接在主机上运行。相反,每条机器指令都被翻译(“模拟”)。“-同意。我的问题是它如何识别客人何时发出特权指令并有选择地模拟它们而不是模拟客人发出的每一条指令......?
  • 基本上模拟器有一个大表来指示操作码是否有特权。表值由指令集架构决定。
  • 是否正确地说 1. 客户操作系统地址范围是已知的,并且源自这些地址范围的任何操作码都可以根据地址进行隔离。 2.来自来宾操作系统地址范围的操作码与“大表”进行比较,然后决定进一步的行动方案。谢谢@Craig,您能否指出一些材料/资源,这将使我能够在较低的抽象级别上了解此实现的更多细节。特别是表格等人。
  • #1 - 是的,客户操作系统地址范围是已知的。此外,客户操作系统通常在处理器的内核或特权模式下执行。 #2 - 是的,没错。 #3。我会看仿真论文。从cs.washington.edu/research/compiler/papers.d/shade.html开始
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 2012-03-09
    相关资源
    最近更新 更多