操作系统段式存储
段式存储是一种离散分配的内存管理方式,按用户作业的逻辑意义将进程地址空间划分为若干段,以段为单位离散装入内存。本文介绍了段式存储的定义与本质、核心概念(段、段表、地址映射)、与页式存储的区别、段的共享与保护机制、动态链接支持,以及优缺点对比和习题。
文章目录
一、定义与本质
段式存储管理是一种离散分配的内存管理方式,它按照用户作业的逻辑意义将进程地址空间划分为若干段,每段对应一类逻辑信息(如主程序段、子程序段、数据段、堆栈段等),分配时以段为单位离散装入内存的各分区中。
段式存储的核心思想是面向用户编程结构,打破了“程序必须是单一连续整体”的限制。每段有独立的逻辑意义和长度,段内地址从0开始连续编址,段间不必连续,实现了逻辑上分段、物理上离散的地址映射关系。
与页式存储的物理等分不同,段式存储的划分依据是逻辑完整性,把功能完整的信息块作为独立单位管理,更贴近程序员的思维方式。
二、核心概念与结构
1. 段与段表
| 术语 | 所属空间 | 说明 |
|---|---|---|
| 段 | 逻辑地址空间 | 一组完整逻辑信息的集合,长度由信息大小决定,不等长 |
| 段号 | 逻辑地址高位 | 标识进程中的第几个段 |
| 段内地址 | 逻辑地址低位 | 表示数据在该段内的偏移量,从0开始编址 |
| 段表 | 内存数据结构 | 记录各段在内存中的基址和段长 |
段式存储的逻辑地址是二维的:(段号, 段内地址)。这与页式存储的一维地址有本质区别,程序员编程时感知到的是多个独立的逻辑段,而非单一的线性空间。
2. 段表结构
段表(Segment Table)是记录进程各段映射关系的核心数据结构。每个进程拥有独立的段表。
| 字段 | 含义 |
|---|---|
| 段号 | 进程逻辑段的编号(隐含索引) |
| 段长 | 该段的长度(用于越界检查) |
| 基址 | 该段在内存中的起始物理地址 |
段表存储在内存中,由段表寄存器保存其起始地址和长度。
3. 地址映射过程
逻辑地址到物理地址的转换由MMU硬件完成:
逻辑地址 = (段号S, 段内地址W)
转换步骤:
1. 从逻辑地址中提取段号S和段内地址W
2. 以S为索引查段表,获取该段的基址B和段长L
3. 若 W ≥ L,触发越界中断(地址越界保护)
4. 物理地址 = B + W

段式地址转换可以类比“图书馆找书”,段号是书架编号(定位书架),段内地址是书架上的第几本书,先找到书架位置,再加上偏移即可定位具体书籍。
4. 与页式存储的核心区别
| 比较维度 | 页式存储 | 段式存储 |
|---|---|---|
| 划分依据 | 物理等长划分,用户不可见 | 逻辑意义划分,用户可见 |
| 地址维度 | 一维线性地址 | 二维地址(段号+段内偏移) |
| 单元大小 | 固定(如4KB) | 可变(由逻辑信息长度决定) |
| 核心目的 | 提高内存利用率,消除外部碎片 | 方便编程、共享与保护 |
| 碎片问题 | 内部碎片(最后一页平均浪费半页) | 外部碎片(段长不等导致内存间隙) |
页式存储对用户透明,追求内存利用效率;段式存储面向用户逻辑,追求编程便利性。
三、段的共享与保护
1. 段的共享
段式存储的显著优势是便于共享。多个进程可以将各自的段表项指向内存中同一个段的基址,即可共享该段代码或数据。
- 可重入代码共享:纯代码段(执行中不修改自身)可被多个进程同时执行,只需在各自段表中指向同一物理段。
- 数据段共享:进程间通信可通过共享数据段实现。

