[OS]关于各级页表最多一个页面(包括顶级页表)

 关于各级页表大小不超过一个页面的原因:

①方便一次内存访问就能完成读取,降低开销。

②方便高级页表划分,便于实现散列功能。

多级页表位数(大小)的分配:

上图为例。

10 10 8 的分配 相较于 8 10 10:

碎片会增多:低级页表所占内存块内部碎片更多。

提高效率:低级页表占内存多的情况下,通过缓存不访问高级页表的几率更大 。

综上,只允许顶级页表有内部碎片即可。

顶级页表最多只能有一个页面大小:

(来自知乎用户placeholder的回答)

作者:placeholder
链接:https://www.zhihu.com/question/422716423/answer/1795166483
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

1,为什么要对单级页表进行拆分?----> 在不涉及快表,系统按字节寻址,并且采用分页式存储管理的情况下,一个进程对应的单级页表有可能过大,甚至大到占据了内存中的很多很多连续的页框,不仅会给内存分配造成压力,而且与离散分配的存储管理的思想向违背(降低了内存利用率),所以需要拆分页表,人们就让一组页表项刚好占据一个页框,就可以离散存储这些分组,然后建立上层页表来管理底层页表之间的逻辑顺序。

2,顶级页表这有一张这种树状结构是怎么来的?----> 这样的拆分方式就像一棵树一样,每往上建立更高一层的页表,最高层就只有一张页表,也就是只有一个根节点,即专业术语中所说的顶级页目录表;当每往上建立一层页表后,该最高层的页表(即根页表)如果大于一个内存页框的容量,就又会往上进行拆分,建立更高层页目录表。

3,如果顶级页表设计成多张会怎样?----> 如果顶级页表设计成了两张,甚至多张,由于每张页表的页号都是从 0 开始计数,所以需要区分查询的是哪一张顶级页表,这就对系统对从逻辑地址到物理地址的转换额外增加了压力和复杂性,如果不区分查询的是哪一张顶级页表,很显然页号会出现重复,这就是BUG了。

------------

综上所述,顶级页表,甚至每一级的页表,都被设计成了一个内存框可以存下的样子,逻辑上是一个树状结构,符合离散存储的思想,具有内存利用率高的优点;但注意随着拆分层次变多,访存次数也会变多,需要权衡系统整体性能。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-12 13:42:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-12 13:42:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-12 13:42:02       82 阅读
  4. Python语言-面向对象

    2023-12-12 13:42:02       91 阅读

热门阅读

  1. 单片机外设:扩展功能的关键

    2023-12-12 13:42:02       58 阅读
  2. 虚幻学习笔记12—C++类的实例化

    2023-12-12 13:42:02       58 阅读
  3. tomcat安全加固

    2023-12-12 13:42:02       62 阅读
  4. 汽车标定技术(十二)--A2L文件生成的方法

    2023-12-12 13:42:02       60 阅读
  5. gdb使用

    gdb使用

    2023-12-12 13:42:02      63 阅读
  6. NB-IoT BC260Y Open CPU SDK⑫多任务调度应用

    2023-12-12 13:42:02       51 阅读
  7. C++大型项目经验

    2023-12-12 13:42:02       58 阅读