Skip to content

408

操作系统

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


一、定位信息

  • 所属圈层:核心层
  • 前置知识回顾:理解页式管理的基本思想(等大小划分、页表、地址转换),了解连续分配方式的外部碎片问题。
  • 知识网络位置:本单元与OS-03-03(页式管理)、OS-03-05(段页式管理)并列,构成非连续分配的三种方式。段式管理从程序的逻辑结构出发划分内存,是理解段页式管理和虚拟内存中共享/保护机制的基础。
  • 考点热度等级M级(中频常考)——段式管理的基本概念和地址转换常出现在选择题中,与页式管理的对比是高频考点。

二、知识点讲解

2.1 基本思想

段式管理按照程序的逻辑结构将进程地址空间划分为若干个段(Segment),每个段有明确的逻辑含义(如代码段、数据段、栈段等)。各段大小不等,从0开始编址。每个段在内存中占据一块连续区域,但各段之间可以不连续。

段式管理的设计动机是满足程序员对程序模块化管理的需求——程序员希望以"段"为单位进行编程、共享和保护。

2.2 地址结构

逻辑地址由两部分组成:

  • 段号 SS:标识是哪个段
  • 段内偏移 WW:段内的相对位置

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

与页式管理的关键区别:页式管理的页号可以从逻辑地址直接计算得出(P=A/LP = A / L),而段式管理的段号通常直接编码在逻辑地址的高位,不需要除法运算。

2.3 段表(Segment Table)

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

  • 段长(Limit):该段的长度,用于越界检查
  • 段基址(Base):该段在内存中的起始地址

地址转换过程:

  1. 从逻辑地址中提取段号 SS 和段内偏移 WW
  2. SS 为索引查段表,得到段长 LL 和段基址 BB
  3. 检查:W<LW < L?若否,产生越界中断
  4. 物理地址 = B+WB + W

2.4 段式管理的优缺点

优点

  • 符合程序员的逻辑视角,便于模块化编程
  • 便于共享:可以将整个段(如共享库代码)共享给多个进程
  • 便于保护:可以对每个段设置不同的访问权限(读/写/执行)
  • 段有逻辑意义,便于动态增长(如堆段、栈段)

缺点

  • 产生外部碎片:段大小不等,分配和回收后会产生碎片
  • 需要紧凑操作来合并碎片,开销大
  • 段长不固定,内存管理算法更复杂

三、记忆与理解辅助

1. 类比记忆:段式管理就像把一本书按章节(段)拆分,每章是一个独立的整体,可以放在书架的不同位置。但每章的长度不同,放完后书架上会有大小不一的空隙(外部碎片)。

2. 口诀:"段式按逻辑分,代码数据各一段;段表含基址和长,越界检查不能忘;共享保护都方便,碎片问题要紧凑。"

3. 页式 vs 段式 完整对比表(★高频考点)

