多级页表的地址形成过程
首先每个进程中都至少有一个页表(段页式可以有多个页表),都有一个页表基地址寄存器(PTBR),以下针对三级页表进行分析。
level1:PTBR代表的是一级页表的基地址,一级页目录号代表的是一级页表中的页表项相对一级页表的基地址的偏移量,通过将基地址和偏移量相加得到一级页表项的物理地址。一级页表项中存储着该页表项对应的二级页表的基地址(相当于二级页表的PTBR)。
level2:一级页表中的页表项储存的是二级页表的基地址,二级页目录号代表的是二级页表中的页表项相对二级页表的基地址的偏移量,通过将基地址和偏移量相加得到二级页表项的物理地址。二级页表项中存储着该页表项对应的三级页表的基地址(相当于三级页表的PTBR)。
level3:二级页表中的页表项储存的是三级页表的基地址,三级页目录号代表的是三级页表中的页表项相对三级页表的基地址的偏移量,通过将基地址和偏移量相加得到三级页表项的物理地址。三级页表项中存储着物理块号,和块内偏移量拼接成物理地址。
扩充思考
针对这样一个二级页表,假设每个页表项大小为4B,按字节编址。
问:该页表共占多少页?虚拟地址空间为多大?
答:
(1)因为一页共有4KB(由页内偏移量为12位可知),一页可装载 2 10 2^{10} 210(1024)个页表项,页目录表(一级页表)有一个,其中的1024个页表项指向了1024个二级页表,二级页表中的页表项指向的是物理块。因此,一共有1+1024=1025个页表。
(2)因为页目录表指向了 2 10 2^{10} 210个二级页表,而每个二级页表都指向了 2 10 2^{10} 210个物理块,因此,通过这个二级页表可以映射到 2 10 ∗ 2 10 = 2 20 2^{10}*2^{10}=2^{20} 210∗210=220个物理块,因此这个虚拟地址空间大小为 2 20 2^{20} 220页。
参考资料
图1:https://www.geeksforgeeks.org/multilevel-paging-in-operating-system/
图2:王道操作系统P213