进程调度算法都有哪些?分别适用于什么场景?
先来先服务(FCFS)/先进先出(FIFO)调度算法
按照作业/进程进入系统的先后次序进行调度,先进入系统者先调度;即启动等待时间最长的作业/进程。是一种最简单的调度算法,即可用于作业调度,也可用于进程调度
短作业优先调度算法(SJF)
从队列中选出一个估计运行时间最短的作业优先调度,即可用于作业调度,也可用于进程调度
高优先权调度算法
即可用于作业调度,也可用于进程调度
- 非抢占式优先权调度算法
- 系统一旦把处理机分配给就绪队列中优先权最高的进程后,该进程便一直执行下去,直至完成,或因发生某事件使该进程放弃处理机时,系统才将处理机重新分配给另一优先权最高的进程
- 主要用于批处理系统中,也可用于某些对实时性要求不严的实时系统中
- 抢占式优先权调度算法
- 把处理机分配给优先权最高的进程,但在执行期间,只要出现另一个优先权更高的进程,则进程调度程序就立即停止当前进程的执行,并将处理机分配给新到的优先权最高的进程
- 该调度算法,能更好地满足紧迫作业的要求,故而常用于要求比较严格的实时系统中,以及对性能要求较高的批处理和分时系统中
静态优先权
静态优先权在创建进程时确定,且在进程的整个运行期间保持不变。一般地,优先权是利用某一范围内的一个整数来表示的,例如,0∼7或0∼255, 又把该整数称为优先数
确定进程优先权的依据有如下三个方面:
进程类型:系统进程的优先权高于一般用户进程。
进程对资源的需求:如进程的估计执行时间及内存需要量少的进程,应赋予较高的优先权。
用户要求:由用户进程的紧迫程度和用户所付费用的多少来确定优先权。
动态优先权
在创建进程时赋予的优先权是随进程的推进或随其等待时间的增加而改变,以获得更好的调度性能。可规定,在就绪队列中的进程,随其等待时间的增长,其优先权以速率a提高 。
具有相同优先权初值的进程,则最先进入就绪队列,其将因其动态优先权变得最高而优先获得处理机,此即FCFS算法 。
具有各不相同的优先权初值的就绪进程,则优先权初值低的进程,在等待了足够的时间后,其优先权便可能升为最高,从而可以获得处理机。
当采用抢占式优先权调度算法时,如果再规定当前进程的优先权以速率b下降,则可防止一个长作业长期地垄断处理机。
高响应比优先调度算法
高响应比优先调度算法既考虑作业的执行时间也考虑作业的等待时间,综合了先来先服务和最短作业优先两种算法的特点。
由于要进行响应比计算,增加了系统开销。
简单的时间片轮转法(RR—Round Robin)
系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片;当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便停止该进程的执行,并将其放就绪队列尾;然后,再把处理机分配给就绪队列中新的队首;时间片的大小从几ms到几百ms 。