操作系统存储管理核心知识点与例题详解
一、地址重定位
1. 基本概念
地址重定位是指将逻辑地址转换为物理地址的过程,分为静态重定位和动态重定位。
记忆方法:
- 静态重定位:程序装入时完成,类似"一次性打包"
- 动态重定位:程序执行时完成,类似"实时导航"
2. 例题分析
例题1:若采用动态地址重定位,其地址重定位工作是在( )完成的。
A. 往内存装载进程时刻
B. 执行每一条指令时刻
C. 调度程序选中进程时刻
D. 在内存中移动进程时刻
解答:B
动态重定位在指令执行时由MMU硬件完成,每条指令的地址都需要转换。
二、存储层次体系
1. 程序访问的局部性原理
- 时间局部性:刚被访问的单元可能很快又被访问
- 空间局部性:刚被访问单元附近的单元可能很快被访问
记忆方法:“最近用的,附近用的,还会再用”
2. 例题分析
例题2:提出存储层次体系的主要依据是( )。
A. 程序访问的局部性原理
B. 多道程序设计技术
C. 存储保护技术
D. 虚拟存储技术
解答:A
存储层次(cache-内存-外存)正是基于局部性原理设计的。
三、分页存储管理
1. 页表结构与地址转换
核心公式:
- 页号 = 逻辑地址 / 页面大小
- 页内偏移 = 逻辑地址 % 页面大小
- 物理地址 = 块号 × 页面大小 + 页内偏移
2. 例题分析
例题3:页面大小为1024字节,逻辑地址2148,页表:0→2, 1→3, 2→1, 3→6,求物理地址。
解答:
- 页号 = 2148 / 1024 = 2
- 页内偏移 = 2148 % 1024 = 100
- 块号 = 1
- 物理地址 = 1 × 1024 + 100 = 1124
四、多级页表计算
1. 计算方法
关键步骤:
- 确定页面大小和页内偏移位数
- 计算每页可存放的页表项数
- 确定各级页表索引位数
- 计算虚拟地址空间大小
2. 例题分析
例题4:页面大小4KB,页表项大小4B,三级页表结构,求虚拟地址空间。
解答:
- 页面大小4KB = 2¹²字节 → 页内偏移12位
- 每页页表项数 = 2¹² / 4 = 2¹⁰
- 三级页表索引各10位
- 虚拟地址总位数 = 10 + 10 + 10 + 12 = 42位
- 虚拟地址空间 = 2⁴²字节
五、快表(TLB)
1. 基本概念
- TLB是页表的高速缓存
- 按内容并行查找(相联存储器)
- 位于CPU中,不在内存
2. 有效访问时间计算
公式:EAT = TLB命中率 × (TLB访问时间 + 内存访问时间) + (1 - TLB命中率) × (TLB访问时间 + 2 × 内存访问时间)
3. 例题分析
例题5:内存访问时间200ns,TLB命中率75%,TLB查找时间0,求有效访问时间。
解答:
EAT = 0.75 × 200 + 0.25 × 400 = 150 + 100 = 250ns
六、动态分区分配算法
1. 常见算法
- 首次适应:按地址顺序查找
- 最佳适应:按空闲区大小递增排列
- 最坏适应:按空闲区大小递减排列
2. 例题分析
例题6:主存55MB,最佳适应算法,操作序列:分配15MB、30MB,释放15MB,分配8MB、6MB,求最大空闲分区。
解答:
通过模拟分配过程,最终得到最大空闲分区为9MB。
七、段页式存储管理
1. 地址转换过程
- 查段表得页表起始地址
- 查页表得物理块号
- 访问物理内存
至少需要3次内存访问(无TLB时)
2. 记忆方法
“段找页,页找块,三次访问才到位”
八、碎片问题
1. 碎片类型
- 内碎片:分配单元内部未使用的空间
- 外碎片:各分配单元之间无法利用的小空间
2. 紧缩技术
- 解决外碎片问题
- 需要移动进程,增加开销
- 不能解决内碎片问题
总结表格
知识点 | 关键概念 | 记忆技巧 | 典型例题 |
---|---|---|---|
地址重定位 | 静态vs动态 | 装定时vs执行时 | 例题1 |
局部性原理 | 时间+空间局部性 | “最近用的还会用” | 例题2 |
页式管理 | 页表映射 | “页号找块号,偏移直接搬” | 例题3 |
多级页表 | 分级索引 | “大表拆小表,分级来管理” | 例题4 |
TLB | 快表加速 | “页表缓存,并行查找” | 例题5 |
分区分配 | 最佳/首次适应 | “小对小,大对大” | 例题6 |
段页式 | 段+页结合 | “先分段,再分页” | 正文说明 |