存储器管理:高效利用内存资源的核心机制
存储器管理是操作系统的核心功能之一,其核心目标是合理分配、管理和回收内存资源,确保多个程序能够高效、安全地共享有限的内存空间。以下从核心目标、关键技术及优化策略三个维度展开详细说明:
存储器管理的核心目标
存储器管理需同时满足三个关键需求:
- 内存充足性:确保系统有足够的内存处理当前运行的程序及数据,避免因内存不足导致程序无法执行。
- 内存分配合理性:为每个程序分配独立的内存区域,避免地址冲突,保证程序正常运行。
- 内存可回收性:程序运行结束后,及时回收其占用的内存,供其他程序使用,提高内存利用率。
主流内存分配技术
为解决连续分配方式导致的 “内存碎片” 问题,操作系统发展出多种离散分配技术,核心包括分页、分段及段页式存储管理。
1. 分页存储管理
分页是将内存 “化整为零” 的离散分配方式,通过固定大小的 “页” 实现内存高效利用。
- 核心原理:
- 将进程的逻辑地址空间划分为大小相等的页(如 4KB),每个页有唯一页号。
- 将物理内存划分为与页大小相同的物理块(又称页帧),物理块号作为内存地址的标识。
- 以页为单位将进程加载到离散的物理块中,通过页表记录页与物理块的映射关系。
- 地址结构:
逻辑地址由 “页号 + 页内偏移量” 组成。例如 32 位系统中,若页大小为 4KB(2¹²),则低 12 位为页内偏移量(确定页内具体位置),高 20 位为页号(最多支持 1M 个页)。
物理地址由 “页帧号 + 页内偏移量” 组成,通过页表查询页号对应的页帧号,即可拼接出实际物理地址。
- 页表的作用:
每个进程对应一张页表,存储 “页号→物理块号” 的映射关系,是逻辑地址到物理地址转换的关键。页表通常存放在内存中,进程执行时通过硬件(如地址转换机构)快速查询。 - 优缺点:
- 优点:内存利用率高(碎片小,仅存在页内碎片),分配与管理简单。
- 缺点:增加系统开销(页表占用内存);可能产生 “抖动”(频繁的页面调入调出)。
2. 段式存储管理
分段是基于 “逻辑功能” 的离散分配方式,更贴合用户对程序的逻辑划分。
- 核心原理:
将用户程序的逻辑地址空间划分为大小不等的段(如代码段、数据段、堆栈段),每段代表一组相对完整的逻辑信息(如一个函数、一个数据结构)。内存分配以段为单位,段与段在内存中可离散存储。 - 段表的作用:
与分页类似,段式存储通过段表记录映射关系,但段表条目包含 “段号、基址(段在内存的起始地址)、段长(段的大小)”。由于段大小可变,段长字段用于检查地址是否越界(避免访问其他段的内存)。 - 优缺点:
- 优点:便于程序共享(如多个进程共享代码段),段内修改不影响其他段,符合用户逻辑。
- 缺点:内存利用率低(易产生段间碎片),碎片整合开销大。
3. 段页式存储管理
结合分页和分段的优点,兼顾逻辑划分与内存高效利用。
- 核心原理:
- 先将逻辑空间分为若干逻辑段(如分段),每段有独立段号。
- 再将每个段划分为大小相等的页(如分页),物理内存仍以页为单位分配。
- 地址结构:
32 位系统中,地址由 “段号 + 页号 + 页内偏移量” 组成。例如,段号占 8 位(最多 256 个段),页号占 12 位(每段最多 4096 页),页内偏移量占 12 位(页大小 4KB)。
- 优缺点:
- 优点:空间浪费小(无大碎片)、共享与保护容易(基于段)、支持动态连接。
- 缺点:管理复杂(需段表和页表两级映射),系统开销大(硬件和内存占用增加),执行速度下降。
页面置换算法:解决内存不足的关键
当程序需要访问的页面不在内存(缺页)时,需从外存调入页面,若内存已满,则需淘汰部分页面,这一过程由页面置换算法决定。
页面淘汰的基本原则
根据程序的局部性原理(最近被访问的页面未来更可能被访问),淘汰策略遵循:
- 优先淘汰未被访问的页面(访问位为 0)。
- 若都被访问过,优先淘汰未修改的页面(修改位为 0,无需写回外存,开销小)。
常见页面置换算法
| 算法名称 | 核心逻辑 | 特点 |
|---|---|---|
| 最优算法(OPT) | 淘汰未来最长时间不被访问的页面 | 理论最优,但无法实现(需预知未来访问序列),作为其他算法的评价基准。 |
| 随机算法(RAND) | 随机选择页面淘汰 | 简单但效率低,可能淘汰常用页面,导致频繁缺页。 |
| 先进先出(FIFO) | 淘汰最早进入内存的页面 | 实现简单,但可能淘汰常用页面,产生 “Belady 异常”(内存增大,缺页率反而上升)。 |
| 最近最少使用(LRU) | 淘汰最近一段时间内使用最少的页面 | 符合局部性原理,缺页率低,无抖动,但需记录访问时间,实现复杂度高(硬件支持)。 |


v1.3.10