【操作系统】段式存储管理与段页式存储管理

考点频率 :★★★★☆(选择题常考,与页式存储对比出现)

难度 :⭐⭐⭐

建议:重点掌握段式与页式的核心区别,理解段页式如何结合两者优点

1️⃣ 为什么页式存储还不够?

页式存储解决了外部碎片问题,但它有一个明显的不足:页与程序的逻辑结构无关。一个程序被机械地切分成固定大小的页,导致:

  • 代码段、数据段、堆栈段可能混杂在不同页中
  • 多个进程共享同一段代码(如共享库)变得困难
  • 无法实现不同段的独立保护(如代码段只读、数据段读写)

为了解决这些问题,出现了段式存储管理 ,以及综合两者优点的段页式存储管理

段式存储可以理解为:程序是一个"文档",文档有章节(段),每个章节有标题和正文(段内内容),段之间不要求连续存放。段页式则是:先把文档按章节分成章,再把每章的内容按固定大小的页码分页印刷。

2️⃣ 段式存储管理

2.1 核心思想

将程序按逻辑结构 划分为若干个段(Segment),如:

段名 内容
代码段(Code Segment) 存放程序的指令,只读
数据段(Data Segment) 存放全局变量、静态变量
堆栈段(Stack Segment) 存放函数调用栈、局部变量
共享段 可被多个进程共享的代码或数据(如动态链接库)

每个段是一个完整的逻辑单元,大小可变,从程序逻辑角度自然划分,不受固定大小的限制。

地址结构:逻辑地址 = 段号 + 段内偏移

段表:每个段在段表中记录:

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

2.2 地址转换流程

复制代码
程序给出逻辑地址(段号 + 偏移)
    ↓
根据段号查找段表 → 得到该段的基址和段长
    ↓
检查偏移是否 < 段长(越界检查)
    ↓
  合法 → 物理地址 = 基址 + 偏移
    ↓
  非法 → 触发越界中断

2.3 优缺点

优点 缺点
反映程序逻辑结构,便于理解和维护 产生外部碎片(段长度不等,分配和释放后留下零散空隙)
便于共享和保护(按段设置读写权限) 内存分配算法复杂(需寻找合适大小的连续空间)
段内连续,段间可以不连续 段表占用存储空间

3️⃣ 段页式存储管理

3.1 为什么需要段页式?

段式和页式各有优缺点:

存储方式 优点 缺点
页式 无外部碎片,内存利用率高 不反映逻辑结构,共享/保护困难
段式 反映逻辑结构,便于共享/保护 有外部碎片,分配算法复杂

段页式就是结合两者优点:先按逻辑结构分段,再将每个段按页划分

3.2 核心思想

  1. 将程序按逻辑结构划分为若干个(如代码段、数据段等)
  2. 将每个段再划分为固定大小的
  3. 物理内存按页框管理(与页式相同)

地址结构:逻辑地址 = 段号 + 段内页号 + 页内偏移

3.3 数据结构

段页式需要两级表

作用
段表 记录每个段的页表起始地址页表长度
页表 记录段内每个页对应的物理页框号(每个段有自己的页表)

关键区别:段式存储的段表指向的是物理内存基址 ;段页式存储的段表指向的是页表基址,页表再指向物理页框。

3.4 地址转换流程(两次查表)

复制代码
程序给出逻辑地址(段号 + 段内页号 + 偏移)
    ↓
根据段号查找段表 → 得到该段的页表起始地址和页表长度
    ↓
检查段内页号是否 < 页表长度(越界检查)
    ↓
用段内页号查找页表 → 得到物理页框号
    ↓
物理地址 = 页框号 × 页大小 + 页内偏移

3.5 优缺点

优点 缺点
同时具有段式的逻辑性和页式的无外碎片 两次查表,地址转换速度较慢(两次内存访问)
便于共享和保护(在段级设置) 增加了页表,存储开销较大
无外部碎片 数据结构更复杂,管理难度高

