QEMU 将客户机 OS 的内核页面映射到哪里?

Where does QEMU maps the kernel pages of a guest OS?

我正在阅读一些 QEMU 的源代码(在 3.1.0 版本上,但对其他版本的提示也被接受)并且我正在尝试 understand/find QEMU 在源代码中的哪一点映射了来宾的 OS 内核内存在主机的机器内存中?

QEMU 不专门映射来宾 OS 内核本身。它只是向虚拟机提供模拟 RAM(这个模拟 RAM 是通过在 qemu_anon_ram_alloc() 中执行普通的匿名 mmap 创建的——它同样可以通过调用 malloc() 来完成)。来宾二进制文件可以通过 QEMU(各种 hw/core/loader.c 函数执行此操作)或由来宾自己将其从模拟磁盘加载到 RAM 中。

对于 x86 来宾,通常 QEMU 仅将来宾 BIOS rom 映像加载到来宾内存中。来宾 BIOS 然后将实际的来宾内核加载到内存中(从模拟磁盘,或通过来宾可以用来从仿真外部访问文件的 "fw_cfg" QEMU-specific 设备), QEMU 不知道也不关心它恰好把它放在哪里。