虚拟化CPU仿真

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

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

为什么我们需要从ISA转换到ISA? 假设我在Windows主机上运行Ubuntu guest虚拟机。 Ubuntu ISA调用与Windows ISA调用不同? 我知道客户无法访问主机上的系统ISA,只有显示器可以这样做。 但为什么需要转换到主机ISA? ISA还取决于操作系统?


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

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

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

链接地址: http://www.djcxy.com/p/46429.html

上一篇: Virtualization CPU Emulation

下一篇: Problems to run kernel with Virtual OpenCL