什么逻辑CPU适用于生成正确的页码和页面偏移?

时间:2014-08-06 06:56:45

标签: linux memory-management linux-kernel kernel paging

根据我的理解,要从物理内存访问页面,CPU会为请求的页面生成PageNumber和PageOffset。然后,逻辑PageNumber内容将替换为页表条目中的物理PageNumber内容。因此,请求页面的物理位置是PageNumber + PageOffset。那么,CPU如何获得有关偏移值的信息呢?

此外,在分配新页面时,CPU如何确定要分配的页面的偏移值?

1 个答案:

答案 0 :(得分:2)

当从虚拟内存转换为物理内存时,不会替换地址中的所有位。虚拟存储器的高阶位确实被物理地址位替换,但是保留了一定数量的低阶位,并且它们对应于偏移。标识页面偏移量的位数因架构而异。

看一下这个图表:

Address translation

图例:

  • p 页码
  • f 页面基地址
  • d 置换(或偏移)

请注意,地址转换期间不会更改偏移量。因此,当CPU检索内存时,不需要进行任何计算 - 偏移量不变。

对于第二个问题:分配内存时,会分配整页,并且CPU不关心页面的偏移。仅当从CPU请求特定存储器地址(具有其未改变的偏移量)时,偏移才有意义。