一、定义与本质

  段页式存储管理是一种离散分配的内存管理方式,它结合了段式存储的逻辑可读性和页式存储的物理易管理性,将用户作业先按逻辑意义划分为若干段,再将每一段划分为固定大小的页,分配时以页框为单位离散装入内存。

  段页式存储的核心思想是取其精华,去其糟粕,用分段满足用户编程、共享、保护的需求,用分页解决分段带来的外部碎片和内存分配复杂的问题。逻辑上,用户看到的仍是二维的段式地址空间;物理上,内存管理以页框为单位进行离散分配。

段页式可视为“在段式基础上套了一层页式”,等价于“两次映射”:先将逻辑段映射到段内的虚拟页,再将虚拟页映射到物理页框。

二、核心概念与结构

1. 段、页与页框

术语 所属空间 说明
逻辑地址空间 按逻辑意义划分,长度可变,但必须是页大小的整数倍
逻辑段内部 每段被划分为固定大小的页面,从0开始编号
页框 物理地址空间 内存被划分的等大单元,大小与页相等
段内页号 逻辑地址中间层 标识数据在某段内的第几页
页内偏移 地址低位 表示数据在该页内的具体位置

页面大小通常为2的整数次幂(如4KB),所有段的页大小相同,但不同段的长度(页数)可以不同。

2. 逻辑地址结构

段页式的逻辑地址是三维分解、二维感知的:

用户视角的逻辑地址:(段号S, 段内地址W)
系统内部将段内地址W再分解为:(段内页号P, 页内偏移D)
完整逻辑地址格式:
在这里插入图片描述

虽然系统内部处理时使用三个字段,但用户编程时只感知到(段号, 段内地址),段内分页对用户是透明的。

3. 段表与页表

段页式存储需要两级映射表

表名 作用 表项内容
段表 定位段的页表位置 页表长度、页表基址、存取权限等
页表 定位页对应的页框 页框号、状态位、访问位、修改位等

每个进程拥有一个段表,每个段拥有一个独立的页表。段表本身不存储段的物理位置,而是存储指向该段页表的指针。

段表项字段 含义
段号 逻辑段的编号(隐含)
页表长度 该段包含的页数
页表基址 该段页表在内存中的起始地址
存取控制 该段的读/写/执行权限
页表项字段 含义
页号 段内页的编号(隐含)
页框号 该页装入的物理页框编号

4. 地址映射过程

段页式地址转换需要两次查表,由MMU硬件完成:

逻辑地址 = (段号S, 段内页号P, 页内偏移D)

转换步骤:
1. 以段号S为索引查段表,获取该段页表的基址B_pt
2. 以段内页号P为索引查该段的页表,获取对应页框号F
3. 若 P ≥ 页表长度,触发越界中断
4. 物理地址 = F × 页面大小 + D

段页式地址转换可以类比“找写字楼里的某间办公室”,段号是写字楼编号(定位哪栋楼),段内页号是楼层号(定位第几层),页内偏移是房间号(定位具体房间)。先找到楼栋(段表),再找到楼层(页表),最后确定房间(页框)。

5. 快表的作用

段页式存储每次访问数据理论上需要三次访存

  • 第一次:查段表,获取页表基址
  • 第二次:查页表,获取页框号
  • 第三次:取数据

效率仅为无映射时的1/3。因此段页式系统必须依赖快表(TLB)来提升性能。快表中缓存的是一项完整的映射信息(段号S, 页号P) → 页框号F

若快表命中,只需一次访存即可取到数据;未命中时则经历完整的三次访存过程。

有效访存时间计算

EAT = 命中率 × (快表时间 + 一次访存时间)
+ (1-命中率) × (快表时间 + 三次访存时间)

三、与纯分段、纯分页的对比

