操作系统中的页表

2025 年 5 月 21 日 | 5 分钟阅读

引言

页表是虚拟内存系统用来存储逻辑地址和物理地址之间映射关系的数据结构。

逻辑地址由 CPU 为进程的页面生成,因此通常由进程使用。

物理地址是内存的实际帧地址。它们通常由硬件使用,更具体地说,由 RAM 子系统使用。

下图所示考虑了:

物理地址空间 = M 个字
逻辑地址空间 = L 个字
页面大小 = P 个字

物理地址 = log 2 M = m 位
逻辑地址 = log 2 L = l 位
页偏移量 = log 2 P = p 位

OS Page Table

CPU 始终通过进程的逻辑地址来访问它们。然而,主内存只识别物理地址。

在这种情况下,一个名为内存管理单元 (MMU) 的单元就派上用场了。它将逻辑地址的页号转换为物理地址的帧号。偏移量在两个地址中都保持不变。

为了执行此任务,内存管理单元需要一种特殊的映射方式,即通过页表来实现。页表存储了页表中所有页号对应的帧号。

换句话说,页表将页号映射到其在内存中的实际位置(帧号)。

下图显示了如何使用偏移量访问帧中的所需字。


OS Page Table 1

特性

  • 页表存储在主内存中。
  • 页表中的条目数 = 进程划分的页数。
  • 页表基址寄存器 (PTBR) 包含页表的基地址。
  • 每个进程都有自己的独立页表。

用于构建页表的技术

用于构建页表的一些常用技术如下:

  1. 分层分页
  2. 散列页表
  3. 反向页表

分层分页

分层分页的另一个名称是多级分页。

  • 可能会出现页表过大而无法放入连续空间的情况,因此我们可能会有多个级别的分层。
  • 在这种分页方式下,逻辑地址空间被分解成多个页表。
  • 分层分页是最简单的技术之一,为此,可以使用两级页表和三级页表。

两级页表

考虑一个具有 32 位逻辑地址空间和 1KB 页面大小的系统,并且它进一步划分为:

  • 页号,包含 22 位。
  • 页偏移量,包含 10 位。

当我们分页页表时,页号会进一步划分为:

  • 页号,包含 12 位。
  • 页偏移量,包含 10 位。

因此,逻辑地址如下:

OS Page Table 1

在上图中,

P1 是 **外部页** 表的索引。

P2 表示 **内部页** 表的页面内的位移。

地址转换从外部页表向内工作,因此被称为 **正向映射页表**。

下图显示了两级页表的地址转换方案

OS Page Table 1

三级页表

对于具有 64 位逻辑地址空间的系统,两级分页方案并不合适。假设在这种情况下,页面大小为 4KB。如果我们使用两级页面方案,地址将如下所示:

因此,为了避免如此大的表,有一个解决方案,那就是分解外部页表,这将产生一个 **三级页表:**

OS Page Table 1

散列页表

这种方法用于处理大于 32 位的地址空间。

  • 在这个虚拟页面中,页号被散列到页表中。
  • 这个页表主要包含一个链,其中包含散列到相同元素的条目。
OS Page Table 1

每个条目主要由以下组成:

  1. 虚拟页号
  2. 映射的页帧的值。
  3. 指向链表中下一个元素的指针。

虚拟页号在该链中进行比较以寻找匹配项;如果找到匹配项,则提取相应的物理帧。

在此方案中,64 位地址空间的常见变体使用 **集群页表**。

集群页表

  • 它们类似于散列表,但在这里每个条目引用几个(例如 16 个)页面,而不是 1 个。
  • 主要用于稀疏地址空间,其中内存引用是非连续的且分散的。

反向页表

反向页表基本上将页表和帧表结合到一个数据结构中。

  • 每个虚拟页号和内存的真实页面都对应一个条目。
  • 并且该条目主要包含存储在该真实内存位置的页面的虚拟地址以及拥有该页面的进程信息。
  • 虽然这种技术减少了存储每个页表所需的内存;但它也增加了每次发生页面引用时搜索表所需的时间。

在虚拟内存系统中使用页表的优点

  1. 内存的高效利用: 虚拟内存允许操作系统仅分配进程所需的物理内存量,从而减少内存浪费并提高整体系统性能。
  2. 保护: 页表允许操作系统控制对内存的访问,并保护敏感数据免遭未经授权的访问。每个 PTE 都可以配置访问权限,例如只读或无访问权限,以防止意外或恶意修改内存。
  3. 灵活性: 虚拟内存允许多个进程共享相同的物理内存空间,这提高了系统灵活性并允许更好地利用资源。
  4. 分层设计: 一些系统使用分层页表,这提供了一种更有效的方法来管理大型虚拟地址空间。分层页表将页表划分为较小的表,每个表指向一个更大的表,这允许更快地访问页表项并减小页表的整体大小。

常见问题解答:-

1. 多级页表如何减少内存开销,以及与之相关的权衡是什么?

多级页表通过将大表分解成小表来减少内存使用。权衡是由于多次查找导致访问时间增加。

2. 解释转换查找缓冲器 (TLB) 如何与页表交互,以及如何处理 TLB 缺失。

TLB 缓存页表条目以加快访问速度。在缺失时,操作系统从页表中检索条目并更新 TLB。

3. 为什么在分页系统中,页的大小通常是 2 的幂,以及它如何影响页表设计?

页面大小是 2 的幂,以简化位运算,使地址转换更快、更容易。

4. 如何优化页表条目 (PTE),使其包含其他信息,如保护位或访问权限?

PTE 包含权限和状态位(例如,读、写、执行、脏)。这优化了空间并增强了安全性。

5. 大页面大小对内部碎片和页表大小有什么影响,以及如何缓解?

大页面会增加碎片但会减小页表大小。缓解措施包括使用混合页面大小。