请教xtang,关于偶发调度的问题

在“system architecture”资料里提到关于Sporadic scheduling(偶发调度),有几个问题不是很明白,我想请教一下各位。

(1)后台运行和前台运行。前台运行我理解,后台运行是怎么回事呢?被抢占的线程在后台会继续运行?既然资源已经被抢占了,怎么会继续运行呢?这个我不太理解,请理解的人帮忙解释一下。

(2)这种偶发调度具体在什么情况下会用到?

这个background/foreground与咱们通常说的前后台执行不是一回事。其实他只是想说线程在低优先级下运行,和“普通”优先级下运行。

这个比较常见的用法是 "垃圾收集“。比如你的程序把各种不用的object挂到一个链上,然后你有一个专门的”收集“线程扫描这个链,把不需要的object free()掉。

这个”收集“线程优先级太高,会对系统中别的线程造成影响;优先级太低又会造成内存来不及free而积压。这时候,就可以用sporadic scheduler,让线程的优先级变动。当线程消耗较多CPU时,降下它的优先级,使得它可以在别的高优先级线程的运行间隙(后台)运行。而如果它的运行时间减少时,它又可以适当抬高自己的优先级以获得一定的CPU。(前台运行)

不过sporadic会自动变化优先级,对于比较复杂的系统不太好掌握,这个调度算法并不常用。