调度算法

     调度算法就是进行资源分配的算法。对于不同的的系统和系统目标及其不同的适应性,会采用适合系统本身的各种调度算法。

     如在大量作业的批处理系统中,为了照顾为数众多的段作业,应采用短作业优先的调度算法,平时处理事务时也是这样,分轻重缓急,这实际上就是事务的权重,轻重缓急的评估并进行优先排序原则,就是对事务的调度行为

      像在一些分时系统中,为了保证系统均具有合理的响应时间,应当采用轮转法进行调度,即如果无论当前的任务需要执行多久及多少资源,均每次都分配相同的执行时间段及相同的资源给它,以保证随时都有任务在进行中,充分提高效率。

      调度算法最常见为先来先到算法及轮转算法,见名便能知义,先来先到算法,对于很需时较长的任务较为适合,因为可以避免因任务不断切换导致的效率浪费(切换调度也会耗费资源),但如果是短时任务,采用调度算法,会使调度资源频繁要进入休息唤醒状态,结果反而导致效率低下,而且先来先到的更大坏处是,如果长时任务完蛋死循环或死锁不结束,那么整个系统立即死机。

      轮转算法在小任务量不多时,并不一定比先来先到算法更有优势,当切换代价较小时,轮转算法因为有固定的时间片,固定的切换资源耗费,所以有可能导致耗费比先来先到更大,但在大量的小时间段任务出现时,轮转算法可以有效控制调度资源耗费,通常来说,如果大量的小任务执行时间相差不大,并且轮转算法的时间片恰好略大于小任务的执行时间时,轮转流将会发挥极高的效率,它最大的优势还有一点,不怕死机,总能拿得出资源来让其它任务执行。(除非全死锁了)

      对于轮转算法的效率有一种改进的方案是,轮转算法中如果遇到需要耗时长的任务,那么就立即跳出轮转规则,采用先来先到算法,持续执行当前任务,好处是灵活,能提高不少效率,坏处是,失去了轮转算法不易死机及资源严格分配的优势,如果长时任务一旦突然完蛋,那么整个系统立即死机。

      还有一种更加改过了的算法,名字很牛逼,叫”多级反馈队列算法",听起来华丽丽的,虽然有点看不懂,但是MS很强大。第一次见到这名字的一般都被吓,感觉就像一个敌人全幅武装的盔甲在你面前,而你却拎着一根牙签想要干掉对方一样。

      实际上没有那么可怕,你可以用一切语言去腹诽这个当年取了这个名字的家伙---严重怀疑肯定是个不学无术的流氓为了炫耀自己装作有文化的样子取了那么长的名字。

      方法其实很简单,其实就是把快死的,或者老结束不了的任务踢一边去,最后再解决。先要准备几组任务进行,比如A1,A2,A3,现在有个任务X,放到A1中,固定时间内没解决,说明这厮很可疑,一脚踢A2去,A2里固定时间内还没解决,一脚踢A3去。如果持续来任务,都是这样照常办理,然后A1如果执行完了,再执行A2,然后A3。但如果有大量的小任务持续不断提供给A1的话,A1中一直不结束的话,那么A2或A3里永远得不到执行也是有可能的。这跟皇帝选妃子是一码事。

       

  

posted @ 2012-03-15 14:36  一根神棍研古今  阅读(2598)  评论(0编辑  收藏  举报
Web Counter