【发布时间】:2018-09-24 11:25:36
【问题描述】:
这个问题可能很有趣(我也是管理程序的新手)。我对 SLAT 有很大的困惑(为什么需要它?)。如果我没记错的话 SLAT(二级地址转换) ) 用于将访客虚拟地址转换为实际物理地址(访客虚拟到主机物理地址(如果有误,请纠正我,即:guest virt addr --> host virt addr --> host物理地址)。如果 HW 不支持 SLAT,那么我们必须使用影子页表来做同样的事情(这对 CPU 来说会增加额外的 SW 转换开销)。
但我的问题是,我们不能跳过这个页表处理,将实际的物理内存传递给客户操作系统并让客户操作系统处理相同的内容(而不是使用 SLAT 或影子分页)? 就像从 Hypervisor 中 UNMAP 一些内存库(物理 RAM 地址范围)一样,并将其分配给来宾,并在关闭 mmu 的情况下启动该特定 CPU,并且恰好在开始执行来宾代码之前。在来宾中运行的代码(可能是内核启动代码)让它创建自己的页表并启用 MMU 而不是 SLAT? 当我们需要停止 VM 时(最后 guest opt 应该再次停止 mmu),然后我们可以将 HV 分页恢复到特定的 CPU 内核并启用 MMU,对吗?
这种方法是否有任何漏洞/问题(这有意义吗?)?我们不能在虚拟化中跳过 SLAT 吗?
(如果我的问题没有任何意义,请原谅我,因为我对虚拟化很陌生:()
【问题讨论】:
-
一级翻译将guest虚拟地址映射到guest物理地址;二级转换将客户物理映射到主机物理。
-
感谢您的信息。我的意思是“host virt = guest physical”。即:guest virt addr ---(Level 1)--> host virt addr (guest physical) ----(level 2)-->主机物理。对困惑感到抱歉。所以我的意思和你一样
-
不,主机虚拟地址不等同于客户物理地址。实际上,嵌套翻译不涉及主机虚拟地址。
-
使用第一级转换将主机虚拟地址转换为主机物理地址,而不是第二级。
-
注意,我的经验是使用英特尔架构和术语。其他制造商可能使用不同的术语,尽管嵌套翻译的一般过程是相同的。
标签: virtualization hypervisor ept