1

我试图了解过去如何使用影子页表执行虚拟化。我读过的文章都在谈论从客户虚拟内存到主机物理内存的转换。我了解影子页面表如何消除访客虚拟到访客物理转换的需要。我的问题是,Host Virtual to Host Physical 步骤发生了什么。(HVA-> HPA)。

引用文章中的虚拟机管理器是否根本不使用主机中的虚拟内存?是否假定它们可以直接访问主机系统的物理内存?甚至可能吗?我认为 TLB 缓存转换是由 MMU 在硬件中实现的,并且每条指令的地址都由 MMU 本身从虚拟地址转换为物理地址。但是话又说回来,我不确定内核代码如何与 TLB 一起工作?内核指令不通过TLB吗?

4

2 回答 2

1

我不确定我是否准确地理解了您的观点,我正在尽力回答您的问题。

不需要 HVA->HPA,因为客人想要的是 HPA 而不是 HVA。这意味着 HVA 对于访问其客户内存区域的客户来说是无用的。

因此,您预期的传输流程可能在不考虑影子页表的情况下可能是:

GVA -> GPA -> HVA -> HPA

但是由于大多数虚拟机管理程序都是在内核模式下运行的,谁知道主机和客户的内存是如何分配的,所以它可以直接将 GPA 映射到 HPA 并消除对 HVA 的需要:

GVA -> GPA -> HPA

这个客户记忆翻译流程与 hyperviosr 的用户空间无关,其流程是HVA -> HPA.

不确定以上是否回答了您的问题。

于 2013-09-04T19:39:01.877 回答
1

答案可以是yesno。如果是,管理程序将客户 RAM 映射到主机上的虚拟内存,因此主机可以将其换入和换出主机 RAM。如果不是,管理程序将客户 RAM 映射到主机上的锁定物理内存。

VirtualBox属于no组。VirtualBox 在主机内核中运行一个设备驱动程序,并使用该驱动程序为客户 RAM 分配锁定内存。客户 RAM 的每一页都驻留在固定的主机物理地址,因此主机永远无法换出该页。因此,客户 RAM 必须小于主机 RAM。VirtualBox 的手册说要为主机预留至少 256 MB 到 512 MB 的空间

MMU 只能将虚拟地址映射到物理地址。在 VirtualBox 中,来宾有一个模拟的 MMU 来将来宾虚拟地址映射到来宾物理地址。VirtualBox 有自己的客户物理地址到主机物理地址的映射,并使用主机 MMU 将客户虚拟地址映射到主机物理地址。由于内存锁定,主机物理地址永远不会变得无效。

Mac-on-Linux属于yes组。我曾经用它在主机 PowerPC Linux 中运行来宾 Mac OS 9。我为 Mac OS 9 提供了 256 MB 的 RAM,但我真正的 Linux 机器只有 64 MB 的 RAM。这是因为 MOL通过用户进程中的普通mmap()调用将客户 RAM 映射到主机虚拟内存中。然后 MOL 使用 Linux 内核模块来控制主机 MMU。

但是主机 MMU 只能映射到主机物理地址,不能映射到虚拟地址。来宾有一个模拟的 MMU,它将来宾虚拟映射到来宾物理。MOL添加了一个基地址来将客户物理转换为虚拟主机。MOL 的内核模块使用主机映射将主机虚拟转换为主机物理,然后使用主机 MMU 将客户虚拟映射到主机物理。

如果 Linux 换出客户 RAM 的一页,那么主机物理地址将变得无效,客户系统可能会覆盖其他人的内存并导致主机崩溃。必须有某种方式通知 MOL Linux 已换出该页面。MOL 通过修补名为or的内部 Linux 内核函数解决了这个问题。flush_map_pageflush_map_pages

KVM也属于yes组。Linux 添加了一个称为内存管理通知程序的内核特性来支持 KVM。当 QEMU 使用 KVM 进行虚拟化时,它会在主机虚拟内存中分配客户 RAM。当主机换出页面时,MMU 通知器会通知 KVM。

于 2015-09-09T03:02:55.577 回答