先决条件 – 分页
多级分页是一种分页方案,它以分层方式由两级或多级页表组成。它也称为分层分页。一级页表的条目是指向二级页表的指针,二级页表的条目是指向三级页表的指针,依此类推。最后一级页表的表项存放的是实际的帧信息。级别 1 包含单页表,该表的地址存储在 PTBR(页表基址寄存器)中。
虚拟地址:
在多级分页中,无论是多级分页,所有页表都将存储在主内存中。因此需要多次内存访问才能获得页框的物理地址。每个级别需要一个访问权限。除最后一级页表项外的每个页表项都包含下一级页表的基地址。
参考实际页框:
- 第 1 级页表中对 PTE 的引用 = PTBR 值 + 虚拟地址中存在的第 1 级偏移量。
- 2 级页表中 PTE 的引用 = 基地址(存在于 1 级 PTE 中)+ 2 级偏移量(存在于 VA 中)。
- 对第 3 级页表中的 PTE 的引用=基地址(存在于第 2 级 PTE 中)+第 3 级偏移量(存在于 VA 中)。
- 实际页框地址 = PTE(存在于第 3 级)。
通常页表大小将等于页的大小。
假设:
字节可寻址内存,n 是用来表示虚拟地址的位数。
重要公式:
Number of entries in page table:
= (virtual address space size) / (page size)
= Number of pages
Virtual address space size:
= 2n B
Size of page table:
<>= (number of entries in page table)*(size of PTE)
如果页表大小 > 所需大小,则再创建 1 个级别。
坏处:
访问地址转换表的额外内存引用会使程序减慢两倍或更多。使用转换后备缓冲区 (TLB) 通过存储页表条目来加速地址转换。
例子:
Q.考虑一个物理内存为8GB、页面大小为8KB、虚拟地址为46位的虚拟内存系统。假设每个页表完全适合单个页面。如果页表条目大小为 4B,则需要多少级页表。
解释:
Page size = 8KB = 213 B
Virtual address space size = 246 B
PTE = 4B = 22 B
Number of pages or number of entries in page table,
= (virtual address space size) / (page size)
= 246B/213 B
= 233
页表的大小,
= (number of entries in page table)*(size of PTE)
= 233*22 B
= 235 B
再创造一层,
Size of page table > page size
Number of page tables in last level,
= 235 B / 213 B
= 222
这些表的基地址存储在页表[倒数第二层]中。
Size of page table [second last level]
= 222*22B
= 224B
再创造一层,
页表大小 [倒数第二级] > 页大小
Number of page tables in second last level
= 224B/213 B
= 211
这些表的基地址存储在页表中[倒数第三层]
Size of page table [third last level]
= 211*22 B
= 213 B
= page size
∴ 需要 3 个级别。
参考 –
书 – 操作系统 by William Stallings