4️⃣ 三种存储方式对比表(重点)

对比项 页式存储 段式存储 段页式存储
划分依据 固定大小(机械划分) 逻辑结构(代码/数据/堆栈) 先逻辑分段,再固定分页
地址结构 页号 + 偏移 段号 + 偏移 段号 + 页号 + 偏移
用户视角 一维地址空间 二维地址空间 二维地址空间
表结构 页表(页号→页框号) 段表(段号→基址+段长) 段表 + 每个段有页表
内部碎片 有(最后一页) 有(段内最后一页)
外部碎片
共享与保护 困难 容易(段级) 容易(段级)
地址转换速度 快(一次查表) 较快(一次查表+越界检查) 慢(两次查表)
典型应用 现代OS(如Linux) 早期OS 某些Unix变种(如Intel x86)

5️⃣ 经典例题

例题1:在段页式存储管理中,逻辑地址由( )三部分组成。

A. 段号、页号、偏移量

B. 页号、段号、偏移量

C. 段号、页框号、偏移量

D. 段号、页表起始地址、偏移量

解析 :段页式的逻辑地址结构为:段号 + 段内页号 + 页内偏移。选 A


例题2:以下关于段式存储管理的叙述中,正确的是( )。

A. 段式存储不会产生外部碎片

B. 段式存储的地址转换不需要检查越界

C. 段式存储便于程序段的共享和保护

D. 段式存储的段大小固定不变

解析 :A错误(段式有外部碎片);B错误(需要检查偏移是否超过段长);D错误(段大小可变)。选 C


例题3:某系统采用段页式存储管理,一个程序的段表项指向的是( )。

A. 物理页框号

B. 该段在内存中的基址

C. 该段的页表起始地址

D. 该段的长度

解析 :段页式中,段表项指向的是该段的页表起始地址 (不是物理基址)。页表才记录页框号。选 C

6️⃣ 易错点

易错点 正确理解
段页式不需要段表 段页式需要段表(指向页表),也需要页表(指向页框)
段页式的地址转换比页式快 段页式需要两次查表,比页式慢(除非有快表)
段式存储没有越界检查 段式存储需要越界检查(偏移必须小于段长)
页式存储反映程序逻辑 页式不反映逻辑,段式才反映逻辑

7️⃣ 记忆口诀

页式机械分页框,段式逻辑分章节。

段页结合两表查,逻辑共享+无外碎。

段式基址+段长,段页段表指页表。

8️⃣ 小测验(评论区对答案)

以下关于存储管理方式的叙述中,错误的是( )。

A. 页式存储管理会产生内部碎片,但不会产生外部碎片

B. 段式存储管理会产生外部碎片,但不会产生内部碎片

C. 段页式存储管理会产生内部碎片,但不会产生外部碎片

D. 段页式存储管理的地址转换只需要一次查表

🔔 本专栏日更2篇,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容

#软考中级 #软件设计师 #段式存储 #段页式存储 #存储管理 #操作系统

相关推荐
半导体守望者3 小时前
MKS C系列MFC CMA10 CMA50快速紧凑型手侧与PC联网教程软件驱动USB
经验分享·笔记·功能测试·自动化·制造
小c君tt4 小时前
QT笔记记录
开发语言·笔记·qt
2601_962440844 小时前
计算机毕业设计之jsp教室管理系统
java·开发语言·笔记·分布式·算法·课程设计·推荐算法
十月的皮皮8 小时前
C语言学习笔记20260703-牛牛与后缀表达式(逆波兰表达式)
c语言·笔记·学习
RainCity5 天前
Java Swing 自定义组件库分享(十二)
java·笔记·后端
LinXunFeng13 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
闪闪发亮的小星星17 天前
高斯光以及高斯光公式解释
笔记
cqbzcsq17 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息
阿米亚波17 天前
【Windows】QEMU 启动 openEuler aarch64/arm64 架构系统 + 离线软件源
linux·windows·经验分享·笔记·架构·arm