段页式存储管理:分页与分段为何要合体?

分类: 软考中级、 软件设计师 发表时间:2026年08月01日 11:06

段页式存储管理是什么:一次定义讲清楚

段页式存储管理是一种将分段存储管理和分页存储管理相结合的复合型内存管理方案。它的核心思想可以概括为一句话:先用分段按逻辑意义将用户程序的地址空间划分为若干段,再对每一段内部实行分页,从而在一个系统里同时获得分段的逻辑清晰性和分页的物理利用率。

在操作系统的发展史上,存储管理经历了从连续分配到离散分配的演进。最早的多道程序系统使用固定分区或可变分区,程序必须占用一整块连续的内存空间,这带来了外部碎片和程序大小受限于空闲分区尺寸的两大痛点。为了解决连续分配的问题,离散分配方案应运而生,分页和分段是两种最具代表性的离散分配方式。分页将程序地址空间和物理内存空间都切分成固定大小的页和页框,消除了外部碎片,但牺牲了程序的逻辑完整性。分段则按程序的自然逻辑结构划分地址空间,每一段对应一个逻辑完整的程序模块,但段的大小不固定,仍然面临外部碎片的问题。

段页式方案正是在这样的背景下诞生的。它将分页作为底层的物理分配机制,将分段作为上层的逻辑组织机制。程序地址空间以段为单位组织,段内再划分为固定大小的页,物理内存以页框为单位分配。这样一来,内存分配的最小单位是页而不是段,从根本上解决了分段存储管理的外部碎片问题,同时保留了分段方式下程序逻辑模块独立、便于共享与保护的优点。

在软考的考试体系中,段页式存储管理是存储管理章节的重要考点,在软件设计师、系统分析师、系统架构设计师等多个级别均有涉及。它不仅考查分页和分段各自的特点,更考查二者结合后的地址变换机制。理解段页式,本质上就是理解操作系统如何用两级映射,将逻辑地址转换为物理地址。

先懂分页与分段,才能理解段页式

在深入段页式之前,有必要先回顾分页和分段各自的设计动机与核心机制。不理解这两种方案各自解决了什么问题、又各自留下了什么缺陷,就无法真正理解段页式为什么要将它们组合在一起。

分页存储管理的设计动机非常直接:消除外部碎片,提高内存利用率。它将进程的逻辑地址空间分成固定大小的页,物理内存分成同样大小的页框,以页框为单位分配。页与页框的映射关系由页表记录。好处是任何空闲页框都可以分配给任何页,不存在外部碎片。但代价是程序的逻辑结构在分页后被打散,代码段、数据段、堆栈段在地址空间中没有明确界限,共享和保护必须以页为单位,而一个逻辑模块往往跨越多个页,实现不便。

分段存储管理的设计动机是保持程序的逻辑完整性。它将地址空间按逻辑意义划分成若干段,比如代码段、数据段、堆栈段,每段有独立的段号和段内偏移量,段长由程序逻辑需要决定。优势在于共享和保护以段为单位,多进程可共享同一代码段,操作系统可对不同段设不同访问权限。劣势在于段长不固定会产生外部碎片,即虽然空闲总量够但没有一段足够大的连续空间装入某段,且分配回收复杂度高。

对比之下,分页的物理效率高但逻辑表达弱,分段的逻辑表达强但物理效率低。段页式的价值就在于用组合的方式打破了这个两难。

分页的核心数据结构:页表

分页系统中,逻辑地址到物理地址的转换完全依赖页表。页表每行记录一个逻辑页号对应的物理页框号。给定逻辑地址,CPU先拆分为页号和页内偏移量,用页号查页表得页框号,再加页内偏移量得物理地址。页号位数决定最多有多少页,页内偏移量位数决定每页大小。如三十二位逻辑地址,低十二位为页内偏移量则页大小四KB,高二十位为页号最多约百万页。

页表的访问本身就是一次内存操作。如果每次地址转换都要先查页表再访存,访存次数翻倍,严重影响性能。为此CPU内部引入了快表即TLB,翻译后备缓冲器。快表是高速硬件缓存,存放最近用过的页表项。地址转换时先查快表,命中则直接得物理页框号,不命中再查内存页表,性能损失被大幅压低。

分段的核心数据结构:段表

分段系统中的地址转换依赖段表。段表的每一行记录了一个段的段号、段长和段在内存中的基址。给定的逻辑地址由段号和段内偏移量两部分组成。地址转换时,CPU用段号查段表,先做越界检查——如果段内偏移量超过了该段的段长,则触发地址越界中断——检查通过后,将段基址加上段内偏移量即得到物理地址。

段表项中的段长字段是分段系统独有的。它使得操作系统有能力对每一次内存访问做越界保护,从硬件层面防止一个程序非法访问其他段的数据。这种保护机制比分页自然得多,因为段是逻辑完整的单元,保护粒度天然与程序的逻辑结构对齐。

段页式的工作原理与地址变换全过程

段页式将分段和分页嵌套在一起工作,这意味着逻辑地址到物理地址的转换需要经过两级映射:第一级从段号映射到页表,第二级从页号映射到页框。这个两级映射的过程是段页式存储管理最核心、也最容易被考到的知识点。

