一、定义与本质

  段式存储管理是一种离散分配的内存管理方式,它按照用户作业的逻辑意义将进程地址空间划分为若干段,每段对应一类逻辑信息(如主程序段、子程序段、数据段、堆栈段等),分配时以段为单位离散装入内存的各分区中。

  段式存储的核心思想是面向用户编程结构,打破了“程序必须是单一连续整体”的限制。每段有独立的逻辑意义和长度,段内地址从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次访存(快表是独立硬件,不计入访存次数)。

Logo

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

更多推荐