操作系统中的页表2025 年 5 月 21 日 | 5 分钟阅读 引言页表是虚拟内存系统用来存储逻辑地址和物理地址之间映射关系的数据结构。 逻辑地址由 CPU 为进程的页面生成,因此通常由进程使用。 物理地址是内存的实际帧地址。它们通常由硬件使用,更具体地说,由 RAM 子系统使用。 下图所示考虑了: 物理地址空间 = M 个字 逻辑地址空间 = L 个字 页面大小 = P 个字 物理地址 = log 2 M = m 位 逻辑地址 = log 2 L = l 位 页偏移量 = log 2 P = p 位 ![]() CPU 始终通过进程的逻辑地址来访问它们。然而,主内存只识别物理地址。 在这种情况下,一个名为内存管理单元 (MMU) 的单元就派上用场了。它将逻辑地址的页号转换为物理地址的帧号。偏移量在两个地址中都保持不变。 为了执行此任务,内存管理单元需要一种特殊的映射方式,即通过页表来实现。页表存储了页表中所有页号对应的帧号。 换句话说,页表将页号映射到其在内存中的实际位置(帧号)。 下图显示了如何使用偏移量访问帧中的所需字。 ![]() 特性
用于构建页表的技术用于构建页表的一些常用技术如下:
分层分页分层分页的另一个名称是多级分页。
两级页表考虑一个具有 32 位逻辑地址空间和 1KB 页面大小的系统,并且它进一步划分为:
当我们分页页表时,页号会进一步划分为:
因此,逻辑地址如下: ![]() 在上图中, P1 是 **外部页** 表的索引。 P2 表示 **内部页** 表的页面内的位移。 地址转换从外部页表向内工作,因此被称为 **正向映射页表**。 下图显示了两级页表的地址转换方案 ![]() 三级页表对于具有 64 位逻辑地址空间的系统,两级分页方案并不合适。假设在这种情况下,页面大小为 4KB。如果我们使用两级页面方案,地址将如下所示: 因此,为了避免如此大的表,有一个解决方案,那就是分解外部页表,这将产生一个 **三级页表:** ![]() 散列页表这种方法用于处理大于 32 位的地址空间。
![]() 每个条目主要由以下组成:
虚拟页号在该链中进行比较以寻找匹配项;如果找到匹配项,则提取相应的物理帧。 在此方案中,64 位地址空间的常见变体使用 **集群页表**。 集群页表
反向页表反向页表基本上将页表和帧表结合到一个数据结构中。
在虚拟内存系统中使用页表的优点
常见问题解答:-1. 多级页表如何减少内存开销,以及与之相关的权衡是什么? 多级页表通过将大表分解成小表来减少内存使用。权衡是由于多次查找导致访问时间增加。 2. 解释转换查找缓冲器 (TLB) 如何与页表交互,以及如何处理 TLB 缺失。 TLB 缓存页表条目以加快访问速度。在缺失时,操作系统从页表中检索条目并更新 TLB。 3. 为什么在分页系统中,页的大小通常是 2 的幂,以及它如何影响页表设计? 页面大小是 2 的幂,以简化位运算,使地址转换更快、更容易。 4. 如何优化页表条目 (PTE),使其包含其他信息,如保护位或访问权限? PTE 包含权限和状态位(例如,读、写、执行、脏)。这优化了空间并增强了安全性。 5. 大页面大小对内部碎片和页表大小有什么影响,以及如何缓解? 大页面会增加碎片但会减小页表大小。缓解措施包括使用混合页面大小。 下一个主题从页表映射到主内存 |
我们请求您订阅我们的新闻通讯以获取最新更新。