段页存储

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介: 段页存储

段页式存储(Segment-Paging)是一种结合了分段存储和分页存储两种内存管理技术优点的高级内存管理模式。它首先将进程的逻辑地址空间按照程序的逻辑结构划分为多个段,然后进一步将每个段细分为固定大小的页。这种双层组织方式既保留了分段存储对程序逻辑结构的自然映射,又引入了分页存储的空间利用率高、内存保护简单、硬件支持便利等特性。以下是段页式存储的主要特点、工作原理及其优缺点:

主要特点:

  1. 逻辑地址结构
  • 分段存储的逻辑地址扩展为三部分:段号(Segment Number, SN)、页号(Page Number, PN)和页内偏移(Offset)。段号标识进程逻辑空间中的某个段,页号指明该段内的某一页,页内偏移则表示在该页内的具体位置。
  1. 多级目录结构
  • 系统为每个进程维护一个段表(Segment Table),每个段表条目(STE)包含指向相应段的页表基址(Page Table Base)以及其他相关信息(如界限、权限等)。每个段内部的页表(Page Table)存储了该段内所有页的页表项(Page Table Entry, PTE),PTE包含页的物理帧号(Frame Number)和其他属性(如有效位、权限位等)。
  1. 地址转换过程
  • 当CPU发出一个逻辑地址访问请求时,MMU首先根据段号查段表获取对应STE。若访问合法(即在段的界限内),MMU继续根据页号和STE中的页表基址找到对应的页表项(PTE)。验证PTE的有效性和访问权限后,将帧号与页内偏移拼接成物理地址。整个过程涉及两次表查询(段表和页表)。
  1. 内存保护与共享
  • 通过段表和页表中的权限位可以实现对每个段和页的访问权限控制。同样,多个进程可以共享同一段的物理内存,只需在各自的段表和页表中指向相同的物理帧。

工作原理:

  • 进程创建与加载
  • 操作系统在创建或加载一个进程时,根据其程序结构生成段表和相应的页表。为每个段分配页表,为段内各页分配物理内存,并填写相应的STE和PTE。某些段(如只读代码段)可能已存在于共享内存区域,仅需映射即可。
  • 地址转换
  • 进程执行过程中,CPU生成逻辑地址。MMU截获访问请求,通过查段表、页表将逻辑地址转换为物理地址。若访问在段的有效范围内且页表项有效,则直接访问;否则触发段错误(Segmentation Fault)或页错误(Page Fault),由操作系统处理。
  • 内存错误处理
  • 若发生段错误或页错误,操作系统检查原因(如访问越界、权限错误、页未映射等)。对于合法访问请求,分配内存、更新段表和页表;对于非法访问,则终止相应进程。
  • 内存分配与回收
  • 分段页式存储允许动态分配和回收内存。当程序动态申请或释放内存(如堆操作)时,操作系统相应地分配或回收页,并更新段表和页表。
  • 段与页的共享
  • 多个进程可以通过在各自的段表和页表中映射到相同的物理帧来实现段内页的共享。操作系统负责管理共享段的访问权限和同步问题。

优缺点对比:

优点:

  • 逻辑与物理分离:既保持了分段对程序逻辑结构的反映,又利用分页实现了逻辑地址与物理地址的分离,便于内存管理。
  • 内存利用率高:通过页式管理,内存碎片减小,空闲空间更容易被有效利用。
  • 内存保护完善:双重保护机制(段和页),增强了对内存访问的控制,利于实现不同级别的安全性。
  • 便于共享:既可实现段间的共享,也可实现段内页的共享,灵活适应多种共享需求。
  • 硬件支持:尽管地址转换过程比单一的分段或分页更复杂,但现代处理器通常提供了高效的硬件支持,如TLB(Translation Lookaside Buffer)缓存最近使用的段表和页表项,减少访存次数。

缺点:

  • 硬件成本增加:需要额外的硬件支持(如更大的地址线、更多的寄存器、TLB等)来处理复杂的地址转换过程。
  • 软件复杂性提升:操作系统需要管理更为复杂的段表和页表结构,以及处理多级转换带来的异常情况。
  • 访问效率降低:由于涉及两次表查询(段表和页表),理论上比单一的分段或分页存储方式有更高的访问延迟。
  • 额外开销:由于增加了分段和分页的双重管理,会带来一定的内存和时间开销,如额外的表空间、表查询时间等。

综上所述,段页式存储通过结合分段和分页的优势,实现了对程序逻辑结构的良好映射、高效内存利用、完善的内存保护以及灵活的内存共享。尽管其硬件成本、软件复杂性和访问效率有所增加,但在现代操作系统中,这些缺点往往可通过先进的硬件支持和高效的软件设计得到有效缓解,使得段页式存储成为一种适用于大型、复杂程序的有效内存管理策略。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
软件工程——软件开发阶段(概要设计、详细设计)
需求分析确定了系统的开发目标,下一步工作就是软件设计。软件设计可以进一步地 分为两个阶段:总体设计和详细设计。确定系统的具体 实现方案、给出软件的模块结构、编写各个文档
|
算法 安全 编译器
【C++20 新特性Concepts 概念】C++20 Concepts: Unleashing the Power of Template Programming
【C++20 新特性Concepts 概念】C++20 Concepts: Unleashing the Power of Template Programming
523 0
|
存储 监控 算法
ClickHouse源码分析-压缩算法大揭秘
ClickHouse在近年来增加了很多压缩算法,最主要的改进还是为了更好的适应时序场景,提高压缩率,节省存储空间。本期就给大家带来ClickHouse的压缩算法介绍。
5641 0
ClickHouse源码分析-压缩算法大揭秘
|
11月前
|
编译器 C语言
C语言:普通全局变量可以被多个源文件共享吗
C语言中,普通全局变量可以通过extern关键字在多个源文件中声明和共享,实现数据的跨文件使用。但需注意,变量只能在一个文件中定义,其他文件中仅能声明。
406 9
|
9月前
|
存储 索引
什么情况下不应该创建索引?
索引应避免在很少使用的列、数据值少的列、text/image/bit类型列上创建,因为这些情况下索引不仅无助于提升查询速度,还会降低系统维护效率,增加存储开销。当数据修改频率远高于查询时,也不宜创建索引。
168 26
|
12月前
|
安全 Linux 数据安全/隐私保护
Linux强制修改用户密码
【9月更文挑战第21天】在 Linux 系统中,可使用以下方法强制修改用户密码:1. 使用 `passwd` 命令,以 root 身份运行 `passwd username` 修改密码,加 `-f` 选项可跳过复杂度检查;2. 使用 `chpasswd` 命令,通过文本文件批量设置密码;3. 结合 `usermod -e 0 username` 和 `chpasswd` 强制用户下次登录时更改密码。注意操作时需确保安全性与合理性。
1276 4
|
10月前
|
数据可视化 算法 计算机视觉
什么是傅里叶变换?傅里叶变换处理图像的原理是什么?
傅里叶变换是一种强大的数学工具,能够将信号在时域与频域之间进行转换,广泛应用于物理学、信号处理、图像处理等领域。它能够将复杂信号分解为多个简单的正弦波,从而便于分析和处理。在图像处理中,傅里叶变换可以用于去噪、锐化和压缩等操作,通过滤波器选择性地保留或去除特定频率的信息,提高图像质量。
|
Cloud Native Java 关系型数据库
阿里云 PolarDB-X 团队25届实习生招聘
阿里云 PolarDB-X 团队25届实习生招聘
|
关系型数据库 MySQL API
PyMySQL:连接Python与MySQL的桥梁
PyMySQL:连接Python与MySQL的桥梁

热门文章

最新文章