0

我一直在研究(在 SO 和其他地方)虚拟地址和物理地址之间的关系。如果有人能确认我对这个概念的理解是否正确,我将不胜感激。

页表被归类为“虚拟空间”,并包含每个页面的虚拟地址。然后它映射到“物理空间”,其中包含每个页面的物理地址。

让我的解释更清楚的维基百科图表:

https://upload.wikimedia.org/wikipedia/commons/3/32/Virtual_address_space_and_physical_address_space_relationship.svg

我对这个概念的理解正确吗?

谢谢你。

4

2 回答 2

1

不完全正确。

每个程序都有自己的虚拟地址空间。从技术上讲,只有一个地址空间,即物理随机存取存储器。因此它被称为“虚拟”,因为对于用户程序来说,它似乎有自己的地址空间。

现在,以指令mov 0x1234, %eax(AT&T)或MOV EAX, [0x1234](Intel)为例:

  1. CPU 将虚拟地址发送0x1234到它的部件之一,MMU。
  2. MMU 从页表中获取对应的物理地址。这个调整地址的过程也被亲切地称为“按摩”。
  3. CPU 从物理地址所指的 RAM 位置检索数据。

具体的翻译过程在很大程度上取决于实际的架构和 CPU。

于 2016-11-14T11:46:07.440 回答
0

页表被归类为“虚拟空间”,并包含每个页面的虚拟地址。然后它映射到“物理空间”,其中包含每个页面的物理地址。

这并不正确。页表定义了一个由页组成的逻辑地址空间。页表将逻辑页映射到物理页框,它们表明页框 [尚未] 存在于内存中,在这种情况下,您有一个虚拟映射。当使用磁盘空间模拟内存时,页面是虚拟的。

在过去,页表总是建立一个虚拟地址空间。现在越来越普遍(例如嵌入式系统)使用没有虚拟内存(分页)的逻辑地址转换。因此,术语“虚拟内存”和“逻辑内存”经常混为一谈。

物理地址空间只存在于操作系统中。该进程只看到一个逻辑地址空间。

这有点过于简单化了,因为进程在异常或中断之后成为操作系统,并且内核在公共逻辑地址范围内运行。但是,操作系统内核确实必须在一定程度上管理物理内存。

例如,页表的某些方面必须使用物理地址。如果页表使用了所有逻辑地址,那么地址转换就会遇到先有鸡还是先有蛋的问题。各种硬件系统以不同的方式解决了这个问题。

最后,您链接到的图表是一个非常糟糕的插图。

于 2016-11-14T17:13:08.467 回答