答案可以是yes或no。如果是,管理程序将客户 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_page
flush_map_pages
KVM也属于yes组。Linux 添加了一个称为内存管理通知程序的内核特性来支持 KVM。当 QEMU 使用 KVM 进行虚拟化时,它会在主机虚拟内存中分配客户 RAM。当主机换出页面时,MMU 通知器会通知 KVM。