我有一个关于来自虚拟机的CPU虚拟化的问题。我不能理解动态到本机代码的转换和陷阱模拟转换之间的区别。
据我所知,在第一种情况下,假设我模拟来自不同平台的二进制代码,如果我有一个x86 CPU,代码将被转换为等效的x86指令。现在,在陷阱模拟方法中,虚拟机从客户操作系统接收ISA调用,并将其转换为主机操作系统的等效ISA调用。
为什么我们需要从ISA到ISA的转换?假设我在Windows主机上运行一个Ubuntu来宾操作系统。Ubuntu ISA调用与Windows ISA调用不同?我知道来宾无法访问主机上的系统ISA,只有监视器可以这样做。但是为什么需要转换到Host ISA呢?ISA还依赖于操作系统吗?
发布于 2013-05-02 19:50:38
当从一个ISA在另一个ISA上运行代码时,会使用“即时到本机”转换(通常称为JIT编译/转换),例如在x86 CPU上运行M68K代码。它不是虚拟化,而是仿真。
陷阱模拟是一种在非特权环境中运行“特权”代码的方法(例如:将内核作为应用程序运行)。它的工作方式是开始执行特权代码,一旦它试图执行特权指令(例如x86中的lidt),主机操作系统就会发出一个陷阱。在该陷阱的处理程序中,您可以模拟特定的特权指令,然后让客户内核继续执行。这样做的好处是您将达到接近CPU仿真的本机速度。
然而,仅仅模拟ISA只是模拟整个系统的一个“小”部分。MMU的仿真/虚拟化要想正确运行和快速运行要复杂得多。
https://stackoverflow.com/questions/16247813
复制相似问题