📜  操作系统中的多级分页

📅  最后修改于: 2021-09-27 14:45:01             🧑  作者: Mango

先决条件 – 分页
多级分页是一种分页方案,它以分层方式由两级或多级页表组成。它也称为分层分页。一级页表的条目是指向二级页表的指针,二级页表的条目是指向三级页表的指针,依此类推。最后一级页表的表项存放的是实际的帧信息。级别 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