这个问题可能很有趣(我对管理程序也很陌生)。我对 SLAT 有很大的困惑(为什么需要它?)。如果我没记错的话 SLAT(二级地址翻译)用于为客人进行地址翻译虚拟地址到实际物理地址(客户虚拟到主机物理地址(如果错了请纠正我,即:客户虚拟地址->主机虚拟地址->主机物理地址)。如果硬件不支持SLAT,那么我们必须使用影子页面表做同样的事情(在 SW 中做额外的翻译对 CPU 来说开销更大)。
但我的问题是,我们不能通过将实际物理内存传递给客户操作系统并让客户操作系统处理相同的内容(而不是使用 SLAT 或影子分页)来跳过此页表处理吗?就像从 Hypervisor 中 UNMAP 一些内存库(物理 RAM 地址范围)一样,并将其分配给来宾,并在关闭 mmu 的情况下启动该特定 CPU,并且恰好在开始执行来宾代码之前。在来宾中运行的代码(可能是内核启动代码)让它创建自己的页表并启用 MMU 而不是 SLAT?当我们需要停止 VM 时(最后来宾 opt 应该再次停止 mmu),然后我们可以将 HV 分页恢复到特定的 CPU 内核并启用 MMU,对吗?
这种方法是否有任何漏洞/问题(这有意义吗?)?我们不能在虚拟化中跳过 SLAT 吗?
(如果我的问题没有任何意义,请原谅我,因为我对虚拟化很陌生:()