页表自映射
本文假定读者对页式存储管理有基础的了解
禁用一级二级页表
我们在描述页式存储管理时,引入了一级页表,二级页表,页目录等很多本质相同但形式不一样的概念,我认为这些概念无助于对页式存储管理的理解,故尝试在这一篇博客中抛弃
同时,我们只需要知道两个概念:页表和页表项
对页表影响最大的其实只有:页总数
一个 的例子
规则1
一个页表占据一页,页表总是连续存在的
解释
在
以上三种情况均有可能
规则2
页表到物理页的映射是固定的,是线性的
解释
即第0个页表映射到物理页的第0~3页,第1个页表映射到物理页的第4~7页......
可以发现不同的页表排布方式,会导致有一个feature时有时无:左图所示情况,第一个页表映射的区域全是页表所在区,而右图则不存在这个特性。在实际情况下,我们更愿意让左图的情况发生,这会带来诸多好处,所以页表段(一段连续的存储页表的空间)的起始地址至少应该是
概览
以图中的箭头为边,我们进行一个DAG编号
type-0
页就是普通页,type-1
页是存放了指向普通页的页表的页,type-2
页是存放了指向指向普通页的页表的页表的页
观察黑色加粗的描述,很有趣的情况出现了,这其实就是一个二级页表,type-2
既是页目录,也可以说是一个恰好指向的数据都是type-1
页的页表
要让完美的这么一个页表结构出现还是需要一点点约束的,首先得有
一个 的例子
页表是如何拓展的
假设我们现在只知道
显然推广到一般情况也成立
那么假设
如何计算页目录所处的页呢?
如何计算映射到页目录的页表项呢?
练习
易知
页表段的长度为
总空间为
所以页目录所处页为
所以最终地址为