对比项页式管理段式管理
划分单位页(等大小)段(不等大小)
划分依据物理(系统自动)逻辑(程序员决定)
地址结构页号 + 页内偏移段号 + 段内偏移
地址计算P=A/LP = A / LW=AmodLW = A \mod LSSWW 直接编码在地址中
页/段表内容页框号段基址 + 段长
越界检查不需要(偏移总在页内)需要(W<LW < L
内部碎片有(最后一页)
外部碎片
共享不方便方便(整段共享)
保护以页为粒度以段为粒度,可设权限
用户可见性不可见可见(段号、段名)

4. 段表 vs 页表对比

对比项页表段表
每项内容页框号段基址 + 段长
是否需要越界检查
表项大小较小(只需框号)较大(需基址+长度)
存储位置内存(可多级)内存

四、例题与精解

例题1(基础巩固)

题目:某系统采用段式管理,某进程的段表如下:

段号段基址段长
01000500
13000200
25000800
38000300

求以下逻辑地址对应的物理地址:(1)(0,300)(0, 300);(2)(2,900)(2, 900)

命题意图:考查段式管理的地址转换和越界检查。

精解

1. 审题分析:需要查段表,检查越界,计算物理地址。

2. 解题思路:先查段表获取基址和段长,检查段内偏移是否越界,再计算物理地址。

3. 完整步骤

(1)逻辑地址 (0,300)(0, 300)

  • 查段表:段0的基址 B=1000B = 1000,段长 L=500L = 500
  • 越界检查:300<500300 < 500 ✓,未越界
  • 物理地址 = 1000+300=13001000 + 300 = 1300

(2)逻辑地址 (2,900)(2, 900)

  • 查段表:段2的基址 B=5000B = 5000,段长 L=800L = 800
  • 越界检查:900800900 \geq 800 ✗,越界! 产生越界中断,此次访问非法。

4. 方法反思:段式管理的地址转换必须包含越界检查,这是与页式管理的重要区别。页式管理中偏移总是在 [0,L1][0, L-1] 范围内(因为页大小固定),不需要额外检查。

例题2(中等提升)

题目:某系统采用段式管理,段表如下:

段号段基址段长
020001000
15000600

进程A和进程B共享段1(共享库代码段)。 (1)进程A访问 (1,200)(1, 200),物理地址是多少? (2)进程B访问 (1,500)(1, 500),物理地址是多少? (3)说明为什么段式管理比页式管理更适合实现共享。

命题意图:考查段式管理的共享特性和地址转换。

精解

1. 审题分析:两个进程共享段1,段1在内存中只有一份,两个进程的段表中段1的基址和段长相同。

2. 解题思路:分别查两个进程的段表计算物理地址,然后分析共享特性。

3. 完整步骤

(1)进程A访问 (1,200)(1, 200)

  • 查段表:段1基址 = 50005000,段长 = 600600
  • 200<600200 < 600 ✓,未越界
  • 物理地址 = 5000+200=52005000 + 200 = 5200

(2)进程B访问 (1,500)(1, 500)

  • 查段表:段1基址 = 50005000,段长 = 600600
  • 500<600500 < 600 ✓,未越界
  • 物理地址 = 5000+500=55005000 + 500 = 5500

(3)段式管理更适合共享的原因:

  • 段有明确的逻辑含义(如代码段、数据段),可以精确地将整个逻辑模块共享
  • 页式管理中,一个逻辑模块可能跨越多页,共享时需要确定哪些页需要共享,粒度不匹配
  • 段式管理可以对共享段设置统一的访问权限(如只读),保护更方便

4. 方法反思:共享是段式管理的核心优势之一。在实际系统中,共享库(如libc)通常作为一个段被多个进程共享,节省内存。注意共享时两个进程的段表中对应段的基址和段长完全相同,指向内存中的同一区域。


五、考情分析

  • 考查频次:段式管理在近5年真题中出现约2-3次,以选择题为主。
  • 常见题型:选择题(地址转换、段式vs页式对比判断)、偶尔在综合题中出现。
  • 分值占比:选择题2分。
  • 命题趋势:段式管理本身单独出大题的概率较低,但作为与页式管理对比的知识点经常出现在选择题中。近年来更倾向于考查段页式管理。基于大纲与命题规律推测

六、易错点提醒

  1. 错误表现:段式地址转换时忘记越界检查,直接计算物理地址。 错误原因:受页式管理思维影响,习惯性跳过越界检查。 正确理解/做法:段式管理必须检查 W<LW < L,因为段长不固定,段内偏移可能越界。页式管理不需要检查是因为页大小固定,偏移自动在范围内。

  2. 错误表现:认为段式管理和页式管理可以简单组合,不理解各自的优缺点。 错误原因:对两种管理方式的本质区别理解不深。 正确理解/做法:页式从物理角度划分(等大小),段式从逻辑角度划分(不等大小)。两者各有优劣,段页式管理(下一单元)正是为了取两者之长。

  3. 错误表现:认为段式管理的"段"和程序中的"函数"是一一对应的。 错误原因:对段的定义理解过于狭隘。 正确理解/做法:段是按逻辑功能划分的,一个段可以包含多个函数(如代码段包含所有函数),也可以是一个数据区(如全局变量段)。段的划分由编译器和链接器决定,不等于函数。


七、来源标注

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

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