文章目录
一、前言
虚拟存储器(Virtual Memory)使得程序运行时不需要将所有代码和数据全部加载到内存中。请求分页存储管理(Demand Paging)是一种常见的虚拟存储器管理方式,它能够显著提升内存利用率,并支持多任务并发执行。
二、请求分页存储管理概述
1. 什么是分页存储管理?
分页存储管理是一种将物理内存划分为固定大小的页框(Frame),将程序逻辑地址空间划分为等大小的页(Page)的存储管理方式。虚拟地址由页号和页内偏移量组成:
- 虚拟地址格式:
[页号][页内偏移量]
- 物理地址格式:
[页框号][页内偏移量]
2. 请求分页存储管理的特点
请求分页存储管理采用按需加载的方式运行程序:
- 按需加载:在程序执行时,仅在需要访问某个页面时才将该页加载到物理内存中。
- 页表:用于维护虚拟页与物理页框之间的映射关系。
- 缺页异常:当程序访问的页不在内存中时,触发缺页异常,操作系统将该页加载到内存中。
三、请求分页存储管理的工作原理
1. 请求分页的内存访问过程
在请求分页存储管理方式下,程序运行时的内存访问过程如下:
- CPU生成虚拟地址
- 将虚拟地址分解为页号和页内偏移量。
- 查页表
- 页表记录了虚拟页与物理页框之间的映射关系。
- 若虚拟页已加载到内存中,则获取对应的物理地址。
- 若未加载,则产生缺页异常。
- 处理缺页异常
- 操作系统从外存读取目标页,将其加载到物理内存。
- 若内存已满,则需要执行页面置换。
- 访问物理地址
- 将数据从物理内存中读取,并返回给 CPU。
✅ 示例图:请求分页存储管理过程
虚拟地址 (VA) → [页号] + [页内偏移量]
↓
页表查找
↓
【命中】 → 转换为物理地址,读取数据
【缺页】 → 产生缺页异常,加载页面,更新页表
四、页面置换算法
在请求分页存储管理中,当内存已满且出现缺页异常时,操作系统需要将旧的页面换出,将新的页面加载到内存中。这一过程称为页面置换。以下是几种常见的页面置换算法:
1. FIFO(先进先出算法)
- 算法思路:按照页面进入内存的顺序进行置换,最早进入的页面最先被淘汰。
- 优点:实现简单。
- 缺点:可能会淘汰频繁使用的页面,导致性能下降(Belady现象)。
✅ 示例
页面序列:1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
内存大小:3页框
置换顺序:1 → 2 → 3 → (淘汰1) → 4 → (淘汰2) → 5 → ...
2. LRU(最近最少使用算法)
- 算法思路:淘汰最近最少被访问的页面。
- 优点:性能较好,接近最优算法。
- 缺点:实现复杂,需维护页面访问时间。
✅ 示例
页面序列:1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
内存大小:3页框
置换顺序:1 → 2 → 3 → (淘汰1) → 4 → (淘汰2) → 5 → ...
3. OPT(最优置换算法)
- 算法思路:选择未来最长时间不会被访问的页面进行置换。
- 优点:理论上性能最佳。
- 缺点:无法实现,因为程序运行过程中无法预知未来。
✅ 示例
页面序列:1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
内存大小:3页框
置换顺序:1 → 2 → 3 → (淘汰4) → 1 → (淘汰2) → 5 → ...
五、请求分页存储管理的优缺点
1. 优点
- 提高内存利用率:只加载实际需要的页面,减少内存浪费。
- 支持多任务并发:多个程序可共享内存,充分利用资源。
- 减少程序加载时间:按需加载避免了一次性将全部程序装入内存。
2. 缺点
- 缺页异常影响性能:频繁缺页会导致大量磁盘I/O操作,影响性能。
- 页面置换开销大:频繁置换可能增加CPU与磁盘的负担。
- 地址转换开销:虚拟地址到物理地址的映射存在一定的转换成本。
六、应用场景
- 多任务操作系统:如 Linux 和 Windows,通过请求分页管理内存,支持多个程序并发执行。
- 数据库管理系统(DBMS):使用分页存储管理进行数据的按需加载,提高内存利用率。
- 嵌入式设备:通过分页存储机制减少内存占用,优化资源使用。
七、总结
请求分页存储管理是操作系统中广泛使用的一种虚拟存储器管理方式,它采用按需加载的策略,能够显著提高内存利用率和多任务并发性能。然而,频繁的缺页异常和页面置换会带来性能损耗。