Appearance
408
操作系统
OS-03-04 非连续分配:段式管理
一、定位信息
- 所属圈层:核心层
- 前置知识回顾:理解页式管理的基本思想(等大小划分、页表、地址转换),了解连续分配方式的外部碎片问题。
- 知识网络位置:本单元与OS-03-03(页式管理)、OS-03-05(段页式管理)并列,构成非连续分配的三种方式。段式管理从程序的逻辑结构出发划分内存,是理解段页式管理和虚拟内存中共享/保护机制的基础。
- 考点热度等级:M级(中频常考)——段式管理的基本概念和地址转换常出现在选择题中,与页式管理的对比是高频考点。
二、知识点讲解
2.1 基本思想
段式管理按照程序的逻辑结构将进程地址空间划分为若干个段(Segment),每个段有明确的逻辑含义(如代码段、数据段、栈段等)。各段大小不等,从0开始编址。每个段在内存中占据一块连续区域,但各段之间可以不连续。
段式管理的设计动机是满足程序员对程序模块化管理的需求——程序员希望以"段"为单位进行编程、共享和保护。
2.2 地址结构
逻辑地址由两部分组成:
- 段号 :标识是哪个段
- 段内偏移 :段内的相对位置
地址表示形式:,例如 表示第2段的第150字节处。
与页式管理的关键区别:页式管理的页号可以从逻辑地址直接计算得出(),而段式管理的段号通常直接编码在逻辑地址的高位,不需要除法运算。
2.3 段表(Segment Table)
每个进程维护一张段表,每项包含:
- 段长(Limit):该段的长度,用于越界检查
- 段基址(Base):该段在内存中的起始地址
地址转换过程:
- 从逻辑地址中提取段号 和段内偏移
- 以 为索引查段表,得到段长 和段基址
- 检查:?若否,产生越界中断
- 物理地址 =
2.4 段式管理的优缺点
优点:
- 符合程序员的逻辑视角,便于模块化编程
- 便于共享:可以将整个段(如共享库代码)共享给多个进程
- 便于保护:可以对每个段设置不同的访问权限(读/写/执行)
- 段有逻辑意义,便于动态增长(如堆段、栈段)
缺点:
- 产生外部碎片:段大小不等,分配和回收后会产生碎片
- 需要紧凑操作来合并碎片,开销大
- 段长不固定,内存管理算法更复杂
三、记忆与理解辅助
1. 类比记忆:段式管理就像把一本书按章节(段)拆分,每章是一个独立的整体,可以放在书架的不同位置。但每章的长度不同,放完后书架上会有大小不一的空隙(外部碎片)。
2. 口诀:"段式按逻辑分,代码数据各一段;段表含基址和长,越界检查不能忘;共享保护都方便,碎片问题要紧凑。"
3. 页式 vs 段式 完整对比表(★高频考点):
| 对比项 | 页式管理 | 段式管理 |
|---|---|---|
| 划分单位 | 页(等大小) | 段(不等大小) |
| 划分依据 | 物理(系统自动) | 逻辑(程序员决定) |
| 地址结构 | 页号 + 页内偏移 | 段号 + 段内偏移 |
| 地址计算 | , | 和 直接编码在地址中 |
| 页/段表内容 | 页框号 | 段基址 + 段长 |
| 越界检查 | 不需要(偏移总在页内) | 需要() |
| 内部碎片 | 有(最后一页) | 无 |
| 外部碎片 | 无 | 有 |
| 共享 | 不方便 | 方便(整段共享) |
| 保护 | 以页为粒度 | 以段为粒度,可设权限 |
| 用户可见性 | 不可见 | 可见(段号、段名) |
4. 段表 vs 页表对比:
| 对比项 | 页表 | 段表 |
|---|---|---|
| 每项内容 | 页框号 | 段基址 + 段长 |
| 是否需要越界检查 | 否 | 是 |
| 表项大小 | 较小(只需框号) | 较大(需基址+长度) |
| 存储位置 | 内存(可多级) | 内存 |
四、例题与精解
例题1(基础巩固)
题目:某系统采用段式管理,某进程的段表如下:
| 段号 | 段基址 | 段长 |
|---|---|---|
| 0 | 1000 | 500 |
| 1 | 3000 | 200 |
| 2 | 5000 | 800 |
| 3 | 8000 | 300 |
求以下逻辑地址对应的物理地址:(1);(2)。
命题意图:考查段式管理的地址转换和越界检查。
精解:
1. 审题分析:需要查段表,检查越界,计算物理地址。
2. 解题思路:先查段表获取基址和段长,检查段内偏移是否越界,再计算物理地址。
3. 完整步骤:
(1)逻辑地址 :
- 查段表:段0的基址 ,段长
- 越界检查: ✓,未越界
- 物理地址 =
(2)逻辑地址 :
- 查段表:段2的基址 ,段长
- 越界检查: ✗,越界! 产生越界中断,此次访问非法。
4. 方法反思:段式管理的地址转换必须包含越界检查,这是与页式管理的重要区别。页式管理中偏移总是在 范围内(因为页大小固定),不需要额外检查。
例题2(中等提升)
题目:某系统采用段式管理,段表如下:
| 段号 | 段基址 | 段长 |
|---|---|---|
| 0 | 2000 | 1000 |
| 1 | 5000 | 600 |
进程A和进程B共享段1(共享库代码段)。 (1)进程A访问 ,物理地址是多少? (2)进程B访问 ,物理地址是多少? (3)说明为什么段式管理比页式管理更适合实现共享。
命题意图:考查段式管理的共享特性和地址转换。
精解:
1. 审题分析:两个进程共享段1,段1在内存中只有一份,两个进程的段表中段1的基址和段长相同。
2. 解题思路:分别查两个进程的段表计算物理地址,然后分析共享特性。
3. 完整步骤:
(1)进程A访问 :
- 查段表:段1基址 = ,段长 =
- ✓,未越界
- 物理地址 =
(2)进程B访问 :
- 查段表:段1基址 = ,段长 =
- ✓,未越界
- 物理地址 =
(3)段式管理更适合共享的原因:
- 段有明确的逻辑含义(如代码段、数据段),可以精确地将整个逻辑模块共享
- 页式管理中,一个逻辑模块可能跨越多页,共享时需要确定哪些页需要共享,粒度不匹配
- 段式管理可以对共享段设置统一的访问权限(如只读),保护更方便
4. 方法反思:共享是段式管理的核心优势之一。在实际系统中,共享库(如libc)通常作为一个段被多个进程共享,节省内存。注意共享时两个进程的段表中对应段的基址和段长完全相同,指向内存中的同一区域。
五、考情分析
- 考查频次:段式管理在近5年真题中出现约2-3次,以选择题为主。
- 常见题型:选择题(地址转换、段式vs页式对比判断)、偶尔在综合题中出现。
- 分值占比:选择题2分。
- 命题趋势:段式管理本身单独出大题的概率较低,但作为与页式管理对比的知识点经常出现在选择题中。近年来更倾向于考查段页式管理。基于大纲与命题规律推测。
六、易错点提醒
错误表现:段式地址转换时忘记越界检查,直接计算物理地址。 错误原因:受页式管理思维影响,习惯性跳过越界检查。 正确理解/做法:段式管理必须检查 ,因为段长不固定,段内偏移可能越界。页式管理不需要检查是因为页大小固定,偏移自动在范围内。
错误表现:认为段式管理和页式管理可以简单组合,不理解各自的优缺点。 错误原因:对两种管理方式的本质区别理解不深。 正确理解/做法:页式从物理角度划分(等大小),段式从逻辑角度划分(不等大小)。两者各有优劣,段页式管理(下一单元)正是为了取两者之长。
错误表现:认为段式管理的"段"和程序中的"函数"是一一对应的。 错误原因:对段的定义理解过于狭隘。 正确理解/做法:段是按逻辑功能划分的,一个段可以包含多个函数(如代码段包含所有函数),也可以是一个数据区(如全局变量段)。段的划分由编译器和链接器决定,不等于函数。
七、来源标注
- 依据2026考研统考408大纲
- 依据《操作系统概念》(Operating System Concepts, Silberschatz)第9章
- 依据汤小丹《计算机操作系统》第4版第3章