调度算法所考虑的几方面:
(1)公平:保证每个进程得到合理的CPU时间。
(2)高效:使CPU保持忙碌的状态,即总有进程在CPU上运行
(3)响应时间:是交互用户的响应时间尽可能短。
(4)周转时间:使批量用户等待输出的时间尽可能短。
(5)吞吐量:使单位时间处理的进程尽可能多。
很显然,我们并不能让五个目标同时达到最好,所以,不同的操作系统会在这几个方面有所权衡。以此确定自己满意的调度算法。
1.时间片轮转调度算法
时间片为分配给进程运行的一段时间。
系统将处于就绪态的进程以先来先服务的原则,将进程派为一个队列,每次调度时将CPU分配给队首的进程,令其在之后的一个时间片执行该进程。当执行的时间片用完后,系统发出信号,通知调度程序,调度程序接收到此信号则停止该进程,并将其放到进程队列的末尾,然后再重复开始的操作。
从时间片方面考虑,若时间片过长则会导致用户体验不加,让用户觉得系统无法并发执行,但时间片过短又会使效率过低(因为进程的切换需要时间,若时间片果断导致进程切换频繁,从而浪费过多时间),其次,系统若出现紧急的情况,而该算法无法及时运行会导致其他问题的发生。所以该算法在公平上得到了保证但还是引出了其他的算法。
2.优先权调度算法
(1)非抢占式优先权算法(又称不可剥夺调度)
在该方式下,系统一旦将处理机(CPU)分配给运行队列中优先权最高的进程后,该进程便一直执行下去,直到完成;或因发生某事件使该进程放弃处理机时,系统方可将处理机,分配给另一个优先权高的进程。
(2)抢占式优先权调度算法(又称可剥夺调度)
该算法的的本质就是系统中运行的永远是优先权最高的进程。与非抢占不同的是,若出现一个优先权高于当前执行的进程,调度程序就暂停原先进程的执行,而将处理机分配给新出现的优先权最高的进程。
3.多级反馈队列调度
这是一种折中额的调度算法,其结合了以上两种调度算法,即优先权高的进程先运行给定的时间片,相同优先权的进程轮流运行。