调度算法
思考每种调度算法,它的算法思想,它是想解决什么问题,它的算法规则
这种调度算法作用于作业调度(高级调度)还是进程调度(低级调度),注意这里没有涉及内存调度(中级调度)
它是抢占式的还是非抢占式的,抢占的意思是每每就绪队列新进程到达的时候,要去check是否要发生调度,非抢占就是这种情况不需要check,但是当前运行的进程还是会根据时间片用完,或者自己运行时间用完主动撤出
这种调度算法有什么优点缺点
是否会导致其他进程永远不会得到处理机资源,即是否导致饥饿?
一、先来先服务FCFS
- 算法思想
公平角度 - 算法规则
按照作业或者进程先后顺序分配处理机资源 - 作用点
作业调度
考虑是哪个作业先到后备队列
进程调度
考虑是哪个进程先到就绪队列 - 是否可抢占
非抢占式算法 - 优缺点
优点
公平、算法实现简单
缺点
排在长作业或者长进程后面的短作业需要等很久
对长作业有利,对短作业不利,比如排队买奶茶,我只需要买一杯,一分钟可以做完,前面的人点了二十杯,我要等好久 - 是否会导致饥饿
不会
二、短作业优先SJF
- 算法思想
追求最少的平均等待时间,最少的平均周转时间,最少的平均带权周转时间 - 算法规则
优先分配处理机资源给短作业 - 作用点
作业调度
叫短作业优先SJF
进程调度
叫短进程优先SPF - 是否可抢占
SJF和SPF都是非抢占式算法
最短剩余时间优先算法是抢占式算法 - 优缺点
优点
平均等待时间小,平均周转时间小
对短作业有利
缺点
不公平,对长作业不利
可能会出现饥饿现象
作业或者进程运行多长是用户提供的,不一定能真正做到短作业优先 - 是否会导致饥饿
会,如果一直有短作业到来,长作业就会得不到处理机资源
三、高响应比优先HRRN
- 算法思想
先来先服务算法考虑的是最长等待时间
短作业优先考虑的是最短运行时间
高响应比优先考虑的是等待时间和运行时间 - 算法规则
在每次调度的时候先计算各个作业或者进程的响应比,选择响应比最高的分配处理机资源
响应比=(等待时间+要求服务时间)/要求服务时间 - 作用点
作业调度
进程调度 - 是否可抢占
非抢占式算法,只有当当前运行的作业主动放弃处理机时,才需要调度,才需要计算响应比 - 优缺点
优点
综合考虑了等待时间和运行时间
等待时间相同时,运行时间短的优先
运行时间相同,等待时间长的优先
对于长作业来说,如果等待时间变大,响应比也会变大,从而避免长作业饥饿问题
缺点 - 是否会导致饥饿
不会
四、时间片轮转(Round-Robin)
-
算法思想
公平地、轮流地为各个进程服务,让每个进程在一定时间间隔内都可以得到响应
-
算法规则
- 按照各进程到达就绪队列的顺序,轮流让每个进程执行一个时间片。如果进程在一个时间片没有执行完,操作系统会剥夺处理机,将进程重新放到就绪队列队尾
-
用于作业/进程调度
只用于进程调度(只有作业放入内存建立相应的进程后,才能分配处理机时间片)
-
是否可抢占
抢占式算法,若进程未在时间片内执行完,由硬件(时钟装置)发出时钟中断来通知CPU时间片已经到了 -
优缺点
优点- 公平、响应快,适用分时操作系统(初代支持人机交互操作系统,可以支持多个用户通过终端同时使用一台计算机)
缺点 - 由于高频率的进程切换,因此有一定开销,且没有区分任务的紧急程度
- 公平、响应快,适用分时操作系统(初代支持人机交互操作系统,可以支持多个用户通过终端同时使用一台计算机)
-
是否会导致饥饿
不会
补充
设置好时间片大小,比如2
如果需要运行的小于时间片大小,主动放弃处理机,也会发生调度
时间片足够大于每个进程的运行时间时,跟先来先服务算法一样
也不能太小,进程调度、切换是有时间代价的(保存、恢复运行环境)
五、优先级调度算法
-
算法思想
实时操作系统的出现
-
算法规则
调度时选择优先级最高的作业或者进程
-
用于作业/进程调度
既可以用于作业调度,也可以用于进程调度,甚至可以用于I/O调度
-
是否可抢占
抢占式和非抢占式都有。
非抢占式意味着进程主动放弃处理机,才会发生调度
抢占式意味着除了进程主动放弃处理机情形外,每次就绪队列发生变化都要检查是否发生抢占,若就绪队列出现优先级比运行中的更高,则也会发生调度 -
优缺点
优点- 可以灵活地调整各种进程被服务的机会
- 用优先级区分紧急程度、重要程度,适用于实时操作系统
缺点
- 若源源不断有高优先级进程到来,则可能导致饥饿
-
是否会导致饥饿
会
补充:
就绪队列未必只有1个,可以按照不同优先级来组织。另外可以把优先级高的进程排在队头
根据优先级是否可以动态改变
- 静态优先级。创建进程时就确定好了,之后一直不会改变
- 动态优先级。创建进程会给默认值,后面根据情况动态调整优先级
思考一,如何合理确定进程的优先级?
- 思想就是将进程分类
- 系统进程优先级>用户进程优先级
- 前台进程优先级>后台进程优先级
- 操作系统更偏爱I/O型进程,也就是最高优先级
思考二,如果采用动态优先级,什么时候调整?
- 从公平、提升资源利用率角度考虑
- 如果某进程在就绪队列等待了很长时间,适当提升它的优先级(有点像高响应比算法)
- 如果某进程在处理机运行了很长时间,则降低它的优先级
- 如果某进程在进行频繁I/O操作,则适当提升它的优先级
六、多级反馈队列调度算法
-
算法思想
对前面调度算法的折中权衡
-
算法规则
- 设置多级就绪队列,按优先级从高到低,并且优先级越高的就绪队列设置时间片越小
- 新进程进入就绪队列时,先进入第1级队列,按照先来先服务调度算法,等待分配时间片。
- 当前运行进程用完时间片还有运行时间,则该进程下放到下1级队列的队尾,如果是最下级队列,则直接放回队尾
- 只有当高级的队列为空的时候,低级的队列才会分配时间片,如果某刻高级队列为空,低级队列分配处理机后,新进程进入第1级队列,则会发生抢占。
-
用于作业/进程调度
只用于进程调度
-
是否可抢占
抢占式算法,在k级队列的进程在运行中,若小于k,也就是更上级的队列进入新进程,则会发生抢占,当前运行的进程会放回当前队列的队尾 -
优缺点
优点- 对各类型的进程相对公平(先来先服务算法特点);
- 每个新到达的进程都很快得到响应(时间片轮转算法特点);
- 短进程(多级反馈队列调度只有进程调度)用较少时间就可以完成(SPF的特点);
- 不必实现估计进程的运行时间,这样一来可以避免用户作假
- 可以灵活调整对各类进程的偏好程度,比如CPU密集型进程、I/O密集型进程(优先级调度算法特点)
- 较好适用实时操作系统
-
是否会导致饥饿
会哦
前面三种比较适用早期的批处理操作系统,后面三种适合现在的实时操作系统
作业和进程的关系可以在这里查看
进程、线程、程序、任务和作业的联系