在操作系统中,存储管理是非常重要的核心功能之一。操作系统需要对内存进行合理分配和管理,使多个进程能够高效、安全地共享系统资源。
在软考高级系统架构设计师考试中,存储管理是计算机系统基础的重要考点,经常出现在:
-
综合知识选择题
-
地址转换计算题
-
存储结构分析题
常见考察内容包括:
-
页式存储管理
-
段式存储管理
-
段页式存储管理
-
地址转换过程
-
快表(TLB)
-
页面大小与地址结构计算
本文将系统讲解这些知识点,并结合典型例题进行说明。
一、存储管理的基本概念
在计算机系统中,内存是CPU直接访问的存储空间。
如果多个程序同时运行,就需要操作系统负责:
-
内存分配
-
地址转换
-
内存保护
-
内存共享
程序在编译后产生的地址称为:
逻辑地址(Logical Address)
而内存中的真实地址称为:
物理地址(Physical Address)
操作系统需要通过地址映射机制实现:
逻辑地址 → 物理地址
为了解决内存利用率低和碎片问题,操作系统提出了多种存储管理方式。
常见的存储管理方式包括:
-
页式存储
-
段式存储
-
段页式存储
二、页式存储管理
1 页式存储的基本思想
**页式存储管理(Paging)**将:
-
逻辑地址空间划分为固定大小的页(Page)
-
物理内存划分为相同大小的页框(Frame)
例如:
页大小 = 4KB
那么:
-
程序被划分为多个页
-
内存被划分为多个页框
每一页可以存放在任意页框中。
因此:
页大小 = 页框大小
这样可以避免外部碎片问题。
2 页表
为了记录页与页框之间的映射关系,操作系统使用:
页表(Page Table)
页表中记录:
页号 → 页框号
例如:
| 页号 | 页框号 |
|---|---|
| 0 | 5 |
| 1 | 2 |
| 2 | 8 |
3 地址结构
在页式存储中,逻辑地址通常由两部分组成:
页号 + 页内地址
例如:
假设:
页面大小 = 4KB
逻辑地址长度 = 16位
则:
页内地址 = 12位
页号 = 4位
因为:
2^12 = 4096 = 4KB
4 地址转换过程
地址转换步骤:
-
从逻辑地址中取出页号
-
根据页号查页表
-
找到对应页框号
-
页框号 + 页内地址 → 物理地址
三、页式存储计算例题
例题
某系统:
页面大小 = 1KB
逻辑地址 = 5000
页表如下:
| 页号 | 页框号 |
|---|---|
| 0 | 3 |
| 1 | 6 |
| 2 | 4 |
| 3 | 7 |
| 4 | 2 |
求物理地址。
解题步骤
第一步:计算页号
页号 = 5000 / 1024
页号 = 4
第二步:计算页内地址
页内地址 = 5000 % 1024
页内地址 = 904
第三步:查页表
页号4 → 页框2
第四步:计算物理地址
物理地址 = 页框号 × 页面大小 + 页内地址
= 2 × 1024 + 904
= 2952
因此:
物理地址 = 2952
四、快表(TLB)
在页式存储中,每次访问内存都需要:
-
查页表
-
再访问内存
因此会产生:
两次内存访问
为了提高效率,操作系统引入:
快表(TLB:Translation Lookaside Buffer)
快表是一种高速缓存,用于存储最近使用的页表项。
访问流程变为:
逻辑地址 → 查TLB
↓
命中
↓
直接得到页框号
如果TLB未命中:
查页表 → 更新TLB
快表访问时间例题
例题
已知:
TLB命中率 = 90%
TLB访问时间 = 10ns
内存访问时间 = 100ns
求有效访问时间。
计算过程
TLB命中:
10 + 100 = 110ns
TLB未命中:
10 + 100 + 100 = 210ns
有效访问时间:
EAT = 0.9 × 110 + 0.1 × 210
EAT = 99 + 21
EAT = 120ns
五、段式存储管理
1 段式存储思想
**段式存储管理(Segmentation)**按照程序的逻辑结构进行划分。
例如程序可以划分为:
-
代码段
-
数据段
-
栈段
-
堆段
因此:
每个段大小可以不同
这就是段式存储与页式存储的主要区别。
2 地址结构
段式存储逻辑地址结构:
段号 + 段内地址
系统使用:
段表(Segment Table)
段表记录:
段号 → 段基址 + 段长度
3 地址转换过程
步骤:
-
根据段号查段表
-
得到段基址
-
判断段内地址是否越界
-
物理地址 = 段基址 + 段内地址
六、段式存储例题
例题
某系统段表如下:
| 段号 | 段基址 | 段长度 |
|---|---|---|
| 0 | 200 | 500 |
| 1 | 800 | 300 |
| 2 | 1200 | 400 |
逻辑地址:
(1, 120)
求物理地址。
解题过程
段号:
1
查段表:
段基址 = 800
判断越界:
120 < 300
未越界。
计算物理地址:
物理地址 = 800 + 120
= 920
七、段页式存储管理
1 段页式思想
段页式存储是:
段式 + 页式
结合两者优点:
-
段式:符合程序逻辑结构
-
页式:解决内存碎片问题
结构:
程序 → 段
段 → 页
页 → 页框
2 地址结构
逻辑地址:
段号 + 页号 + 页内地址
地址转换步骤:
-
查段表得到页表地址
-
根据页号查页表
-
得到页框号
-
计算物理地址
八、段页式地址转换例题
例题
某系统:
页大小 = 1KB
逻辑地址:(段2,页1,偏移100)
段表:
| 段号 | 页表地址 |
|---|---|
| 0 | PT0 |
| 1 | PT1 |
| 2 | PT2 |
页表 PT2:
| 页号 | 页框号 |
|---|---|
| 0 | 3 |
| 1 | 5 |
| 2 | 8 |
解题过程
第一步:查段表
段2 → 页表 PT2
第二步:查页表
页1 → 页框5
第三步:计算物理地址
物理地址 = 5 × 1024 + 100
= 5120 + 100
= 5220
九、页式与段式的区别
| 对比 | 页式存储 | 段式存储 |
|---|---|---|
| 划分方式 | 固定大小 | 不固定 |
| 划分依据 | 系统 | 程序逻辑 |
| 地址结构 | 页号+页内地址 | 段号+段内地址 |
| 碎片 | 内部碎片 | 外部碎片 |
十、软考高频考点总结
在软考高级系统架构设计师考试中,存储管理重点包括:
页式存储:
-
页号计算
-
页内地址计算
-
页表查找
快表:
-
TLB命中率计算
-
有效访问时间
段式存储:
-
段表
-
段基址计算
段页式:
- 地址转换流程
十一、总结
存储管理是操作系统的重要组成部分,也是软考高级系统架构设计师考试中的高频考点。
本文重点讲解了:
-
页式存储管理
-
段式存储管理
-
段页式存储管理
-
快表(TLB)
-
地址转换计算