【问题标题】:How does virtual to pyhsical memory mapping work虚拟到物理内存映射如何工作
【发布时间】:2015-09-25 06:26:43
【问题描述】:

我目前正在尝试了解 Linux 系统编程,但很难理解虚拟到物理内存映射的工作原理。

到目前为止我的理解是两个进程P1P2 可以引用同一个虚拟地址,例如0xf11001。现在这个内存地址被分成两部分。 0xf11 是页码,0x001 是该页内的偏移量(假设使用 4096 页大小)。为了找到物理地址,MMU 具有将页码映射到物理地址的硬件寄存器,比如说0xfff。最后一个阶段是将0xfff0x001 结合起来找到物理0xfff001 地址。

但是这种理解没有任何意义,相同的虚拟地址仍将指向相同的物理位置???为了让我的理解正确,我错过了哪一步???

【问题讨论】:

    标签: linux paging virtual-memory


    【解决方案1】:

    您在这里遗漏了一个(关键)步骤。一般来说,MMU没有带映射的硬件寄存器,而是一个寄存器(页表基指针),它指向当前运行进程的页表(带映射)的物理内存地址(每个过程都是独一无二的)。在上下文切换时,内核会更改此寄存器的值,因此对于每个正在运行的进程将执行不同的映射。

    这里有关于这个主题的精彩介绍:http://www.eecs.harvard.edu/~mdw/course/cs161/notes/vm.pdf

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-24
      • 2018-10-09
      • 1970-01-01
      • 2020-02-29
      • 1970-01-01
      • 2019-01-08
      相关资源
      最近更新 更多