0

这个问题可能很有趣(我对管理程序也很陌生)。我对 SLAT 有很大的困惑(为什么需要它?)。如果我没记错的话 SLAT(二级地址翻译)用于为客人进行地址翻译虚拟地址到实际物理地址(客户虚拟到主机物理地址(如果错了请纠正我,即:客户虚拟地址->主机虚拟地址->主机物理地址)。如果硬件不支持SLAT,那么我们必须使用影子页面表做同样的事情(在 SW 中做额外的翻译对 CPU 来说开销更大)。

但我的问题是,我们不能通过将实际物理内存传递给客户操作系统并让客户操作系统处理相同的内容(而不是使用 SLAT 或影子分页)来跳过此页表处理吗?就像从 Hypervisor 中 UNMAP 一些内存库(物理 RAM 地址范围)一样,并将其分配给来宾,并在关闭 mmu 的情况下启动该特定 CPU,并且恰好在开始执行来宾代码之前。在来宾中运行的代码(可能是内核启动代码)让它创建自己的页表并启用 MMU 而不是 SLAT?当我们需要停止 VM 时(最后来宾 opt 应该再次停止 mmu),然后我们可以将 HV 分页恢复到特定的 CPU 内核并启用 MMU,对吗?

这种方法是否有任何漏洞/问题(这有意义吗?)?我们不能在虚拟化中跳过 SLAT 吗?

如果我的问题没有任何意义,请原谅我,因为我对虚拟化很陌生:(

4

1 回答 1

0

出于三个原因,需要二级地址转换:允许内存的来宾视图与物理地址映射不同;保护虚拟机管理程序内存和其他来宾的内存不受来宾的影响;并允许管理程序拦截某些内存和 MMIO 访问,以便虚拟化平台和设备。

如果您在禁用分页的情况下启动来宾,它将完全不受限制地访问所有内存(和 MMIO 空间)。

这在运行多个来宾时尤其重要。每个来宾可能希望其内存从地址 0 开始。二级地址转换可以将每个来宾的地址 0 转换为不同的物理内存地址。

于 2018-09-24T15:42:54.383 回答