2015-09-25 35 views
0

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

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

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

回答

1

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

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