📅  最后修改于: 2023-12-03 15:06:44.874000             🧑  作者: Mango
在计算机系统中,页面是一种常见的内存管理方式,可以将物理内存划分为多个大小相等的页面,同时也可以将虚拟内存划分为同样大小的页面。在这种情况下,映射可以通过页表来实现。
为了支持更大的物理内存和虚拟内存,处理器厂商可以使用更大的页表,例如,使用8字节的PTE和PDE,我们可以设计一个三级页表来支持46位的地址空间。
设计3级页表的过程如下:
可以使用以下示例来说明3级页表的结构:
PML4 PDP PD PT
┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
│ entry0 ├─────┐ ┌──>│ entry0 ├─────┐ ┌──>│ entry0 ├─────┐ ┌──>│ entry0 │
├────────┤ │ │ ├────────┤ │ │ ├────────┤ │ │ ├────────┤
│ entry1 ├─────┼───┼──>│ entry1 ├─────┼───┼──>│ entry1 ├─────┼───┼──>│ entry1 │
├────────┤ │ │ ├────────┤ │ │ ├────────┤ │ │ ├────────┤
│ ... │ │ │ │ ... │ │ │ │ ... │ │ │ │ ... │
├────────┤ │ │ ├────────┤ │ │ ├────────┤ │ │ ├────────┤
│entry511│<────┘ │ │entry511│<────┘ │ │entry511│<────┘ │ │entry511│
└────────┘ │ └────────┘ │ └────────┘ │ └────────┘
│ │ │
▼ ▼ ▼
┌────────┐ ┌────────┐ ┌────────┐
│ entry0 ├─────┐ ┌──>│ entry0 ├─────┐ ┌──>│ entry0 │
├────────┤ │ │ ├────────┤ │ │ ├────────┤
│ entry1 ├─────┼───┼──>│ entry1 ├─────┼───┼──>│ entry1 │
├────────┤ │ │ ├────────┤ │ │ ├────────┤
│ ... │ │ │ │ ... │ │ │ │ ... │
├────────┤ │ │ ├────────┤ │ │ ├────────┤
│entry511│<────┘ │ │entry511│<────┘ │ │entry511│
└────────┘ │ └────────┘ │ └────────┘
│ │
▼ ▼
┌────────┐ ┌────────┐
│ entry0 ├─────┐ ┌──>│ entry0 │
├────────┤ │ │ ├────────┤
│ entry1 ├─────┼───┼──>│ entry1 │
├────────┤ │ │ ├────────┤
│ ... │ │ │ │ ... │
├────────┤ │ │ ├────────┤
│entry511│<────┘ │ │entry511│
└────────┘ │ └────────┘
│
▼
┌────────┐
│ ... │
├────────┤
│entry511│
└────────┘
从这个示例中,我们可以看出,PML4位于最高级,而PT位于最低级。每一级都有512个条目。我们可以通过条目的指针,找到下一级的页表。最低级的页表条目指向物理页面。