我对虚拟地址和物理地址之间关系的理解是否正确?

时间:2016-11-14 11:33:03

标签: operating-system memory-address page-tables

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

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

维基百科图使我的解释更加清晰:

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

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

谢谢。

2 个答案:

答案 0 :(得分:1)

不完全正确。

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

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

  1. CPU将虚拟地址0x1234发送到其中一个部分MMU。
  2. MMU从页表中获取相应的物理地址。这个调整地址的过程也被称为“按摩”。
  3. CPU从物理地址所指的RAM位置检索数据。
  4. 具体的转换过程在很大程度上取决于实际的架构和CPU。

答案 1 :(得分:0)

  

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

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

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

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

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

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

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