知识总览
单级页表存在的问题
问题1:页表必须连续存放,因此当页表很大时,需要占用很多个连续的页框。
问题2:由程序的局部性原理,进程在一段时间内只需要访问某几个页面就可以正常运行了。因此没必要让整个页表都常驻内存。
如何解决单级页表的问题
两级页表的原理、地址结构
页面大小4KB=4x1024=212,即页内地址12位。
剩余的32-12=20位就是页号。
12位就是页内偏移的数量,20位就是有多少页。
进程最多有220个页面,如果都连续存放的话太大了。由于每个页面大小4KB,每个页表项4B,则每页可以放下1K=1024项,最左边的图就是把每页都分开放,就不需要连续的很大的内存了。
页目录表用来存每个二级页表的序号和它对应的块号:
二级页表像一个中间商
两级页表结构的逻辑地址结构:一级页号有10位,共1024个,对应0-1023(最左边的图),二级页号同理。
如何实现地址变化
到此,第一个问题:连续存放会占太多空间的问题已经解决了:
第二个问题的解决方法之后再说。
需要注意的细节
各级页表的大小不能超过一个页面:
但是,两级页表要3次访存,空间利用率高了,时间就慢了。