Skip to content

408

操作系统

OS-03-05 非连续分配:段页式管理


一、定位信息

  • 所属圈层:核心层
  • 前置知识回顾:理解页式管理(等大小划分、页表、无外部碎片)和段式管理(逻辑划分、段表、有外部碎片)的基本原理和各自的优缺点。
  • 知识网络位置:本单元是页式管理和段式管理的综合,取两者之长——用段式管理满足程序员的逻辑视角和共享保护需求,用页式管理消除外部碎片。段页式管理是现代操作系统(如Linux)实际采用的内存管理方式的理论基础。
  • 考点热度等级M级(中频常考)——段页式管理的地址转换过程是选择题和综合题的常见考点。

二、知识点讲解

2.1 基本思想

段页式管理将程序按逻辑结构划分为若干,每个段再划分为若干。进程的逻辑地址空间先分段,段内再分页。物理内存划分为与页大小相同的页框。

这样,程序员看到的是段(逻辑视角),但内存分配以页为单位(物理视角),兼具段式的逻辑清晰性和页式的无外部碎片优点。

2.2 地址结构

逻辑地址由三部分组成:

  • 段号 SS:标识是哪个段
  • 页号 PP:段内的第几页
  • 页内偏移 WW:页内的偏移量

地址表示形式:(S,P,W)(S, P, W),例如 (2,3,100)(2, 3, 100) 表示第2段的第3页的第100字节处。

2.3 段表与页表

每个进程维护一张段表,每个段表项包含:

  • 该段的页表起始地址(指向该段的页表)
  • 该段的页表长度(该段包含多少页)

每个段有自己的页表,记录该段每页对应的页框号。

2.4 地址转换过程

完整的地址转换需要三次内存访问(不使用快表时):

  1. 从逻辑地址提取段号 SS、页号 PP、页内偏移 WW
  2. SS 为索引查段表,得到该段的页表起始地址
  3. PP 为索引查该段的页表,得到页框号 ff
  4. 物理地址 = f×页大小+Wf \times \text{页大小} + W

三次内存访问:①查段表 ②查页表 ③访问目标数据。引入快表后,命中时只需1次内存访问。

有效访问时间:设快表命中率为 pp,内存访问时间为 TT,快表访问时间为 ttEAT=p×(t+T)+(1p)×(t+3T)EAT = p \times (t + T) + (1-p) \times (t + 3T)

2.5 优缺点

优点

  • 兼具段式的逻辑清晰性和页式的无外部碎片优点
  • 便于共享和保护(以段为单位)
  • 内存利用率高(以页为单位分配)

缺点

  • 地址转换复杂,需要三次内存访问(无快表时)
  • 需要更多的硬件支持和表格(段表 + 多个页表)
  • 系统开销较大

三、记忆与理解辅助

1. 类比记忆:段页式管理就像一本百科全书——先按学科分卷(段),每卷再按页码排列(页)。你想查某个知识点:先在目录中找到是哪一卷(查段表),再在该卷中找到是哪一页(查页表),最后找到页中的具体位置(偏移)。

2. 口诀:"段页先分段,段内再分页;段表指向页表头,页表找到框号走;三次访问记清楚,快表命中一次够。"

3. 三种非连续分配方式全面对比(★本章核心对比表)

对比项页式管理段式管理段页式管理
划分方式等大小分页按逻辑分段先分段,段内分页
地址结构(P,W)(P, W)(S,W)(S, W)(S,P,W)(S, P, W)
页/段表页表段表段表 + 每段一个页表
内存访问次数(无快表)2次2次3次
内部碎片有(最后一页)有(每段最后一页)
外部碎片
共享不方便方便方便(以段为单位)
保护以页为粒度以段为粒度以段为粒度
地址计算除法+取余直接编码除法+取余+查段表

4. 内存访问次数对比

  • 页式(无快表):2次(查页表 + 访问数据)
  • 段式(无快表):2次(查段表 + 访问数据)
  • 段页式(无快表):3次(查段表 + 查页表 + 访问数据)
  • 有快表时:命中时均为1次

四、例题与精解

例题1(基础巩固)

题目:某系统采用段页式管理,页大小为 4KB4\text{KB}。某进程的段表如下:

段号页表起始地址页表长度
0200003
1300002

段0的页表:

页号页框号
010
115
28

段1的页表:

页号页框号
020
15

求逻辑地址 (0,1,100)(0, 1, 100)(1,0,2000)(1, 0, 2000) 对应的物理地址。

命题意图:考查段页式管理的完整地址转换过程。

