虚拟内存管理-抖动和工作集
1. 抖动(Thrashing)
定义:进程在运行中频繁发生页面换入换出的现象(刚换出的页面立即换入,刚换入的页面立即换出)。
根本原因:
分配给进程的驻留集过小(物理块不足),无法满足进程当前工作集需求,导致频繁缺页,进程大部分时间用于磁盘I/O(页面调度),几乎无法执行有效计算。
后果:CPU利用率急剧下降(趋于0),系统吞吐量严重降低。
解决思路:
- 调整驻留集大小(增加进程物理块)。
- 基于工作集动态分配内存,确保驻留集≥工作集。
2. 工作集(Working Set)
定义:进程在最近一段时间间隔(工作集窗口) 内频繁访问的页面集合(反映进程当前活跃的内存需求)。
核心参数:
- 工作集窗口尺寸(Δ):时间间隔长度(如最近1000条指令、最近5个页面访问)。
- 工作集W(t, Δ):在时刻( t ),窗口Δ内访问的页面集合(去重)。
示例:页面访问序列 [1,2,3,2,5,3,4]
,窗口Δ=5 → 工作集W(t,5)={2,3,5}(最近5次访问的页面)。
性质:
- 工作集大小随窗口Δ增大而增大,最终稳定(覆盖进程所有页面)。
- 局部性好的程序,工作集大小远小于总页面数(如循环程序的工作集稳定)。
意义:驻留集大小必须≥工作集大小,否则会因“活跃页面未驻留”导致频繁缺页,引发抖动。
3. 基于工作集的内存管理策略
目标:动态调整进程驻留集,使其等于或略大于当前工作集,避免抖动。
实现:
- 为每个进程维护工作集(记录最近Δ个访问的页面)。
- 定期(如每10ms)计算工作集大小,若驻留集<工作集,申请更多物理块;若驻留集>工作集,释放多余物理块。
效果:既保证进程有足够内存运行(低缺页率),又不浪费内存(多道程序并发度高)。
核心考点 📌
- 抖动的原因:驻留集<工作集 → 频繁缺页 → 大量磁盘I/O。
- 工作集的作用:反映进程当前活跃页面需求,指导内存分配(驻留集≥工作集是避免抖动的关键)。
- 工作集窗口Δ:Δ过小→工作集不稳定(缺页率高);Δ过大→工作集包含不活跃页面(内存浪费)。
总结
抖动是虚拟内存管理的“致命问题”,根源是内存分配不足;工作集通过刻画进程动态内存需求,为合理分配内存提供依据。两者共同构成了虚拟内存“动态调整驻留集”的理论基础,确保系统高效运行。
✨ 一句话记忆:抖动因驻留集太小,工作集是活跃页面集,驻留集≥工作集可避抖动! ✨