在段页式系统中,逻辑地址的结构由三部分组成:段号、段内页号、页内偏移量。这三个字段各占若干位,共同构成一个完整的逻辑地址。段号用于在段表中定位对应的段表项,段表项中记录了该段对应的页表在内存中的起始地址以及该段的页表长度。段内页号用于在该段的页表中定位对应的页表项,页表项中记录了物理页框号。页内偏移量则直接拼接在物理页框号的低位,构成最终的物理地址。

需要注意的是,段页式中的"段"与纯分段中的"段"有一个关键区别:纯分段中,段表项记录的是段的基址和段长,段内偏移量直接加上基址得到物理地址。段页式中,段表项记录的是页表地址和页表长度,段内不再使用偏移量加法,而是通过页表进一步映射。这意味着段页式中的段只保留了逻辑分组的功能,物理分配完全由分页机制承担。

段表与页表的双重角色

段页式系统中有两张关键的数据结构表,一张是段表,一张是每段各自独立的页表。段表是全局唯一的,每个进程有一个段表,段表在进程创建时由操作系统分配。页表则是每段一个,不同段的页表之间相互独立,但所有页表项指向的是同一个物理页框池。

段表项的结构通常包含三个字段:页表基址、页表长度和访问权限。其中页表基址指向该段页表在物理内存中的起始位置,页表长度指示该段包含多少个页,访问权限字段定义了该段是可读、可写还是可执行。页表项的结构与纯分页系统中的页表项类似,包含物理页框号和若干控制位,比如有效位标识该页是否已在内存中,修改位标识该页是否被写过,访问位用于页面置换算法的决策。

两张表的分工非常清晰。段表解决的是"这一段在哪里"的问题——找到页表。页表解决的是"这一页在哪里"的问题——找到物理页框。两级映射各司其职,程序只需要提供段号和段内地址,硬件自动完成两次查表和一次偏移拼接。

地址变换的五步走

段页式系统中,CPU将一个逻辑地址转换为物理地址需要经历五个步骤。第一步,从逻辑地址中提取段号字段,用段号作为索引在段表中查找对应的段表项。如果段号超出了段表的范围,硬件触发越界中断,操作系统终止该进程。第二步,从段表项中取出页表基址和页表长度。第三步,从逻辑地址中提取段内页号字段,将段内页号与页表长度比较,若超出范围则触发越界中断。第四步,用段内页号作为索引在页表中查找对应的页表项,获得物理页框号。若该页表项的有效位为零,表示该页不在内存中,触发缺页中断,由操作系统将所需页面从磁盘调入内存。第五步,从逻辑地址中提取页内偏移量字段,将其拼接在物理页框号的低位,得到最终的物理地址。

这五步中,每一步都可能触发异常。段号越界是编程错误,通常意味着程序试图访问不存在的段。页号越界同样是编程错误,表示段内偏移不合理。缺页是正常现象,由操作系统的页面置换算法处理。每触发一次异常,CPU就会从用户态切换到内核态,由操作系统接管处理。这种机制虽然保证了安全性,但也带来了额外的性能开销——每一次成功的地址转换至少需要三次内存访问:一次读段表、一次读页表、一次真正的数据访问。如果没有快表加速,段页式的性能将惨不忍睹。

段页式的优缺点与适用边界

段页式存储管理的最大优点,是同时继承了分段的逻辑独立性和分页的无外部碎片特性。程序按自然功能模块分段,每段有独立地址空间和访问权限,代码段可共享、数据段可保护、堆栈段可按需增长。物理内存层面,分配最

本篇完!

本文为付费内容,请输入 VIP 码查解锁本站全部文章!
点击此处获得 VIP 码
你可能也喜欢这些文章
 

深度解析《论数据湖技术及其应用》知识点
07-28
《论基于架构的软件开发方法及应用》考点详解?
01-20
《论软件系统架构评估》考点详解?
01-24
数字信封技术全解:对称密钥如何安全传递
07-30
数据库封锁协议到底有几级?并发控制三道防线一次讲清
07-30
《论微服务架构及其应用》适合写什么项目?
10-21
净室软件工程全解析:架构师软考必考的零缺陷开发方法
07-22
RAID独立冗余磁盘阵列深度解析:RAID 0到RAID 10各级别原理对比与软考高频考点一文讲透
07-07
数字信封详解:混合加密如何同时解决效率与密钥分发难题?
07-30
深度解析《论软件设计方法及其应用》知识点
12-04
深度解析《论软件质量保证及其应用》知识点
08-29
《论数据访问层设计技术及其应用》考点详解?
01-23
软考系统架构设计师SQL注入怎么考?注入原理、盲注手法与防御策略一篇讲透
06-28
软考论文《论软件系统架构评估》精选试读
07-26
《论遗留系统演化策略及其应用》写作心得
02-20
对称加密算法DES与AES核心原理怎么学?分组密码Feistel网络与SPN结构深度拆解,信息安全工程师高频考点全梳理
07-08
热门标签
扫码获取 VIP 码
添加管理员微信获取 VIP 码
微信二维码