承接上文我们讲完了页式管理和段式管理,接下来让我们深入讲解一下快表和二级页表
快表和计算机组成原理讲的Cache原理如出一辙。为了减少访存的次数,OS在访问页面的时候创建了快表(Translation Lookaside Buffer ,简称TLB),包含最近使用过的页表表项,避免了反复查询处于内存中的页表。
实际上,进程不会一次访问所有的页面,而是只会访问特定的页面,所以我们不需要一次性分配所有的页面。为了解决进程页面必须连续存放的问题,我们采用解决进程在内存中连续存放的思路,使用二级页表,把页面存放离散化。
建立多级页表本质上就是建立多重索引。二级页表就是借助二重索引的迭代查询来实现对于一重索引的离散化。
举一个更具体的例子
几个细节
假设不考虑TLB,访存次数根据页表级数N而定,因为页表也是存储在内存中的,所以查询每一级页表都需要访存,最终访存次数是N+1。
至于一开始提到的进程自身页表存储量最高可达4GB,现有的内存容量无法满足需求的解决方案,我们将会在下一章的虚拟存储中提及。