比较维度 页式存储 段式存储 段页式存储
划分依据 物理等长 逻辑意义 先逻辑分段,再物理分页
地址维度 一维(用户透明) 二维(用户可见) 二维(用户视角)+内部三维
外部碎片
内部碎片 有(末页平均浪费半页) 有(每段末页平均浪费半页)
共享与保护 困难(粒度不匹配) 方便(段级粒度) 方便(段级粒度)
动态链接 困难 支持 支持
内存利用率 较高 较低(外部碎片)
地址转换开销 较小(1次查表) 较小(1次查表) 较大(2次查表)
管理复杂度 简单 复杂(可变分区) 较复杂(两级映射)

段页式存储试图兼取两者之长:既获得分段的逻辑优点(便于共享、保护、动态链接),又获得分页的物理优点(消除外部碎片、简化内存分配)。代价是增加了地址映射的复杂度和访存次数

四、优缺点分析

优点 缺点
兼具分段与分页:逻辑清晰且无外部碎片 地址转换开销大:两次查表,三次访存(无快表时)
便于共享与保护:以段为单位设置权限,粒度适中 硬件支持要求高:需要MMU支持两级地址转换
支持动态链接与增长:段可动态扩展,以段为单位链接 管理复杂度增加:需同时维护段表和每段的页表
内存利用率高:页框等大分配,消除外部碎片 存在内部碎片:每段的最后一页仍有平均半页浪费
段长不受内存连续性限制:离散分页使段可跨越碎片 内存占用更多:段表+多张页表占用额外存储空间

五、练习

题目1:在段页式存储管理系统中,逻辑地址由( )三部分组成。

A. 段号、页框号、页内偏移
B. 段号、段内页号、页内偏移
C. 页目录号、页表索引、页内偏移
D. 段号、页号、页框号

答案:B

解析:段页式逻辑地址由段号S、段内页号P、页内偏移D三部分组成。A中的“页框号”是物理地址成分;C描述的是两级页表;D中的“页框号”也是物理概念。注意区分逻辑地址与物理地址的组成。

题目2:段页式存储管理中,每访问一个数据,快表未命中时需要访问内存( )次。

A. 1
B. 2
C. 3
D. 4

答案:C

解析:段页式需要先查段表(第1次访存),再查页表(第2次访存),最后取数据(第3次访存),共3次访存。若快表命中,则快表中直接存储了段号+页号到页框号的映射,跳过前两次访存,只需1次访存取数据。

题目3:在段页式存储管理中,用于实现地址映射的数据结构是( )。

A. 每个进程一个段表,每个段一个页表
B. 每个进程一个页表,每个段一个段表
C. 每个进程一个段表和一个页表
D. 整个系统一个段表,每个进程一个页表

答案:A

解析:段页式系统中,每个进程拥有一个独立的段表(记录各段的页表位置),每个段拥有一个独立的页表(记录该段各页的页框号)。B颠倒了关系;C每个进程只有一个页表是纯分页;D整个系统一个段表是错误的,段表是进程私有的。

题目4:段页式存储管理相较于纯分页管理,主要的优势是( )。

A. 地址转换速度更快
B. 消除了内部碎片
C. 便于实现段的共享与保护
D. 管理数据结构更简单

答案:C

解析:段页式保留了分段的逻辑特性,可以以段为单位设置共享权限和存取控制,这是纯分页难以做到的(分页的物理页框与程序逻辑无关)。A错误,段页式地址转换更慢(两次查表);B错误,段页式仍有内部碎片;D错误,段页式管理更复杂。

题目5:下列关于段页式存储管理的说法,正确的是( )。

A. 段页式管理中,段的大小必须是页大小的整数倍
B. 段页式管理既消除了内部碎片,又消除了外部碎片
C. 段页式管理中的段表项直接存储该段在内存中的起始物理地址
D. 段页式管理无法支持段的动态增长

答案:A

解析:
A正确,由于段被划分为整数个页,段长必须是页面大小的整数倍。
B错误,段页式无外部碎片(因为物理分配以页框为单位),但每段最后一页仍有内部碎片。
C错误,段表项存储的是该段页表的基址和长度,而非段的物理基址(段的物理位置由页表分散指向)。
D错误,段页式支持动态增长,当段需要扩展时,可新增页表项映射新的页框。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