每个页表项占用一个字节是怎么来的?

您所在的位置:网站首页 操作系统页的大小怎么算 每个页表项占用一个字节是怎么来的?

每个页表项占用一个字节是怎么来的?

2023-03-30 09:47| 来源: 网络整理| 查看: 265

巧了,昨天我也是纠结这个问题,想了一晚上都没太明白。

然后今天上知乎搜了一下,看到了其中一个回答才恍然大悟,原来页号是隐藏的,页表项是只存块号,其他多的的是控制信息。

说页号是隐藏的是因为要求必须连续,这样每个页表项就从0到n有了固定的编号了,这个编号就相当于页号,页表项里不用再额外存储,只用存储相应的块号就可以了。

一个逻辑地址的前半段就是这个页号,在地址变换时把页表寄存器里的基址地址(叶表在内存的起始地址,也就是0号页号对应的地址)加上这个页号×页表项长度,就是该页号对应的页表项在内存的地址,访问即可以得到该页表项里存储的物理块号。

啊抱歉抱歉,才意识到这是两年前的问题了,现在回答也没啥意义了,但我还是忍不住想写一下,相当于作为我自己的笔记了吧,大家可以不用理我,不过要是发现我有理解的不对的地方欢迎指出(/ω\)

另外要求页表必须连续就是这个原因。

但是必须连续这个条件有点苛刻,如果一个进程有10页的页表,那必须全部装进内存,有点浪费内存资源,于是有了二级页表。

就拿这10页的页表为例,二级页表的作用就是再拿出一页来存储这10页的基址地址(实际上一页可以存储很多页表项,但是本例中只用到了10个)作为索引表,因此运行一个进程时就只用把这一个索引表装入内存就能找到所有对应的地址了(然而代价是多次访问内存甚至是磁盘)。

同样这个索引表的一个页表项里也只存放对应页第0个页表项的物理块号,1到10的页号是隐藏的(因为连续,和上面说的原理是一样的)这样的话那10页页表就可以不用连续存储了,因为有了索引表就知道每一页的第0号页表项的起始地址,然后根据二级页号(相当于某一页页表的页表项偏移量)就能计算出某页真正的物理地址,最后加上页内偏移量即可。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3