一、调度算法的评价标准
1.cpu利用率:
cpu利用率=cpu忙碌时间 / 总时间
2.系统吞吐量:
单位时间内完成的作业数量;
系统吞吐量=完成的作业数量/总时间
3.周转时间:
从作业被提交给系统开始,到作业完成为止的整个时间周期;
周转时间包含四个方面:
(1)作业在外存后备队列上等待作业调度(高级调度)的时间
(2)进程在就绪队列等待进程调度(低级调度)的时间
(3)进程在cpu上执行的时间
(4)进程在I/O操作上完成的时间
后三个操作在整个作业过程中会发生多次
周转时间=作业完成时间-作业提交时间
平均周转时间=各个作业周转时间/作业总数
OS更关心平均周转时间,更关心整体的表现
在相同的周转时间下,运行时间更长的作业,用户体验感更好
因此引入一个概念------带权周转时间
带权周转时间=作业周转时间/作业实际运行时间
带权周转时间越小,用户体验感越好
平均带权周转时间=各作业的带权周转时间之和/作业总数
4.等待时间
指进程/作业处于等待处理机状态时间之和
等待时间越长,用户体验感越差
对于进程来说:等待时间指进程在被建立后,等待被响应的时间的总和,在等待I/O完成期间,进程仍然被服务,所以这段时间不计入在等待时间之内
对于作业来说:等待时间还应该加入作业在外存的后备队列等待高级调度的时间
5.响应时间
用户从提交请求到再次响应之间的时间
二、调度算法
1.先来先服务调度算法
2.短作业优先调度算法
3.高响应比调度算法
1.先来先服务(FCFS)
算法思想:按照作业或进程到达的先后顺序进行服务;
等待时间越久越优先得到服务,属于非抢占式算法
优点:
公平、算法实现简单
先来先服务算法不会导致饥饿
饥饿:进程/作业长期得不到服务
缺点:
排在长作业/进程后的短作业/进程需要等待更长的时间被响应,
带权周转时间较大,短作业/进程的用户体验感更差;
对长作业有利,对短作业不利
2.短作业优先(SJF)
算法思想:追求最少的平均等待时间,最少的平均周转时间,最少的带权周转时间
要求服务时间最短的作业/进程优先进行服务
短作业/进程优先的算法可分为两个类别:
非抢占式:每次调度时选择在已到达且运行时间最短的作业/进程进行调度
抢占式:又叫最短剩余时间优先调度算法
每当有新的进程到达,就绪队列发生改变时,就需要进行调度,如果新到达的进程的运行时间小于当前正在运行的进程的剩余运行时间,则新进程抢占处理机,当前运行的进程重新回到就绪队列,另外每当一个进程运行结束后,也要进行调度
抢占式的短作业运优先调度算法的平均等待时间最短,平均周转时间最短
短作业优先算法的优点:
平均等待时间较短,平均周转时间较短
缺点:
不公平,对短作业有利,不利于长作业,可能会出现饥饿现象,如果某个进程长时间得不到服务会饿死
3.高响应比优先(HRRN)
算法思想:要求综合考虑作业或进程的等待时间和要求服务的时间
在每次调度时计算各作业/进程的响应比,选择响应比最高的进行调度
响应比:(等待时间+要求服务时间)/ 要求服务时间
高响应比是非抢占式调度算法
只有在当前运行的进程主动放弃cpu(正常结束/主动要求阻塞)才会进行调度,计算所有就绪队列中进程的响应比,选择响应比最高的进程进行服务
优点:
综合了先来先服务和短作业优先两种算法的优点
综上三种调度算法主要适用于早期批处理操作系统
三、适用于交互式系统的调度算法
1.时间片轮转调度算法(RR)
2.优先级调度算法
3.多级反馈队列调度算法
1.时间片轮转调度
算法思想:公平地、轮流地为各个进程服务,让每个进程在一定时间间隔内都可以得到响应
算法规划:按照各进程到达就绪队列的顺序,轮流地让各个进程执行一个时间片,如果进程在一个时间片内未执行完,则剥夺处理机使用,将进程重新放到就绪队列的队尾重新排队
该调度算法用于进程调度,只有作业放入内存中,建立了相应的进程才会分配处理机时间片
该算法是抢占式的调度算法,由时钟装置发出时钟信号来通知cpu时间片到
时间片大小的考虑?
时间片较大,如果每个进程都可以在一个时间片内结束,该算法会退化为先来先服务算法,增大进程的响应时间
时间片较小,会导致处理机频繁地进行进程切换,系统会消耗大量的时间和资源进行进程的切换
所以,时间片的大小应该适中,不应过大或过小
时间片轮转调度算法的优缺点?
优点:公平,响应快,适用于分时操作系统;不会发生饥饿现象
缺点:由于进程之间切换,有一定的开销;无法识别进程的紧急程度
2.优先级调度算法
算法思想:随着分时操作系统的出现,需要根据任务的紧急程度决定处理顺序
算法规划:每个进程/作业都有各自的优先级,调度时优先选择优先级最高的进行调度
该调度算法抢占式和非抢占式皆有
又根据优先级是否会改变分为静态优先级和动态优先级
静态优先级:创建进程时优先级就确定了,不再改变
动态优先级:进程创建时优先级有一个初始值,之和根据情况进行动态调整
如何合理地设置各进程的优先级?
系统进程大于用户进程;
前台进程大于后台进程;
I/O繁忙型进程大于计算机型进程(cpu繁忙型进程)
I/O设备可以与cpu并行运行,所以I/O繁忙进程的优先级应大于cpu繁忙型进程,提高资源利用率,系统吞吐量
优先级调度算法的优缺点:
优点:用优先级区分进程的紧急程度、重要程度,适用于实时操作系统,可以灵活地调整各个进程或作业的偏好程度
缺点:如果不断有优先级更高的进程到来,会导致之前的进程饿死
3.多级反馈队列调度算法
算法思想:对于其他调度算法的权衡
算法规划:
1.设置多级就绪队列,各级队列优先级从高到低,时间片从小到大。
2.新进程到达时先进入第一级队列,按照先来先服务的算法规则排队,等待被分配时间片,
若时间片结束,进程仍没有运行完,则进程进入下一级队列的队尾,如果此时进程已经在最大
一级队列,则插入该队列的队尾
3.只有当k级队列中的进程全部运行完,第k+1级队列中的进程才开始分配时间片
该调度算法用于进程调度,为抢占式调度算法
在k级队列中的进程运行时,一个新进程的到来,会抢占处理机运行,运行中的进程会返回该级队列的队尾
该调度算法的优缺点
优点:该调度算法结合了先来先服务(FCFS)、时间片轮转(RR)、段进程优先(SPF)
这三个调度算法的优点
缺点:可能会导致饥饿现象
上述三种调度算法适用于交互式系统(实时操作系统、分时操作系统等)
四、多级队列调度算法
系统中按照进程类型设置多个队列,进程建立成功后插入对应的队列
队列之间可以采用固定优先级或时间片来进行划分
固定优先级:高优先级全部调度完之后,低优先级进程才被调度
时间片:给不同队列分配大小不同的时间片
各队列可以采用不同的调度算法
例如:系统进程队列可以采用优先级调度;交互式进程可以采用时间片轮转调度;批处理
进程可以采用先来先服务调度
五、多处理机调度
面临的问题?
单处理机调度需要考虑哪个就绪进程优先上处理机;
多处理机则还需要考虑被调度的进程上哪个处理机
针对多处理机的考虑?
负载均衡:让每个cpu同等忙碌
处理机亲和性:尽量让一个进程调度到同一个cpu上,尽可能发挥cpu中缓存的作用
两个解决方案
一、公共就绪队列
1.所有cpu共享同一个就绪队列
2.每个cpu调度程序时,从公共就绪队列选择一个进程运行
3.每个cpu进行队列访问时,需要上锁,保证互斥
优点:天然保证了负载均衡
缺点:cpu亲和力不高,进程频繁切换cpu运行
如何解决cpu亲和力不高?
1.软亲和:由调度程序来保持cpu亲和性
2.硬亲和:由用户进程通过系统调用,主动要求将进程分配到固定的cpu
二、私有就绪队列
每个cpu都有一个对应的就绪队列,当cpu空闲时,从对应的就绪队列选择一个进程运行
优点:cpu亲和力高
缺点:无法保证负载均衡
如何解决负载均衡
1.推迁移(push)策略
利用一个特定的系统程序周期性地检查各cpu的负载情况,从忙碌的cpu对应的就绪队列中推
一些进程到不忙碌的cpu对应的就绪队列中
2.拉迁移(pull)策略
每个cpu运行调度程序时,各自周期性地检查自己与其他处理机的负载情况,如果发现自己
的负载较低,会主动从负载高的cpu对应的就绪队列中拉一些进程到自己对应的就绪队列