📜  使用 8 字节 PTE PDE 为 46 位地址空间设计一个 3 级页表. (1)

📅  最后修改于: 2023-12-03 15:06:44.874000             🧑  作者: Mango

使用 8 字节 PTE PDE 为 46 位地址空间设计一个 3 级页表

在计算机系统中,页面是一种常见的内存管理方式,可以将物理内存划分为多个大小相等的页面,同时也可以将虚拟内存划分为同样大小的页面。在这种情况下,映射可以通过页表来实现。

为了支持更大的物理内存和虚拟内存,处理器厂商可以使用更大的页表,例如,使用8字节的PTE和PDE,我们可以设计一个三级页表来支持46位的地址空间。

设计3级页表的过程如下:

  1. 首先确定页大小,假设我们采用4KB大小的页面,即每页有2^12个字节。
  2. 下一步是确定最大的物理地址和虚拟地址。在这种情况下,由于我们使用的是8字节的PTE和PDE,因此物理地址和虚拟地址的最大大小均为2^46字节,即2TB。
  3. 接下来,我们需要确定每个页表项的大小。由于我们使用的是8字节的PTE和PDE,我们可以存储8字节的页表项。每个页表项可以用来存储指向下一级页表或物理帧的指针以及其他信息,例如访问权限位。
  4. 我们需要为每个页表分配一个独特的标识符。在3级页表中,我们需要为PML4、PDP、PD和PT分别分配一个标识符。
  5. 接下来,我们需要确定每个级别的页表的大小和数量。由于我们使用的是4KB大小的页面,因此每个页表可以存储2^9个页表项。因此,我们需要在PML4中有512个条目,每个条目指向一个PDP。每个PDP都有512个条目,每个条目指向一个PD,每个PD都有512个条目,每个条目指向一个PT。每个PT还有512个条目,每个条目指向一个页面。
  6. 最后,我们需要计算所需的内存。由于我们使用的是4KB页面,因此我们每级需要的页表大小为2^9 * 8 B = 2 KB。因此,总内存需求为2KB * (512^3 + 512^2 + 512 + 1) = 4 PB。

可以使用以下示例来说明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个条目。我们可以通过条目的指针,找到下一级的页表。最低级的页表条目指向物理页面。