Tips
:各种调度算法的学习思路
-
算法思想
-
算法规则
-
这种调度算法是用于作业调度还是进程调度?
-
抢占式? 非抢占式?
-
优点和缺点
-
是否会导致 饥饿 \color{red}饥饿 饥饿
某 进程/作业 长期得不到服务
1、时间片轮转(RR, Round-Robin)
1.1、例子
常用于分时操作系统,更注重 “响应时间”,因而此处不计算周转时间
例题:各进程到达就绪队列的时间、需要的运行时间如下表所示。使用时间片轮转调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间。
时间片为 5 的情况
若按照先来先服务调度算法
1.2、时间片太大/小的影响
如果时间片太大,使得每个进程都可以在一个时间片内就完成,
-
则时间片轮转调度算法
退化
为先来先服务调度算法,并且 会增大进程响应时间 \color{red}会增大进程响应时间 会增大进程响应时间。
比如:系统中有 10 个进程在并发执行,如果时间片为 1 秒,则一个进程被响应可能需要等 9 秒…
-
也就是说,如果用户在自己进程的时间片外通过键盘发出调试命令,
可能需要等待 9 秒才能被系统响应
-
其实就是时间片太长了,导致后面的进程等待时间也会太长
-
-
因此时间片不能太大。
另一方面,进程调度、切换是有时间代价的(保存、恢复运行环境),
-
因此如果时间片太小,会导致
进程切换过于频繁
(不断地频繁切换用户态与内核态),系统会花大量的时间来处理进程切换,从而导致实际用于进程执行的时间比例减少。
-
可见时间片也不能太小。
一般来说,设计时间片时要让切换进程的开销占比不超过 1 % 1\% 1%
2、优先级调度算法
例题:各进程到达就绪队列的时间、需要的运行时间、进程优先数如下表所示。使用非抢占式的优先级调度算法,分析进程运行情况。(注:优先数越大,优先级越高)
2.1、非抢占式的
.2.2、抢占式的
2.3、静态/动态优先级
就绪队列未必只有一个,可以按照不同优先级来组织。
- 另外,也可以把优先级高的进程排在更靠近队头的位置
根据优先级是否可以动态改变,可将优先级分为静态优先级和动态优先级两种。
静态优先级 \color{red}静态优先级 静态优先级:
- 创建进程时确定,之后一直不变。
动态优先级 \color{red}动态优先级 动态优先级:
- 创建进程时有一个初始值,之后会根据情况动态地调整优先级。
如何合理地设置各类进程地优先级?
通常:
- 系统进程优先级 高于 用户进程
- 前台进程优先级 高于 后台进程
- 操作系统更偏好
I/O
型进程(或称I/O
繁忙型进程)
注:与 I/O
型进程相对的是计算型进程(或称 CPU
繁忙型进程)
I/O
设备和 CPU
可以并行工作。如果优先让 I/O
繁忙型进程优先运行的话,
- 则越有可能让
I/O
设备尽早地投入工作,则资源利用率、系统吞吐量都会得到提升 I/O
花费的时间一般比较长,尽早处理完I/O
若采用 CPU
繁忙型进程的话,
CPU
优先于I/O
,则CPU
运行完之后,此时后备队列中没有队列了,需要等待I/O
设备输入
如果采用的是动态优先级,什么时候应该调整?
可以从追求公平、提升资源利用率等角度考虑
-
如果某进程在就绪队列中等待了很长时间,则可以适当提升其优先级
-
如果某进程占用处理机运行了很长时间,则可适当降低其优先级
-
如果发现一个进程频繁地进行
I/O
操作,则可适当提升其优先级
HRRN
高响应比优先调度算法,可以认为是动态地优先级调度算法
3、多级反馈队列调度算法
FCFS
算法的优点是公平
SJF
算法的优点是能尽快处理完短作业,平均等待/周转时间等参数很优秀
时间片轮转调度算法可以让各个进程得到及时的响应
优先级调度算法可以灵活地调整各种进程被服务的机会
能否对其他算法做个折中权衡? 得到一个综合表现优秀平衡的算法呢?
- 多级反馈队列调度算法
由于进程源源不断地到来会使得高优先级的队列始终非空,而低优先级的队列需要等待高优先级的队列为空时才能使用,导致低优先级队列中的进程饥饿
4、总结
算法 | 可抢占? | 优点 | 缺点 | 会导致饥饿? | 补充 |
---|---|---|---|---|---|
时间片轮转 | 抢占式 | 公平;适用于分时系统 | 频繁切换有开销;不区分优先级 | 不会 | 时间片太大或太小导致的影响 |
优先级调度 | 有的抢占式的,有的非抢占式的 | 区分优先级;适用于实时系统 | 可能导致饥饿 | 会 | 动态/静态优先级。各类型型进程如何设置优先级?如何调整优先级 |
多级反馈队列 | 抢占式 | 平衡优秀;6(9 翻了) | 一般不说它优缺点;不过可能导致饥饿 | 会 |
注:比起早期的批处理操作系统来说,由于计算机造价大幅降低,因此之后出现的交互式操作系统(包括分时操作系统、实时操作系统等)更注重系统的响应时间、公平性、平衡性等指标。
- 而这几种算法恰好也能较好地满足交互式系统的需求。
因此这三种算法适合用于 交互式系统 \color{red}交互式系统 交互式系统
- 比如
UNIX
使用的就是多级反馈队列调度算法