上篇文章所述的调度算法用于批处理系统,对于分时操作系统和实时操作系统,那样的调度算法就不在适用。
1.时间片轮转调度(RR,Round-Robin)
公平地,轮流的对为每个进程服务,在一段时间内总会轮到它,得到响应。
按照到达就绪队列的顺序轮流执行一个时间片。假设一个时间片为50ms,一个进程执行完50ms时间,就将他放回队列尾部,因此轮流的执行。
可用于作业/进程调度。
因为进程为完全完成,就被中断信号强迫下处理机,因此是抢占式的算法。中断信号由时钟装置发出。
该算法不会导致饥饿现象。
优点:适用于分时操作系统,响应快。
缺点:频繁进程切换,有开销,不能处理紧急事件。
另外补充,时间片的设置会有什么影响。
如果太小,频繁的进行进程切换,我们有知道进程切换是需要代价的,需要保存一些数据和运行环境。所以时间片太小会造成系统开销大。
反之,如果太大,该算法就会退化成先到先服务算法,使进程响应时间增大。
2.优先级调度算法
随着计算机发展,实时操作系统的普及,很多场景需要处理紧急事件,因此出现了此算法。
在作业/进程到达时,会指明该进程优先级。根据优先级来选择调度的进程。
用于作业/进程调度。
算法可分为抢占式的和非抢占式的。根据优先级是否变化,分为静态优先级和动态优先级。静态优先级即非抢占式。
静态:创建进程时就点明优先级,之后一直不变。
动态:会根据后续的进程,判断是否继续执行。如果存在优先级更高的,则优先将处理机分配给优先级高的。
优点:可以处理紧急事件。
缺点:如果源源不断有高优先级进程涌进,低优先级就可能被“饥饿”。
3.多级反馈队列调度算法
该算法较为抽象,建议和例子一起看,才能加深印象。
4.多级队列算法
分为多个队列。在每个队列基础上,各个队列采用不同调度算法,例如系统进程队列采用优先级调度,批处理采用先到先服务调度,加上时间片的限制便成了多级队列调度。假如总共100ms,系统进程分50ms,交互式进程分40ms,批处理进程分10ms。
级多种调度算法优点于一成。并且不会出现饥饿。