本文主要是介绍操作系统 单处理器调度算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
- 在CPU的调度中,究竟采用何种调度策略以及使用何种调度算法,取决于操作系统的类型和设计目标。
- 在批处理系统中,系统的主要设计目标是增加系统的吞吐量及提高资源的利用率,因此CPU的调度可以使用先来先服务调度算法。
- 分时系统的设计目标重点考虑响应时间和使用计算机的公平性,CPU的调度通常采用基于时间片的轮转调度算法。
- 在实时系统中,要保证系统对随机发生的外部事件能够及时做出响应,则CPU的调度通常采用高优先级的抢占式调度算法。
调度原则
处理机调度算法的共同目标
- 资源利用率:为提高系统的资源利用率,应使系统中的处理机和其它所有资源都尽可能地保持忙碌状态,其中最重要的处理机利用率可用以下方法计算:
- 公平性。公平性是指应使诸进程都获得合理的CPU 时间,不会发生进程饥饿现象。
公平性是相对的,对相同类型的进程应获得相同的服务;但对于不同类型的进程,由于其紧急程度或重要性的不同,则应提供不同的服务。 - 平衡性。由于在系统中可能具有多种类型的进程,有的属于计算型作业,有的属于I/O型。为使系统中的CPU和各种外部设备都能经常处于忙碌状态,调度算法应尽可能保持系统资源使用的平衡性。
策略强制执行。对所制订的策略其中包括安全策略,只要需要,就必须予以准确地执行,即使会造成某些工作的延迟也要执行。
批处理系统的目标
分时系统的目标
实时系统的目标
常用算法
先来先服务调度算法 (FCFS)
- 按照作业/进程进入系统的先后次序进行调度,先进入系统者先调度;即启动等待时间最长的作业/进程
- 是一种最简单的调度算法,即可用于作业调度,也可用于进程调度
几个术语
- 到达时间、服务时间、开始时间
- 完成时间、等待时间
- 周转时间:完成时间-到达时间
- 带权周转时间:周转时间/服务时间
先来先服务(先进先出)优缺点
- 比较有利于长作业(进程),而不利于短作业(进程)
- 有利于CPU繁忙型作业(进程) ,而不利于I/O繁忙型作业(进程)
- 用于批处理系统,不适于分时系统
短作业/进程优先调度算法
- 短作业(进程)优先调度算法SJ§F,以要求运行时间长短进行调度,即启动要求运行时间最短的作业
- 可以分别用于作业调度和进程调度
- 短作业优先(SJF)的调度算法,是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行;而短进程优先(SPF)调度算法,则是从就绪队列中选出一估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时,再重新调度
缺点
- 对长作业不利。严重的是,若一长作业(进程)进入系统的后备队列(就绪队列),由于调度程序总是优先调度那些(即使是后进来的)短作业(进程),将导致长作业(进程)长期不被调度——饥饿
- 完全未考虑作业(进程)的紧迫程度,因而不能保证紧迫性作业(进程)会被及时处理
- 由于作业(进程)的长短只是根据用户所提供的估计执行时间而定的,而用户又可能会有意或无意地缩短其作业的估计运行时间,致使该算法不一定能真正做到短作业优先调度。
先来先服务和短作业优先算法
FCFS/SJF调度算法的性能
由此可见,SJF能有效地降低作业的平均等待时间,提高系统吞吐量
轮转调度算法
简单的时间片轮转法(RR—Round Robin)
- 系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片
- 当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便停止该进程的执行,并将其放就绪队列尾;然后,再把处理机分配给就绪队列中新的队首
- 时间片的大小从几ms到几百ms
缺点:紧迫任务响应慢。
UNIX中采用:时间片+优先权
分时系统中常用时间片轮转法
时间片大小的确定
(1)系统对响应时间的要求
数目N和时间片q成反比,即T=Nq,因此在进程数一定时,作为分时系统首先就是必须满足系统对响应时间的要求。时间片的长短将正比于系统所要求的响应时间。
(2)就绪队列中进程的数目
在分时系统中,就绪队列上所有的进程数,是随着在终端上机的用户数目而改变的,但系统应保证,当所有终端用户上机时,获得较好的响应时间。
(3)系统的处理能力
系统的处理能力是必须保证用户键入的常用命令能在一个时间片内处理完毕,否则将无法保证得到满意的响应时间,而且会使平均周转时间及带权周转时间都很长。
在RR调度算法中,应在何时进行进程的切换:
① 若一个时间片尚未用完,正在运行的进程便已经完成,就立即激活调度程序,将它从就绪队列中删除,再调度就绪队列中队首的进程运行,并启动一个新的时间片。
② 在一个时间片用完时,计时器中断处理程序被激活。如果进程尚未运行完毕,调度程序将把它送往就绪队列的末尾。
高响应比优先调度算法
- 是FCFS和SJF的结合,克服了两种算法的缺点
- 调度策略:响应比最高的作业优先启动
- 因等待时间+服务时间=该作业的响应时间,故该优先权又相当于响应比RP。据此,又可表示为
对HRRF的小结
- 等待时间相同的作业,则要求服务的时间愈短,其优先权愈高——对短作业有利
- 要求服务的时间相同的作业,则等待时间愈长,其优先权愈高——是先来先服务
- 长作业,优先权随等待时间的增加而提高,其等待时间足够长时,其优先权便可升到很高, 从而也可获得处理机——对长作业有利
- 是一种折衷,既照顾了短作业,又考虑了作业到达的先后次序,又不会使长作业长期得不到服务。
缺点:要进行响应比计算,增加了系统开销
采用高响应比优先调度的进程执行示例
优先级调度算法(priority-scheduling algorithm,PSA)
- 对于先来先服务调度算法,作业的等待时间就是作业的优先级,等待时间越长,其优先级越高。
- 对于短作业优先调度算法,作业的长短就是作业的优先级,作业所需运行的时间越短,其优先级越高。但上述两种优先级都不能反映作业的紧迫程度。
非抢占式优先权调度算法
抢占式优先权调度算法
- 把处理机分配给优先权最高的进程,但在执行期间,只要出现另一个优先权更高的进程,则进程调度程序就立即停止当前进程的执行,并将处理机分配给新到的优先权最高的进程
- 注意:只要系统中出现一个新的就绪进程,就进行优先权比较
- 该调度算法,能更好地满足紧迫作业的要求,故而常用于要求比较严格的实时系统中,以及对性能要求较高的批处理和分时系统中
优先权的类型
- 进程类型:系统进程,用户进程
- 进程对资源的需求
- 用户要求
动态优先权
- 具有相同优先权初值的进程,则最先进入就绪队列,其将因其动态优先权变得最高而优先获得处理机,此即FCFS算法
- 具有各不相同的优先权初值的就绪进程,则优先权初值低的进程,在等待了足够的时间后,其优先权便可能升为最高,从而可以获得处理机
- 随进程的推进或随其等待时间的增加而改变,以获得更好的调度性能
- 可规定,在就绪队列中的进程,随其等待时间的增长,其优先权以速率a提高
- 当采用抢占式优先权调度算法时,如果再规定当前进程的优先权以速率b下降,则可防止一个长作业长期地垄断处理机
多级反馈队列调度算法
设置多个就绪队列,并为各个队列赋予不同的优先级
- 第一个队列的优先级最高,第二个队列次之,其余各队列的优先权逐个降低
- 该算法赋予各个队列中进程执行时间片的大小也各不相同,在优先权愈高的队列中,为每个进程所规定的执行时间片就愈小。例如,第二个队列的时间片要比第一个队列的时间片长一倍,……,第i+1个队列的时间片要比第i个队列的时间片长一倍
- 系统中设置多个就绪队列,每个队列对应一个优先级。
- 各就绪队列中进程的运行时间片不同,高优先级队列的时间片小,低优先级队列的时间片大。时间片依次为8ms、16ms、32ms……
- 新进程进入系统后,先放入第1个队列的末尾。
系统先运行第1个队列中的进程,只有在高优先级队列空的情况下,才从下一级就绪队列中选取进程运行。 - 每一个队列中的进程调度采用先来先服务FCFS算法。
- 当一个等待终端输入的进程被唤醒时,它被转到最高优先级队列中,当一个等待磁盘I/O或网卡数据的进程就绪时,它被转到次优先级队列中。
注意
- 仅当第1~(i-1) 队列均空时,才会调度第i队列中的进程运行
- 第 i 队列中某进程正在运行时,又有新进程进入优先权较高的队列( 第1 ~ (i - 1) 中的任何一个队列 ),则此时新进程将抢占正在运行进程的处理机,调度程序把正在运行的进程放回到第i队列的末尾
- 第 i 队列中某进程正在运行时,该进程因等待事件发生而进入阻塞队列,等待事件发生后,调度程序把进程放回到第 i 队列的末尾
多级反馈队列调度算法的性能
终端型作业用户
- 终端型作业用户所提交的作业多属于交互型作业,通常较小,系统只要能使这些作业在第一队列所规定的时间片内完成即可
短批处理作业用户
- 若在第1队列中执行一个时间片即可完成,便可获得与终端型作业一样的响应时间
- 如在第一个队列中不能完成,只需在第2、3队列中各执行一个时间片
长批处理作业用户
- 长作业将依次在第1,2,3…,n队列中执行,最终按轮转方式运行
这篇关于操作系统 单处理器调度算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!