常用调度算法
先来先服务(FCFS)
先来先服务(FCFS, First Come First Serve)是最简单的调度算法,按先后顺序进行调度。
FCFS算法
按照作业提交或进程变为就绪状态的先后次序,分派CPU; 当前作业或进程占用CPU,直到执行完或阻塞,才出让CPU(非抢占方式)。 在作业或进程唤醒后(如I/O完成),并不立即恢复执行,通常等到当前作业或进程出让CPU。最简单的算法。
FCFS的特点
比较有利于长作业,而不利于短作业。 有利于CPU繁忙的作业,而不利于I/O繁忙的作业。
轮转法(Round Robin)
轮转法(Round Robin)是让每个进程在就绪队列中的等待时间与享受服务的时间成正比例。
轮转法
将系统中所有的就绪进程按照FCFS原则,排成一个队列。
每次调度时将CPU分派给队首进程,让其执行一个时间片。时间片的长度从几个ms到几百ms。
在一个时间片结束时,发生时钟中断。
调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前的队首进程。? 进程可以未使用完一个时间片,就出让CPU(如阻塞)。
最短作业优先算法SJF
SJF(Shortest Job First )
时间片长度的确定
时间片长度变化的影响2 过长->退化为FCFS算法,进程在一个时间片内都执行完,响应时间长。2 过短->用户的一次请求需要多个时间片才能处理完,上下文切换次数增加,响应时间长。
对响应时间的要求:T(响应时间)=N(进程数目)*q(时间片)
就绪进程的数目:数目越多,时间片越小
系统的处理能力:应当使用户输入通常在一个时间片内能处理完,否则使响应时间,平均周转时间和平均带权周转时间延长。
最短作业优先(SJF)
SJF(Shortest Job First )
按照CPU阵发时间递增的次序调度,易于证明其平均周转时间最短
优点:最大限度地降低了平均等待时间
缺点:不公平;容易产生饥饿,甚至饿死
最短剩余时间优先算法(SRTN)
shortest remaining time next
(剥夺式算法)当CPU空闲时,选择剩余时间最短的进程或者线程。当一个新进程或线程到达时,比较新进程所需时间与当前运行进程的估计剩余时间。如果新进程所需的运行时间短,则切换运行进程。
最高响应比优先算法(HRN):
(HRN,Highest Response_ratio Next)
对于同时到达的任务处理时间较短的任务将被优先调度,处理时间较长的任务将随着时间的增加而动态提升响应比,因而不会出现饥饿现象。
最高优先数优先算法(HPF)
当需要进行处理器分配时,系统在可运行的进程中选择优先数最高者使其投入运行。
赋予优先数的方法:
①静态优先数:进程进入系统时被赋予,在生命周期内固定不变。适合批处理进程
优点:较简单;开销较小
缺点:公平性差,可能会造成低优先数进程长期等待。
②动态优先数:进程在创建时被赋予,在生命周期内动态变化。
优点:资源利用率高,公平性好
缺点:开销较大;实现较复杂
循环轮转算法(RR)
系统为每一个进程规定一个时间片,所有进程按照其时间片的长短轮流地进行。适用于分时系统,公平;响应及时。
①基本轮转
②改进轮转
分类排队算法(MLQ)
以多个就绪进程队列为特征的,这些队列将系统中所有可运行的进程按照某种原则加以分类,以实现所期望的调度目标。