【发布时间】:2013-11-10 08:28:42
【问题描述】:
我知道如果页面不在主存中,CPU 会从交换文件中获取。因此,如果虚拟地址没有对应的物理地址,CPU 将从磁盘中获取它。所以映射到虚拟地址可以在两个地方之一:它要么在物理内存中,要么在磁盘中。我的问题是虚拟地址本身驻留在哪里?因为 CPU 需要这个虚拟地址才能执行映射。 CPU从哪里得到这个地址?当我们使用 gdb 查看虚拟地址空间时,gdb 将所有这些虚拟地址带到哪里?
例如:
虚拟地址 0x420000
页表 20
内存 0x800000
这里 20(页表条目)驻留在 RAM 中。 0x800000(物理地址)位于 RAM 中。 0x420000 信息在哪里? CPU 从某个地方需要这些信息,否则它将如何执行地址转换?
现在我想我知道虚拟地址信息来自何处。它来自应用程序本身,来自 pc 计数器,然后将其传递给 CPU,然后由 CPU 进行翻译。
【问题讨论】:
-
它不存在于任何地方,它是虚拟的。唯一的物理表现是操作系统维护的页面映射表和交换文件。
-
不存在的邮政地址在哪里?他们没有。地址没有物理存在。它是您可以用来定位确实存在的东西的信息。虚拟地址只是用于定位已映射到进程地址空间的数据的信息。地址本身并不“驻留在”任何地方。
-
但是您确实从某个地方获得了邮政地址。否则你怎么会找到存在?
标签: c++ unix paging virtual-address-space