【问题标题】:Virtualization CPU Emulation虚拟化 CPU 仿真
【发布时间】:2013-04-21 07:10:54
【问题描述】:

我有一个关于虚拟机 CPU 虚拟化的问题。我无法理解即时到本机代码翻译和陷阱和模拟翻译之间的区别。

据我了解,在第一种情况下,假设我从不同平台模拟二进制代码,如果我有一个 x86 CPU,代码将转换为等效的 x86 指令。现在,在陷阱和仿真方法中,虚拟机接收来自客户操作系统的 ISA 调用,并将其转换为主机操作系统的等效 ISA 调用。

为什么我们需要从 ISA 翻译到 ISA?假设我在 Windows 主机上运行 Ubuntu 来宾。 Ubuntu ISA 调用与 Windows ISA 调用不同?我了解访客无法访问主机上的系统 ISA,只有监视器可以这样做。但为什么需要转换为 Host ISA? ISA 也依赖于操作系统?

【问题讨论】:

    标签: virtualization virtual-machine


    【解决方案1】:

    “即时到本机”翻译(通常称为 JIT 编译/翻译)用于在另一个 ISA 上运行来自一个 ISA 的代码,例如在 x86 CPU 上运行 M68K 代码。 这绝不是虚拟化,而是仿真。

    Trap-and-emulate 是一种在非特权环境中运行“特权”代码的方法(例如:将内核作为应用程序运行)。 它的工作方式是您开始执行特权代码,一旦它尝试执行特权指令(例如 x86 中的 lidt),主机操作系统将发出一个陷阱。在该陷阱的处理程序中,您可以模拟该特定特权指令,然后让来宾内核继续执行。 这样做的好处是您将达到接近 CPU 仿真的本机速度。

    但是,仅模拟 ISA 只是模拟完整系统的“一小部分”。 MMU 的模拟/虚拟化要正确并快速运行要复杂得多。

    【讨论】: