由于虚拟存储器系统能从逻辑上扩大内存,人们希望在系统中能运行更多的进程,即增加多道程序度,以提高处理机的利用率。
如果多道程度过高,页面在内存与外存之间频繁调度,以至于调度页面所需时间比进程实际运行的时间还多,此时系统效率急剧下降,甚至导致系统崩溃。这种现象称为颠簸或抖动(thrashing) 。
抖动的后果:缺页率急剧增加,内存有效存取时间加长,系统吞吐量骤减(趋近于零) ;系统已基本不能完成什么任务。
抖动产生原因:同时运行的进程数过多,进程频繁访问的页面数高于可用的物理块数,造成进程运行时频繁缺页。CPU 利用率太低时,调度程序就会增加多道程序度,将新进程引入系统中,反而进一步导致处理机利用率的下降。
操作系统需要一种降低缺页率、防止抖动的内存管理方法:工作集策略
驻留集:指请求分页存储管理中给进程分配的物理页面(块)的集合。
驻留集大小即是这个集合中元素的个数。
每个进程的驻留集越小,则同时驻留内存的进程就越多,CPU 利用率越高。
进程的驻留集太小的话,则缺页率高,请求调页的开销增大。
抖动的原因:多道程序度过高,导致平均驻留集过小。
缺页率与系统为进程分配物理块的多少(驻留集的大小)有关。缺页率随着分配物理块的增加而减少。
当物理块数达到某个数值时,物理块数的增加对缺页率没有明显影响。当物理块数小于某个数值时,减少一块都会对缺页率有较大影响。
1968 年 Denning 提出了工作集(Working Set) 理论。
工作集是指在某段时间间隔 ∆ 里,进程实际要访问的页面的集合。
把进程在某段时间间隔 ∆ 里,在时间 t 的工作集记为w(t,∆),变量 ∆ 称为工作集“窗口尺寸” 。
对于给定的页面走向,如果 ∆ = 10 次存储访问,在 t1时刻的工作集是 W(t1,10)=(1,2,5,6,7),在 t2 时刻,工作集是 W(t2,10)=(3,4)
工作集精确度与窗口尺寸 ∆ 的选择有关。如果 ∆ 太小,那么它不能表示进程的局部特征;如果 ∆ 为无穷大,那么工作集合是进程执行需要的所有页面的集合。
如果页面正在使用,它就落在工作集中;如果不再使用,它将不出现在相应的工作集中。
工作集是局部性原理的近似表示。
如果能找出一个作业的各个工作集,并求出其页面数最大者,就可估计出该进程所需的物理块数。
利用工作集模型可以进行页面置换。工作集页面置换法的基本思想:找出一个不在工作集中的页面,把它淘汰。
类似于 LRU 算法,工作集用进程过去某段时间内的行为作为未来某段时间内行为的近似。
利用工作集进行驻留集调整的策略
工作集策略存在的问题
仅允许进程在自身范围内进行置换。即使发生抖动,也可以把影响限制在较小范围内。