首页 文章

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

提问于
浏览
1

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

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

2 回答

  • 0

    我不确定我是否准确地指出了你的观点,我正在尽我所能回答你的问题 .

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

    因此,您预期的传输流可能不考虑阴影页表可能是:

    GVA -> GPA -> HVA -> HPA

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

    GVA -> GPA -> HPA

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

    不确定以上是否回答了你的问题 .

  • 1

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

    VirtualBoxno 组中 . 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位于 yes 组中 . 我曾经用它在主机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_pagespatching an internal Linux kernel function解决了这个问题 .

    KVM也在 yes 组中 . Linux添加了一个名为memory management notifiers的内核功能来支持KVM . 当QEMU使用KVM进行虚拟化时,它就是allocates guest RAM in host virtual memory . 当主机交换页面时,MMU通知程序告诉KVM .

相关问题