首页 文章

虚拟化CPU仿真

提问于
浏览
2

我有一个关于虚拟机CPU虚拟化的问题 . 我无法理解动态到本机代码转换和陷阱和模拟转换之间的区别 .

据我所知,在第一种情况下假设我从不同的平台模拟二进制代码,如果我有一个x86 CPU,代码将转换为等效的x86指令 . 现在,在trap-and-emulate方法中,虚拟机从来宾操作系统接收ISA调用,并将其转换为主机操作系统的等效ISA调用 .

为什么我们需要从ISA转换为ISA?假设我在Windows主机上运行Ubuntu来宾 . Ubuntu ISA调用与Windows ISA调用不同?我知道Guest无法访问主机上的System ISA,只有监视器才能这样做 . 但为什么需要转换到主机ISA? ISA还取决于操作系统?

1 回答

  • 4

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

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

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

相关问题