2. 段的保护
段表项中可增设存取控制字段,实现精细化权限控制:
| 保护类型 | 说明 |
|---|---|
| 越界保护 | 通过段长字段检查段内地址是否合法 |
| 存取权限 | 设置“读/写/执行”权限位,非法操作触发保护中断 |
| 环级保护 | 为段分配特权级别,低特权级代码不能访问高特权级段 |
段的保护机制天然契合程序的逻辑结构,代码段设为只读/可执行,数据段设为可读写,堆栈段限制执行权限。
3. 动态链接支持
段式存储以段为基本单位,天然支持动态链接:程序运行时只装入主程序段,当访问到新模块时再动态装配对应段并链接。 这显著减少了程序启动时的内存占用。
四、优缺点对比
| 优点 | 缺点 |
|---|---|
| 符合用户编程视角:按逻辑意义分段,便于模块化开发和调试 | 存在外部碎片:段长不等导致内存产生无法利用的间隙 |
| 便于共享与保护:以逻辑段为单位设置权限,粒度合理 | 内存分配复杂:需动态管理可变分区,回收时需合并相邻空闲区 |
| 支持动态增长:数据段、堆栈段可动态扩展段长 | 地址转换开销:需段表存储空间和查表访存 |
| 支持动态链接:以段为链接单位,节省内存 | 存在二次访存问题:先查段表再取数据 |
五、练习
题目1:在段式存储管理中,逻辑地址由( )组成。
A. 页号和页内地址
B. 段号和段内地址
C. 基址和限长
D. 段号和页号
答案:B
解析:段式存储管理的逻辑地址是二维的,由段号S和段内地址W组成。页式存储才由页号和页内地址组成。基址和限长是段表项的内容,不是逻辑地址的组成部分。
题目2:某段式存储管理系统中,段表如下表所示。若逻辑地址为(2, 1024),则对应的物理地址是( )。
| 段号 | 基址 | 段长 |
|---|---|---|
| 0 | 2000 | 560 |
| 1 | 3500 | 2048 |
| 2 | 5000 | 1024 |
| 3 | 8000 | 4096 |
A. 6024
B. 5000
C. 越界中断
D. 7024
答案:C
解析:逻辑地址(2, 1024)表示段号为2、段内地址为1024。查段表,段2的段长为1024,有效段内地址范围是0~1023。1024 ≥ 段长,触发越界中断。注意段内地址从0开始编号,段长为N时最大有效地址为N-1。
题目3:下列关于段式存储管理和页式存储管理的比较,正确的是( )。
A. 页是信息的逻辑单位,段是信息的物理单位
B. 页的大小固定,段的大小可变
C. 页式地址是二维的,段式地址是一维的
D. 分段对用户透明,分页对用户可见
答案:B
解析:A错误,页是物理单位,段是逻辑单位;
B正确,页大小由硬件固定,段长由逻辑信息长度决定;
C错误,页式是一维地址,段式是二维地址;
D错误,分页对用户透明,分段对用户可见。
题目4:段式存储管理相较于页式存储管理的主要优势是( )。
A. 无外部碎片,内存利用率高
B. 地址转换速度快
C. 便于段的共享与保护
D. 存储管理简单
答案:C
解析:段式存储以逻辑段为单位,天然便于设置段的共享权限和存取控制;页式以物理页框为单位,与程序逻辑无关,共享和保护粒度不够自然。A是页式的优点(无外部碎片);B页式反而更快(定长计算简单);D段式管理更复杂(需处理可变分区)。
题目5:在段式存储管理系统中,若快表未命中,则访问一个数据需要( )次访存。
A. 1
B. 2
C. 3
D. 4
答案:B
解析:段表存放在内存中,快表未命中时:第一次访存,查段表获取基址;第二次访存,根据物理地址取数据。共2次访存。若快表命中,则省去查段表步骤,只需1次访存(快表是独立硬件,不计入访存次数)。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)