分页存储中的页表是单级页表,它有两个很严重的问题
1.页表必须连续存放,因此当页表很大时,需要占用很多个连续的页框
2.没有必要让整个页表常驻内存,因为进程在一段时间内可能只需要访问某几个特定的页面
第二个问题需要用到虚拟技术,以后再说
为了解决第一个问题也就有了两级页表,就是在页表的基础上为离散的页表再建个页表,称为页目录表
如上图所示就是把单级页表给离散开了,分成了1024个部分,至于为什么分为1024个部分,我们来慢慢推导,每个页面可以放2的10次方个页表项,那我总共有2的20次方个有页表项,那么就应该被分成1024个部分
那分出来的小页表的起始地址怎么求呢,这个时候就是我们的页目录表闪亮登场的时候了
页目录表第一列代表是小页表的页表号,第二列代表小页表在内存中的内存块号,比如根据一级页表(页目录表),0,3我可以知道0#页表存放在内存块号为3的位置,然后从3的位置拿出0#页表,就跟单级页表使用方法一样了
如何转换为物理地址
下面提醒几个需要注意的点
采用两级页表(没有快表),需要三次访问内存,第一次访存是访问内存中的页目录表,第二次是访问内存中的二级页表,第三次是访问内存目标单元,根据推导,在没有快表的情况下,k级页表就要访存k+1次