我知道如果页面不在主内存中,CPU 将从交换文件中获取它。因此,如果虚拟地址没有对应的物理地址,CPU 将从磁盘中获取它。所以映射到虚拟地址可以在两个地方之一:它要么在物理内存中,要么在磁盘中。我的问题是虚拟地址本身驻留在哪里?因为 CPU 需要这个虚拟地址才能执行映射。CPU从哪里得到这个地址?当我们使用 gdb 查看虚拟地址空间时,gdb 将所有这些虚拟地址带到哪里?
例如:
虚拟地址 0x420000
页表 20
RAM 0x800000
这里 20(页表条目)驻留在 RAM 中。0x800000(物理地址)位于 RAM 中。0x420000 信息在哪里?CPU 从某个地方需要这些信息,否则它将如何执行地址转换?
现在我想我知道虚拟地址信息来自何处。它来自应用程序本身,来自 pc 计数器,此时它将它传递给 CPU,然后 CPU 进行翻译。