为什么引入二级页表
- 因为我们的页表项太多了,而且我们的页表项必须连续存储,而我们的一个内存块是存储不下去,就必须要多个内存卡存储,这就又回到了我们连续存储导致的问题,所以我们就套娃,为了存储我们的页表项,我们来再创建一个页表来记录我们的页表所存储的块,能让我们的需要连续存储的页表项也能分散存储
- 根据我们局部性原理,很多时候,进程在一段时间内只需要访问某几个页面,就可以正常运行,因此也没有必要让整个页表都常驻内存
二级页表的原理和地址结构
- 我们将我们地址分为三个部分
- 一级页号(页目录号) 也就是我们的总表,用来找我们对应的二级页表
- 二级页号 用来找我们逻辑地址对应的内存块
- 页内偏移量 在我们内存块中的相对距离
- 解决了当页表项很多的时候,用多个页框来存储我们的页表项
- 可以在需要访问页面的时候才把页面调入内存,所以在我们页表项中增加一个标志位,用于表示该页表是否已经调入到内存中 如果想访问的页面不再内存中,则产生缺页中断(内中断),然后将目标页表从外存调入内存
- 这样就解决了 我们进程运行的时候,不需要把所有的程序或者数据都调入到内存中