内存超载处理策略:交换(Swapping)与虚拟内存(Virtual Memory)
目录
内存超载处理策略:交换(Swapping)与虚拟内存(Virtual Memory)详解
1. 交换(Swapping)技术
(1)基本思想
- 定义:将 整个进程 从内存换出到磁盘(Swap分区),需要时再换入内存。
- 适用场景:早期操作系统(如Unix),适用于 内存严重不足 的情况。
(2)工作流程
- 换出(Swap Out):
- 当内存不足时,OS选择一个 空闲/低优先级进程,将其 完整的内存映像 保存到磁盘Swap分区。
- 释放该进程占用的所有物理内存。
- 换入(Swap In):
- 当进程被重新调度时,OS从磁盘重新加载其内存映像到物理内存。
(3)优缺点
优点 | 缺点 |
---|---|
1. 实现简单,无需复杂硬件支持 2. 可缓解短期内存压力 |
1. 性能开销大(整个进程换入/换出,磁盘I/O慢) 2. 进程响应延迟(换入耗时) 3. 不适用部分加载(必须完整换入) |
(4)现代系统的改进
- 部分交换:结合虚拟内存,仅换出非活跃内存页(如Linux的Swap机制)。
- Swap分区优化:使用SSD加速交换(但仍慢于物理内存)。
2. 虚拟内存(Virtual Memory)
(1)基本思想
- 定义:允许进程 部分驻留内存,其余部分保留在磁盘,按需动态加载。
- 核心机制:
- 分页(Paging):将内存划分为固定大小的页(如4KB),物理内存和磁盘(Swap/文件)统一管理。
- 按需调页(Demand Paging):仅加载进程当前需要的页,其余留在磁盘。
(2)关键技术与流程
- 页表与缺页异常:
- 进程访问的虚拟地址若未映射到物理内存(页表项无效),触发 缺页异常(Page Fault)。
- OS处理流程:
a) 检查访问合法性(非法则终止进程)。
b) 从磁盘(Swap或文件)加载缺失页到内存。
c) 更新页表,重新执行指令。
- 页面置换算法:
- 当物理内存不足时,选择牺牲页换出(如 LRU、FIFO、Clock算法)。
(3)优缺点
优点 | 缺点 |
---|---|
1. 更高内存利用率(多进程共享物理内存) 2. 支持大地址空间(超越物理内存限制) 3. 响应更快(局部性原理,减少I/O) |
1. 实现复杂(需硬件MMU支持) 2. 缺页开销(频繁缺页降低性能) 3. 外部碎片(Swap分区管理) |
(4)现代优化技术
- 写时复制(Copy-on-Write, COW):
fork()
时子进程共享父进程页,写入时再复制。 - 预取(Prefetching):预测进程将访问的页,提前加载。
- 内存压缩(Zswap):压缩冷内存页,减少Swap I/O。
3. 交换 vs. 虚拟内存对比
维度 | 交换(Swapping) | 虚拟内存(Virtual Memory) |
---|---|---|
粒度 | 整个进程 | 单个内存页(如4KB) |
灵活性 | 低(必须完整换入) | 高(按需加载) |
性能 | 差(全进程I/O) | 较好(局部性优化) |
适用场景 | 早期系统、嵌入式OS | 现代通用操作系统(Linux/Windows) |
结论:虚拟内存是更优解,交换技术逐渐被融合为虚拟内存的补充(如Swap分区)。
4. 常见问题与回答
(1)简答题:交换和虚拟内存的区别?
答:
- 粒度不同:交换以 整个进程 为单位,虚拟内存以 页 为单位。
- 灵活性:虚拟内存支持 部分加载,交换必须完整换入。
- 性能:虚拟内存利用 局部性原理,减少I/O次数;交换的磁盘开销大。
- 现代应用:交换技术融入虚拟内存(如Linux的Swap),作为内存不足时的后备机制。
(2)综合题:缺页异常的处理流程?
答:
- CPU访问虚拟地址,MMU查页表发现该页不在内存(页表项无效)。
- 触发缺页异常,CPU陷入内核态,OS处理异常。
- OS检查访问合法性(非法则终止进程)。
- 分配物理页帧:若内存不足,调用页面置换算法(如LRU)换出旧页。
- 从磁盘加载数据:
- 若页在Swap分区,从Swap读取。
- 若页属于内存映射文件(如
mmap
),从文件读取。
- 更新页表,重新执行触发缺页的指令。
(3)计算题:估算Swap分区大小
问题:某系统物理内存4GB,建议Swap分区大小?
答:
- 传统规则:Swap大小 = 物理内存 × 1.52(即68GB)。
- 现代建议(若内存充足):
- 内存 ≤ 4GB:Swap = 2 × 内存。
- 内存 > 4GB:Swap = 4GB(仅休眠和应急使用)。
- 特殊场景:服务器可禁用Swap(依赖NUMA/OOM Killer)。
5. 扩展知识点
(1)Swap分区的替代方案
- Zswap:压缩冷内存页,减少Swap I/O(Linux内核支持)。
- Swap文件:动态调整大小(优于固定分区)。
(2)虚拟内存的极端情况
- 抖动(Thrashing):频繁缺页导致系统忙于换页,CPU利用率骤降。
- 解决方案:调整进程数,优化置换算法,增加物理内存。
(3)嵌入式系统的特殊处理
- 无虚拟内存:实时系统(如FreeRTOS)禁用虚拟内存,避免不确定性。
- 微Swap:仅换出部分数据段(如uClinux)。
总结
- 交换技术:简单但低效,适合内存极度受限的场景。
- 虚拟内存:现代OS核心机制,平衡性能与内存利用率。
- 考点关联:缺页处理、页面置换、Swap管理、
fork()
的COW等均需掌握。 - 趋势:虚拟内存持续优化(如内存压缩、预取),交换技术逐渐边缘化。
Do not communicate by sharing memory; instead, share memory by communicating.