问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

页表与三级页表详解:操作系统内存管理的核心机制

创作时间:
作者:
@小白创作中心

页表与三级页表详解:操作系统内存管理的核心机制

引用
CSDN
1.
https://blog.csdn.net/m0_73709108/article/details/142762642

操作系统与计算机体系结构中,页表是一个核心概念。现代计算机的函数内存调用很大程度上依赖于页表的机制。本文将详细介绍页表的概念及其在操作系统中的应用,特别是三级页表的设计原理和优势。

页表

为什么要有页表

在操作系统中,内存分配是一个关键问题。以小型操作系统xv6为例,系统主要由内核区(kernal)和用户区(user)两部分组成。启动时,系统会优先加载内核区的代码并为其分配物理内存,以便用户能够调用内核提供的指令。同时,用户可以在用户区自定义指令并执行。

然而,如果每个用户程序执行时都分配固定的物理内存,系统可能会因内存不足而崩溃。此外,不同程序对内存的需求量不同,固定分配可能导致内存利用率低下。因此,操作系统引入了虚拟内存的概念。

虚拟内存是系统为当前程序虚拟分配的内存空间,它不是真实存在的物理内存,而是在需要时通过映射找到对应的物理内存进行使用。虚拟内存与物理内存之间的映射关系由页表来实现。这种机制保证了即使物理内存有限,多个用户程序也能通过内存映射找到对应的物理内存进行使用。同时,虚拟内存的存在也保护了内核区等重要代码的安全性,确保用户只能操作用户区的内存代码。

值得注意的是,虚拟内存的大小并不一定小于物理内存。实际上,虚拟内存可以远远大于物理内存,也可以小于物理内存,这完全取决于当前用户运行的程序数量及空间利用情况。

页表介绍

在64位操作系统中,虚拟地址(Virtual Address)通常被划分为以下几个部分:

  • EXT:未使用的空间
  • Page Number:页码,用于标识虚拟地址所在的页面
  • Offset:页面内的偏移量

页表是操作系统中用于存储虚拟地址与物理地址映射关系的数据结构。当程序执行时,CPU通过内存管理单元(MMU)将虚拟地址(VA)转换为物理地址(PA),从而访问实际的内存单元。

页表条目

页表条目的结构如下图所示:

  • Physical Page Number (PPN):44位,指向实际的物理内存地址
  • RSV:被MMU忽略的保留位
  • V:当前页表条目是否生效(valid)
  • U:当前页表条目是否可以被用户空间访问
  • W:当前页表条目是否可写

页表工作流程

页表的工作流程如下图所示:

在大多数操作系统中,物理地址只使用了56位。虚拟地址的转换过程如下:

  1. 通过虚拟地址的index获取页码(page number)信息
  2. 通过页码信息在页表中查找对应的条目
  3. 页表条目的44位PPN对应物理地址的前44位
  4. 虚拟地址的offset(12位)用于确定页面内的偏移量

因此,实际的物理地址计算公式为:

物理地址(56位)= 页表(PPN)44位 + 虚拟地址offset(12位)

如果采用单级页表,考虑到虚拟地址的页码有27位,每个页表条目为8字节,那么所需的内存空间为:

2^27 * 8 bit = 1GB

这种情况下,即使用户程序只使用了几个页表条目,也需要占用1GB的内存,这显然是不合理的。因此,科学家们提出了三级页表的解决方案。

三级页表

三级页表将虚拟地址的页码(27位)分为三部分,每部分9位。其工作流程如下图所示:

转换过程如下:

  1. 通过虚拟地址的前9位页码找到第一级页目录
  2. 第一级页目录包含中间页表的物理地址
  3. 通过中间页表的44位物理地址找到底层页表
  4. 底层页表的44位物理地址指向实际的物理内存地址
  5. 最终的物理地址计算公式为:

物理地址(56位) = 底层页表PPN(44位) + 虚拟地址offset(12位)

在三级页表的机制下,如果只使用了几个页面,那么中间层页表只需要加载0号页表,底层页表只需要加载实际使用的几个页表项。这种设计大大节省了页表所需的内存空间。

三级页表可以类比为用长、宽、高三个坐标来描述长方体,而不是用长宽高之积。这种设计不仅节省了内存空间,还提高了内存管理的效率。

总结

页表机制在操作系统中扮演着至关重要的角色,特别是在内核区与用户区的代码加载过程中。理解页表的转换机制有助于我们更深入地理解操作系统的虚拟内存管理。三级页表作为页表机制的优化方案,通过分层设计显著降低了内存占用,提高了系统的整体性能。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号