内存交换
内存交换/页替换,为了实现内存超配,操作系统会在物理内存条的空间快不足够的时候,启用内存交换机制。该机制允许将部分进程占用的内存页持久化到硬盘上进行存储,从而让系统支持超过实际内存条空间的内存大小。
内存交换支持为一个硬盘指定一个专门的分区从而支持稳定的内存交换,也可以支持使用一个文件作为交换目标。
主要流程
- 内存紧张,内核启动内存回收(kswapd)
- 找出不活跃页(例如长时间不用的数据)
- 将其写入 Swap 区(磁盘)
- 释放对应物理内存
- 如果页再次被访问,再从 Swap 中读回来(称为“页缺失”)
优势
优点 | 缺点 |
---|---|
保证系统在物理内存耗尽时仍可运行 | 磁盘速度远慢于内存,访问慢 |
避免 OOM(内存溢出) | 频繁 Swap 会导致系统性能下降(Swap storm) |
可作为系统缓冲空间 | 不适合高性能应用,延迟大 |
页替换策略
当内存紧张时期,需要换出部分内存,换出哪个页是一个值得研究的问题,因为操作系统需要尽可能地换出短时间内不会被使用的页才能实现优化,否则,如果换出的内存页很快就又加载回来了,那么,反而是白白浪费了计算资源,导致系统的速度严重拖慢。
FIFO + Second Chance 算法
针对于本机上的所有物理页,使用二次机会队列来决定换出顺序,当一个页被使用的时候,将页入队,如果该页已经入队,那么将该页的使用数量 flag 变量增加 1;当需要换出的时候,将队头的页换出,如果该页的使用数量 flag 不等于 0,则给于该页第二次机会,将该页移动到队尾,并清空 flag,转而换出下一个队头元素;
LRU 算法
基于 LRU 最久未被使用原则,将最久未被使用的物理页换出到磁盘上。