我试图弄清楚是否有可能运行一个 Linux VM,其 RAM 仅由单个物理页面支持。
为了模拟这一点,我修改了 KVM 中的嵌套页错误处理程序,以从所有嵌套页表 (NPT) 条目中删除当前位,但与当前处理的页错误对应的条目除外。
在尝试启动 Linux 客户机时,我观察到使用内存操作数的汇编指令,例如
add [rbp+0x820DDA], ebp
Run Code Online (Sandbox Code Playgroud)
导致页面错误循环,直到我恢复包含指令的页面以及操作数中引用的页面的当前位(在本例中[rbp+0x820DDA])。
我想知道为什么会这样。CPU不应该按顺序访问内存页,即先读取指令,然后访问内存操作数吗?还是 x86 要求指令页和所有操作数页可以同时访问?
我正在 AMD Zen 1 上进行测试。