虚拟到pyhsical内存映射如何工作

时间:2015-09-25 06:26:43

标签: linux paging virtual-memory

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

到目前为止我所理解的是,两个流程P1P2可以引用相同的虚拟地址,例如0xf11001。现在这个记忆地址分为两部分。 0xf11是页码,0x001是该页面内的偏移量(假设使用了4096页面大小)。为了找到物理地址,MMU具有将页面编号映射到物理地址的硬件注册表,可以说0xfff。最后一步是将0xfff0x001结合使用,以找到实际的0xfff001地址。

然而,这种理解没有任何意义,相同的虚拟地址仍将指向相同的物理位置???我错过了什么步骤以便我的理解是正确的?

1 个答案:

答案 0 :(得分:1)

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

以下是关于此主题的精彩演示:http://www.eecs.harvard.edu/~mdw/course/cs161/notes/vm.pdf