系统抖动
在上一个帖子里面,我们谈及了缺页错误和解决缺页错误的方法。今天,我们来谈谈缺页错误所导致的一个重要的问题——系统抖动。
什么是系统抖动?
抖动,顾名思义,就是在一个范围内做来回反复运动。而系统抖动指的是:当cpu利用率增大到一定程度时,cpu利用率急剧下降;系统忙于缺页置换(即不断在主存和磁盘之间进行页面的换入和换出)。
系统抖动的原因?
系统抖动的主要原因是:缺页错误率高。
缺页错误率高,系统忙于页面置换,这很容易理解。由于系统一直忙于页面置换,cpu利用率低也可以理解。但为什么当cpu利用率增大到一定程度时,会引起系统抖动呢?下面我来告诉你答案!
在一定程度上,运行越多的进程,cpu的利用率会上升。但如果进程的数量超过一定限度,此时每个进程被分配到的内存会很小,从而导致每个进程的缺页错误率都大大提高。而缺页错误率越高,会导致进程花费更多的时间用于页面置换(页面的换入和换出),cpu的利用率反而会下降。而这时操作系统会误以为是由于进程数量少导致的cpu利用率低,它会自动为cpu分配更多的进程,导致每个进程的内存空间更小,缺页错误率更高,cpu利用率更低,产生了恶性循环。这样就导致了系统抖动现象的出现。
因此,为了提高cpu利用率并停止抖动,必须降低多道程序程度,让每个进程分配到的内存变得更大,从而降低进程的缺页错误率。什么是多道程序程度?一般情况下,为了使cpu总有一个作业在执行,从而提高cpu的利用率,我们会往作业池中安排尽可能多的作业(作业即进程),这种设计也称为多道程序设计。而作业池中作业的数量即多道程序程度。
如何解决系统抖动?
一种常用的方法是工作集模型。工作集模型指出:每个进程需要访问大量页面集合的时间都集中在某一个时间段;而不同的进程所集中的时间段往往不同。因此,根据工作集模型,我们又提出了局部性模型。
局部性模型
不同的进程在不同的时刻处于不同的局部,工作的中心也都不尽相同。
因此可以通过在不同时刻给不同进程分配不同数量的帧,为进程分配足够的帧来适应当前的局部,进而降低进程的平均缺页错误率。
Tips
为了更好地控制进程的缺页错误率,我们可以根据进程的需求和特性,设置每个进程的缺页错误率的上下限。
- 当实际缺页错误率超出上限时,可为进程多分配一帧;当实际缺页错误率低于下限时,可从进程中删除一帧。