我对虚拟机的CPU虚拟化有疑问。我无法理解动态到本机代码转换和陷阱和模拟转换之间的区别。
据我所知,在第一种情况下假设我从不同平台模拟二进制代码,如果我有一个x86 CPU,代码将转换为等效的x86指令。现在,在trap-and-emulate方法中,虚拟机从来宾操作系统接收ISA调用,并将其转换为主机操作系统的等效ISA调用。
为什么我们需要从ISA转换为ISA?假设我在Windows主机上运行Ubuntu来宾。 Ubuntu ISA调用与Windows ISA调用不同?我知道Guest无法访问主机上的System ISA,只有监视器才能这样做。但为什么需要转换到主机ISA? ISA还取决于操作系统吗?
答案 0 :(得分:4)
Trap-and-emulate是一种在非特权环境中运行“特权”代码的方法(例如:将内核作为应用程序运行)。 它的工作方式是你开始执行特权代码,一旦它试图执行特权指令(例如x86中的lidt),主机操作系统就会发出一个陷阱。在该陷阱的处理程序中,您可以模拟该特定的特权指令,然后让guest虚拟机内核继续执行。 这样做的好处是,您将达到接近本机速度的CPU仿真。
然而,仅仅模拟ISA只是模拟完整系统的“小”部分。 MMU的仿真/虚拟化要正确得多,并且要快速运行。