2013-10-30 112 views
2

我知道如果页面不在主内存中,CPU会从交换文件中提取它。所以如果一个虚拟地址没有物理地址对应的地方,CPU就会把它从磁盘中拿出来。因此映射到虚拟地址可以位于以下两个位置之一:无论是在物理内存中还是在磁盘中。我的问题是虚拟地址本身在哪里?因为CPU需要这个虚拟地址才能执行映射。 CPU获得这个地址在哪里?当我们使用gdb来查看虚拟地址空间时,gdb在哪里获取所有这些虚拟地址?虚拟内存地址在哪里?

对于前:

虚拟地址0x420000
页表20
RAM的0x800000

这里20(页表条目)驻留在内存中。 0x800000(物理地址)驻留在RAM中。 0x420000信息驻留在哪里? CPU需要从某个地方获取这些信息,否则它将如何执行地址转换?

现在我想我知道hwere虚拟地址信息来自。它来自pc计数器的应用程序本身,它将它传递给CPU,然后CPU进行转换。

+0

它不驻留在任何地方,它是虚拟的。唯一的物理表现形式是由操作系统和交换文件维护的页面映射表。 –

+0

不存在的邮政地址在哪里?他们不。地址没有物理存在。这是您可以用来查找*确实存在的信息的信息。虚拟地址就是用来定位映射到进程地址空间的数据的信息。地址本身不“驻留”在任何地方。 – jalf

+0

但是你确实从某个地方得到了邮政地址。否则,你会如何找到存在? –

回答

1

有关虚拟页面(它们的状态,物理位置等)的信息存储在page table中。页表本身如何实现以及它的存储位置在很大程度上取决于操作系统的具体情况和底层硬件支持。尽管起初它听起来很棘手,但页表本身甚至可以存储在虚拟内存中。

+0

据我所知,存储在主存中的页表(对于一个进程)。但是,它应该只包含页码和页面描述符,而不是逻辑/虚拟地址。 – zgulser