这是我的设置:
在 vm 中,在用户空间程序中,我在地址 bf9ee1a0 处存储了一个值为“8”的变量。
当我在vm内部的内核空间中调用virt_to_phys函数时,我得到了一个与该地址相对应的物理地址ff9ee1a0。
在qemu上,pte和pte_addr分别是a5913865和bf955f78。我只是使用了x86_cpu_handle_mmu_fault函数并添加了一些printf语句。我的理解是 os 和 qemu 的映射应该是一样的。即 bf9ee1a0 应该映射到 a5913865。
我知道这里涉及到许多级别的翻译。来宾虚拟 - 来宾物理 - 主机虚拟。
这是我的问题: 1. 我想知道数据实际存储在哪里?
那么 virt_to_phys() 是什么意思呢?
我确保在控制寄存器中使用的地址在 vm 和 qemu 中的两个操作系统中都是相同的,用于分页。那么为什么会出现这种差异呢?
如果需要打印 pte 在 qemu 中的页面内容,如何使用 printf 语句来打印它们?
非常感谢任何见解。