【问题标题】:Where virtual memory addresses reside?虚拟内存地址驻留在哪里?
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 据我所知,页表(用于进程)存储在主内存中。但是,它应该只包含页码和页描述符,而不是逻辑/虚拟地址。
猜你喜欢
  • 2014-01-16
  • 2018-07-09
  • 2015-04-26
  • 1970-01-01
  • 2016-10-15
  • 2023-03-17
  • 1970-01-01
  • 2013-07-23
  • 2023-03-29
相关资源
最近更新 更多