调度算法是根据系统的资源分配策略制定的资源分配算法。调度算法中有个周转时间的概念,周转时间 = 等待时间+执行时间
先来先服务FCFS
按照进程进入系统的先后次序进行调度,先进入系统者先调度,即等待时间最长的进程先执行
优点:算法简单
对长进程有利,因为长进程执行时间较长,相对的,等待时间占执行时间比重较低
有利于CPU繁忙型进程,CPU繁忙意味着不需要频繁的输入输出,大部分时间都由CPU处理,是长进程
缺点:效率低
对短进程不利,因为短进程执行时间很短,若它等待较长时间,则等待时间占执行时间比重过高
不利于I/O繁忙型进程,I/O繁忙意味着不停地中断完成,CPU处理时间较短,是短进程
短作业优先SJF
每次从后备队列/就绪队列中选择一个预计执行时间最短的进程,将CPU资源分配给它
优点:平均等待时间和平均周转时间最少
缺点:对长进程不利(可能导致长进程长期不被调度,发生“饥饿”现象)
不能保证紧迫性进程会被及时处理
由于进程的长短只是根据用户提供的预计执行时间而定的,而用户有可能会有意无意地缩短进程的预计执行时间,致使该算法不一定能真正做到短进程优先调度
优先级调度
每次从后备队列/就绪队列中选择优先级最高的一个进程,将资源分配给它
非抢占式优先级调度算法:当有进程正在CPU上运行时,即使有更高优先级的进程进入就绪队列,也需等待当前进程运行完成,主动让出CPU后,才把CPU分配给高优先级的进程
抢占式优先级调度算法:当有进程正在CPU上运行时,只要出现了另一个优先级更高的进程,进程调度程序就立即停止当前进程(原优先级最高的进程)的执行,重新将CPU分配给新到的优先级最高的进
高响应比优先
对先来先服务和短作业优先调度算法的一种综合平衡,同时考虑每个进程的等待时间和预计执行时间
响应比 = 进程周转时间/进程执行时间=(等待时间+要求服务时间)/要求服务时间
该算法在每次进行进程调度时,先计算后备队列中每个进程的响应比,从中选出响应比最高的进程投入运行
优点:等待时间相同的进程,要求服务的时间越短,其优先级越高,此时对短进程有利
等待时间相同的进程,等待时间越长,其优先级越高,此时等同于先来先服务调度算法
对于长进程,优先级随等待时间的增加而提高,其等待时间足够长时,其优先级便可提升到很高,从而也可获得CPU,此时对长进程有利,克服了饥饿状态
缺点:要进行响应比计算,增加了系统开销
时间片轮转调度
将所有就绪进程按到达的先后次序排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片(即执行一段规定的时间)
当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便停止该进程的执行,并将其放到就绪队列尾。然后再把CPU分配给就绪队列中新的队首
多级反馈队列调度
优先级调度算法和时间片轮转调度算法的综合和发展,通过动态调整进程优先级和时间片大小,可以兼顾多方面的系统目标
设置多个就绪队列,并赋予不同优先级,优先级越高,时间片越小。进程进入就绪队列时,首先进入优先级最高的队列。一个时间片结束后,若进程没有运行完,则转到低一级的就绪队列队尾。仅当高优先级队列中无就绪进程才开始调度低一级的就绪队列中的进程(若此刻有进程进入了高优先级队列中,那么要先转去调用高优先级队列)