进程调度算法
1. 先来先服务 FCFS
按照作业到达任务队列的顺序进行调度, FCFS是非抢占式的,易于实现,效率不高,性能不好。利于长作业不利于短作业,
长作业——CPU繁忙型,短作业——IO繁忙型
优点:易于理解且实现简单,只需要一个队列,并且相当公平。
缺点:利于长作业不利于短作业。
2. 短作业优先 SJF
每次从队列里选择预计时间最短的作业运行。SJF是非抢占式的,优先照顾短作业,具有很好的性能,降低平均等待时间,提高吞吐量。
但是不利于长作业,长作业可能一直处于等待状态,出现饥饿现象;完全未考虑作业的优先紧迫程度,不能用于实时系统。
优点:该算法可改进平均周转时间和带权周转时间,提高系统的吞吐量。
缺点:对长作业不友好,长作业可能长时间得不到执行从而导致饥饿,未考虑作业的优先紧迫程度。并且难以准确估计某一作业的执行时间,从而影响调度性能。
3. 最短剩余时间优先
按照作业的服务时间选择最短的时间运行,在该作业运行期间,一旦有新业务到达系统,并且新作业的服务时间比当前作业的剩余时间短,则发生抢占,否则,当前作业继续运行,该算法确保一旦新的短作业或短进程进入系统,能够很快得到处理。
优点:确保短作业优先被处理。
缺点:由于频繁的抢占和和进程切换,系统的开销大,该算法实现代价高,一般用于实时系统。
4. 高响应比优先调度算法
非抢占式,每次进行作业调度时,先计算后备作业中每个作业的响应比,挑选最高的作业投入运行, 响应比 =(等待时间 + 服务时间) / 服务时间 = 等待时间 / 服务时间 + 1。因为每次都需要计算响应比,所以比较耗费系统资源。
优点:由于长作业也有机会投入运行,在同一时间内的处理的作业数要少于SJF。
缺点:由于需要一直计算响应比,导致系统的资源消耗增加。
5. 时间片轮转
用于分时系统的进程调度
系统将CPU处理时间划分为多个时间片,进程按照到达先后顺序排列,每次调度选择队首的进程,执行完一个时间片后,计时器发出时钟中断请求,该进程移动至队尾,每次调度都是如此,该算法能够在规定时间内响应所有用户的请求,达到系统分时的目的。
优点:简单易行,平均响应时间短。
缺点:不利于处理紧急作业。在时间片轮转算法中,时间片的大小对系统性能的影响很大,因此时间片的大小应选择恰当。
时间片选择:
- 系统对响应时间的要求
- 就绪队列中进程的数目
- 系统的处理能力
6. 多级反馈队列
多级反馈队列调度算法是一种CPU处理机调度算法。
算法描述:
- 进程在进入待调度的队列等待时,首先进入优先级最高的Q1等待。
- 首先调度优先级高的队列中的进程,若高优先级队列中队列已没有调度的进程,则调度次优先级队列中的进程。
- 对于同一队列中的进程,按照时间片轮询调度。比如,Q1的时间片为N,那么Q1 中的作业在经历了N个时间片还未完成,则进入Q2队列进行等待,若Q2 的时间片用完后作业还不能完成,一直进入下一队列,直至完成。
- 在低优先级的队列中的进程在运行时,又有新作业到达时,那么在运行完这个时间片后,CPU马上给到新的作业。抢占式
在多级反馈队列中,如果规定第一个队列的时间片略大于多数人机交互所需的处理时间时,便能够较好的满足各种类型用户的需要
参考:
/leex_brave/article/details/51638300