VMM是否在主机上使用虚拟内存?

时间:2013-02-05 14:23:35

标签: virtualization virtual-machine virtual-memory tlb mmu

我试图了解过去使用影子页表如何执行虚拟化。 articles我已经阅读了有关从客户虚拟内存到主机物理内存的转换的所有内容。我理解Shadow Page表如何消除了Guest虚拟访客物理翻译的需要。我的问题是,Host Virtual to Host Physical步骤发生了什么。 (HVA - > HPA)。

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

2 个答案:

答案 0 :(得分:1)

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

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

因此,您预期的传输流程可能不考虑影子页面表:

GVA -> GPA -> HVA -> HPA

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

GVA -> GPA -> HPA

此guest虚拟机内存转换流与hyperviosr的用户空间无关,其流量为HVA -> HPA

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

答案 1 :(得分:0)

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

VirtualBox位于组中。 VirtualBox在主机内核中运行设备驱动程序,并使用此驱动程序为来宾RAM分配锁定的内存。客户RAM的每一页都驻留在固定的主机物理地址上,因此主机永远不能换出页面。因此,客户RAM必须小于主机RAM。 VirtualBox的手册对spare at least 256 MB to 512 MB for the host说。

MMU只能将虚拟地址映射到物理地址。在VirtualBox中,guest虚拟机具有模拟的MMU,用于将来宾虚拟地址映射到来宾物理地址。 VirtualBox有自己的来宾物理地址映射来托管物理地址,并使用主机MMU将来宾虚拟地址映射到主机物理地址。由于内存锁定,主机物理地址永远不会失效。

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

但是主机MMU只能映射到主机物理地址,而不是虚拟地址。 guest虚拟机具有模拟的MMU,可将guest虚拟机映射到guest虚拟机物理。 MOL adds a base address将客户物理转换为主机虚拟。 MOL的内核模块uses the host map将主机虚拟转换为主机物理,然后使用主机MMU将客户虚拟映射到主机物理。

如果Linux交换了一组来宾RAM,则主机物理地址将变为无效,并且来宾系统可能会覆盖其他人的内存并导致主机崩溃。必须有一些方法来通知MOL Linux已经换出了页面。 MOL通过名为flush_map_pageflush_map_pages的{​​{3}}解决了此问题。

patching an internal Linux kernel function也位于组中。 Linux添加了一个名为KVM的内核功能来支持KVM。当QEMU使用KVM进行虚拟化时,memory management notifiers。当主机交换页面时,MMU通知程序告诉KVM。