精解

1. 审题分析:逻辑地址格式为 (S,P,W)(S, P, W),需要先查段表获取页表位置,再查页表获取页框号,最后计算物理地址。

2. 解题思路:查段表 → 查页表 → 计算物理地址,同时检查越界。

3. 完整步骤

地址 (0,1,100)(0, 1, 100)

  • 查段表:段0的页表起始地址 = 20000,页表长度 = 3
  • 越界检查:页号 1<31 < 3 ✓,未越界
  • 查段0的页表:页号1对应的页框号 f=15f = 15
  • 物理地址 = 15×4096+100=61440+100=6154015 \times 4096 + 100 = 61440 + 100 = 61540

地址 (1,0,2000)(1, 0, 2000)

  • 查段表:段1的页表起始地址 = 30000,页表长度 = 2
  • 越界检查:页号 0<20 < 2 ✓,未越界
  • 查段1的页表:页号0对应的页框号 f=20f = 20
  • 物理地址 = 20×4096+2000=81920+2000=8392020 \times 4096 + 2000 = 81920 + 2000 = 83920

4. 方法反思:段页式地址转换的关键是两次查表(段表→页表)。注意越界检查包括两层:①段号是否有效(本题未涉及);②页号是否超过该段的页表长度。

例题2(中等提升)

题目:某系统采用段页式管理,页大小为 4KB4\text{KB},内存访问时间为 100ns100\text{ns},快表访问时间为 20ns20\text{ns},快表命中率为 70%70\%。 (1)不使用快表时,访问一个数据需要多少时间? (2)使用快表时,有效访问时间是多少?

命题意图:考查段页式管理的时间开销和快表优化效果。

精解

1. 审题分析:段页式管理无快表时需要3次内存访问,有快表时需要考虑命中率。

2. 解题思路:无快表时3次内存访问,有快表时用有效访问时间公式。

3. 完整步骤

(1)不使用快表:需要3次内存访问

  • 第1次:查段表 → 100ns100\text{ns}
  • 第2次:查页表 → 100ns100\text{ns}
  • 第3次:访问目标数据 → 100ns100\text{ns}
  • 总时间 = 3×100=300ns3 \times 100 = 300\text{ns}

(2)使用快表: EAT=p×(t+T)+(1p)×(t+3T)EAT = p \times (t + T) + (1-p) \times (t + 3T)=0.7×(20+100)+0.3×(20+300)= 0.7 \times (20 + 100) + 0.3 \times (20 + 300)=0.7×120+0.3×320= 0.7 \times 120 + 0.3 \times 320=84+96=180ns= 84 + 96 = 180\text{ns}

4. 方法反思:段页式管理的3次内存访问是其最大缺点,快表的命中率对性能影响极大。从 300ns300\text{ns} 降到 180ns180\text{ns},提升了约 40%40\%。实际系统中快表命中率通常在 90%90\% 以上,效果更显著。


五、考情分析

  • 考查频次:段页式管理在近5年真题中出现约2-3次。
  • 常见题型:选择题(地址转换过程、内存访问次数判断)、综合题(与页式/段式对比)。
  • 分值占比:选择题2分,综合题子问题3-5分。
  • 命题趋势:段页式管理常与页式、段式管理一起作为对比题出现。近年来可能与虚拟内存、缺页中断结合考查。基于大纲与命题规律推测

六、易错点提醒

  1. 错误表现:段页式地址转换时忘记查段表,直接用段号和页号去查页表。 错误原因:不理解段表的作用——段表告诉你该段的页表在哪里。 正确理解/做法:正确的顺序是:逻辑地址 → 查段表(得到页表地址) → 查页表(得到页框号) → 计算物理地址。两步查表缺一不可。

  2. 错误表现:认为段页式管理的内存访问次数是2次(与页式相同)。 错误原因:忽略了段表也需要一次内存访问。 正确理解/做法:无快表时,段页式需要3次内存访问:①查段表 ②查页表 ③访问数据。这是段页式的主要性能瓶颈。

  3. 错误表现:认为段页式管理完全消除了碎片。 错误原因:忽略了内部碎片仍然存在。 正确理解/做法:段页式消除了外部碎片(以页为单位分配),但每个段的最后一页可能存在内部碎片。平均每个段浪费半页空间。


七、来源标注

  • 依据2026考研统考408大纲
  • 依据《操作系统概念》(Operating System Concepts, Silberschatz)第9章
  • 依据汤小丹《计算机操作系统》第4版第3章

考研全科复习资料 - 基于2026考研统考大纲