上一篇
分页存储管理算法模拟
- 行业动态
- 2025-05-04
- 3
分页存储管理将进程划分为固定大小的页,通过页表映射逻辑地址到物理帧,模拟时需处理地址转换及缺页中断,采用页面替换算法优化内存使用
分页存储管理算法模拟详解
分页存储管理是操作系统内存管理的核心机制之一,通过将逻辑地址划分为固定大小的页(Page),并将物理内存划分为相同大小的页框(Frame),实现逻辑地址到物理地址的映射,本文将详细模拟分页存储管理算法的工作流程,重点分析页面置换算法的实现与性能差异。
分页存储管理基础
逻辑地址与物理地址
- 逻辑地址由页号(Page Number)和页内偏移量(Offset)组成,例如逻辑地址
0x03A4
可拆分为:- 页号 =
0x03
(假设页大小为1KB,即偏移量占低10位)。 - 偏移量 =
0xA4
。
- 页号 =
- 物理地址通过页表映射后生成,格式为:
物理页框号 + 偏移量
。
- 逻辑地址由页号(Page Number)和页内偏移量(Offset)组成,例如逻辑地址
页表(Page Table)
- 页表是存储逻辑页号到物理页框号映射的数据结构,每个页表项(PTE)包含:
- 有效位(Valid):标记页是否在内存中。
- 修改位(Dirty):标记页是否被修改过。
- 引用位(Referenced):标记页是否被访问过。
- 物理页框号(Frame Number):实际存储该页的物理内存位置。
- 页表是存储逻辑页号到物理页框号映射的数据结构,每个页表项(PTE)包含:
页面置换算法模拟
当内存已满且需要加载新页时,操作系统需选择一个页替换出去,以下是三种经典算法的模拟流程:
算法 | 核心思想 | 模拟步骤 |
---|---|---|
FIFO | 替换最早进入内存的页 | 维护队列记录页的加载顺序。 替换队首页。 |
LRU | 替换最近最久未使用的页 | 维护计数器记录页的最后一次访问时间。 替换时间最小的页。 |
OPT | 替换未来最长时间不被访问的页 | 预读页面访问序列。 选择未来最晚出现的页。 |
模拟示例
假设:
- 物理内存容量为 3页框(可加载3页)。
- 页面访问序列为
[7, 0, 1, 2, 3, 0, 4, 2, 3, 0]
。 - 页号从0开始,页大小为1KB(偏移量忽略)。
FIFO算法模拟
步骤 | 访问页 | 页表状态 | 缺页? | 缺页次数 |
---|---|---|---|---|
1 | 7 | [7, -, -] | 是 | 1 |
2 | 0 | [7, 0, -] | 是 | 2 |
3 | 1 | [7, 0, 1] | 是 | 3 |
4 | 2 | [2, 0, 1] | 是 | 4 |
5 | 3 | [2, 0, 3] | 是 | 5 |
6 | 0 | [2, 0, 3] | 否 | 5 |
7 | 4 | [4, 0, 3] | 是 | 6 |
8 | 2 | [4, 0, 2] | 是 | 7 |
9 | 3 | [4, 0, 3] | 否 | 7 |
10 | 0 | [4, 0, 3] | 否 | 7 |
FIFO缺页率:7/10 = 70%
LRU算法模拟
步骤 | 访问页 | 页表状态 | 缺页? | 缺页次数 |
---|---|---|---|---|
1 | 7 | [7, -, -] | 是 | 1 |
2 | 0 | [7, 0, -] | 是 | 2 |
3 | 1 | [7, 0, 1] | 是 | 3 |
4 | 2 | [2, 0, 1] | 是 | 4 |
5 | 3 | [2, 0, 3] | 是 | 5 |
6 | 0 | [2, 0, 3] | 否 | 5 |
7 | 4 | [4, 0, 3] | 是 | 6 |
8 | 2 | [4, 0, 2] | 是 | 7 |
9 | 3 | [4, 0, 3] | 否 | 7 |
10 | 0 | [4, 0, 3] | 否 | 7 |
LRU缺页率:7/10 = 70%(与FIFO相同,但实际场景中LRU通常更优)
OPT算法模拟
步骤 | 访问页 | 页表状态 | 缺页? | 缺页次数 |
---|---|---|---|---|
1 | 7 | [7, -, -] | 是 | 1 |
2 | 0 | [7, 0, -] | 是 | 2 |
3 | 1 | [7, 0, 1] | 是 | 3 |
4 | 2 | [2, 0, 1] | 是 | 4 |
5 | 3 | [2, 3, 1] | 是 | 5 |
6 | 0 | [2, 3, 0] | 否 | 5 |
7 | 4 | [4, 3, 0] | 是 | 6 |
8 | 2 | [4, 3, 2] | 是 | 7 |
9 | 3 | [4, 3, 2] | 否 | 7 |
10 | 0 | [4, 3, 0] | 否 | 7 |
OPT缺页率:7/10 = 70%(理论上最优,但需预知未来访问序列)
算法性能对比
算法 | 缺页次数 | 优点 | 缺点 |
---|---|---|---|
FIFO | 7 | 实现简单,无需额外数据结构 | 可能替换常用页,性能较差 |
LRU | 7 | 更符合实际访问模式 | 需要维护时间戳或栈,开销较大 |
OPT | 7 | 理论上最优缺页率 | 需预知未来访问序列,无法实用 |
FAQs
问题1:为什么OPT算法在实际中无法使用?
答:OPT算法需要预知未来的页面访问序列,而操作系统无法提前知道程序的执行流程,因此仅用于理论分析。
问题2:分页存储管理中,页表项(PTE)的大小如何计算?
答:页表项的大小取决于字段设计。
- 有效位(1位) + 修改位(1位) + 引用位(1位) + 物理页框号(假设8位) = 11位。
实际系统中可能包含更多字段(如权限位、缓存禁用位等),典型PTE大小为32位