前引
本篇笔记记录王道操作系统第二章内存管理中博主觉得困难的点
一. 二级页表
有一台计算机,地址为32
位,页面(进程的块)大小为4KB
,页表项大小为4B
。
从这条信息中我们可以得到的信息:
- 页面数量:
2^32/2^12 = 2^20
个, 显然,页表项个数应与页面个数相同 - 页表大小:
4B*2^20 =2^22= 4MB
,占用页面数量:4MB/4KB = 1K
个,一个页面可以存储4KB/4B =1K
个页表项
显然页表过大,浪费了内存资源
由此引入二级页表(仅有一个页面的页表,所以二级页表项个数为1K
个),二级页表的页表项同样表示页面对应的物理块号(页框),但这里的页面是指用于存放一级页表的页面,所以一共有1K
个这样的页面。显然,这也就是说,一个二级页表项对应了1K
个一级页表项,则一个二级页表对应了1K*1K=2^20
个页表项,即全部页表项,一个二级页面就指明了所有页表项的位置,且只占有了一页的内存空间。所以在进程执行时,只需把二级页表(占一个页面)调入内存,而不需要把所有一级页表项(占十个页面)调入内存(在需要用时再调入),节约了百分之90的内存。
显然,逻辑地址中,高十位的一级页号用于指向二级页表中的页表项,中间十位的二级页号用于指向一级页表中的页表项。为什么均是十位?因为二级页表的页表项个数为2^10
,一级页表的页表项个数同样为2^10
,所以均十位。
把一级页号也叫做页目录号,在二级页表/页目录中,每一个表项指向一个页表的开始地址
那CPU是具体怎么实现访问的呢?
我的理解:CPU由逻辑地址的高十位找到二级页表项,进而由逻辑地址的中间十位找到一级页表项,最后找到页面对应的页框(物理块号),在这过程中,地址变换机构起了重要作用,王道的书上有详细的一级页表地址变换过程。
为什么顶级页表只能占有一个页面?
我的理解:顶级页表只能有一页,如果有两页,那么就有相同页号,那就区分不出选的是哪一个顶级页表,进而也无法找到正确的低级页表