Tips
:各种调度算法的学习思路
-
算法思想
-
算法规则
-
这种调度算法是用于作业调度还是进程调度?
-
抢占式? 非抢占式?
-
优点和缺点
-
是否会导致 饥饿 \color{red}饥饿 饥饿
某 进程/作业 长期得不到服务
算法 | 可抢占? | 优点 | 缺点 | 考虑到等待时间 & 运行时间 | 会导致饥饿? |
---|---|---|---|---|---|
FCFS | 非抢占式 | 公平;实现简单;利于长作业 | 不利于短作业 | 等待时间 ✔; 运行时间 ❌ | 不会 |
SJF/SPF | 默认为非抢占式;也有 SJF 抢占式版本最短剩余时间优先算法(SRTN) | “最短的” 平均等待 / 周转时间;利于短作业 | 不利于长作业,可能会导致饥饿;难以做到正真的短作业优先 | 等待时间 ❌; 运行时间 ✔ | 会(导致长作业饥饿) |
HRRN | 非抢占式 | 上述两种算法的均衡考虑,综合考虑的等待时间和运行时间 | 等待时间 ✔; 运行时间 ✔ | 不会 |
1、FCFS
例题:各进程到达就绪队列的时间、需要的运行时间如下表所示。使用先来先服务调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间。
2、SJF
2.1、非抢占式的 SJF
例题:各进程到达就绪队列的时间、需要的运行时间如下表所示。使用非抢占式的短作业优先(严格来说,用于进程调度应该称为短进程优先调度 SPF
)调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间。
2.2、抢占式的 SJF(最短剩余时间优先算法SRTN)
2.3、注意
1 . 如果题目中未特别说明,所提到的 “短作业/进程优先算法” 默认是非抢占式的
2 . 很多书上都会说 “ SJF
调度算法的平均等待时间、平均周转时间最少”
严格来说,这个表述是错误的,不严谨的。之前的例子表明,最短剩余时间优先算法得到的平均等代时间、平均周转时间还要更少
应该加上一个条件 “在所有进程同时可运行
时,采用 SJF
调度算法的平均等待时间、平均周转时间最少”;
或者说 “在所有进程都几乎同时到达时
,采用 SJF
调度算法的平均等待时间、平均周转时间最少” ;
如果不加上述前提条件,则应该说 “抢占式的
短作业/进程优先调度算法(最短剩余时间优先, SRTN
算法)的平均等待时间、平均周转时间最少”
3.虽然严格来说,SJF
的平均等待时间、平均周转时间并不一定最少,
- 但相比于其他算法(如
FCFS
) ,SJF
依然可以获得较少的平均等待时间、平均周转时间
4 .如果选择题中遇到 “ SIF
算法的平均等待时间、平均周转时间最少” 的选项,那最好判断其他选项是不是有很明显的错误,如果没有更合适的选项,那也应该选择该选项
3、二者思考
FCFS
算法是在每次调度的时候选择一个等待时间最长的作业(进程)为其服务。
- 但是没有考虑到作业的运行时间,因此导致了对短作业不友好的问题
SJF
算法是选择一个执行时间最短的作业为其服务。
- 但是又完全不考虑各个作业的等待时间,因此导致了对长作业不友好的问题,甚至还会造成饥饿问题
能不能设计一个算法,即考虑到各个作业的等待时间,也能兼顾运行时间呢?
- 高响应比优先算法
4、HRRN
响应比 \color{red}响应比 响应比 = 等待时间 + 要求服务时间 要求服务时间 =\large\frac{等待时间+要求服务时间}{要求服务时间} =要求服务时间等待时间+要求服务时间
例题:各进程到达就绪队列的时间、需要的运行时间如下表所示。使用高响应比优先调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间。
5、总结
算法 | 可抢占? | 优点 | 缺点 | 考虑到等待时间 & 运行时间 | 会导致饥饿? |
---|---|---|---|---|---|
FCFS | 非抢占式 | 公平;实现简单;利于长作业 | 不利于短作业 | 等待时间 ✔; 运行时间 ❌ | 不会 |
SJF/SPF | 默认为非抢占式;也有 SJF 抢占式版本最短剩余时间优先算法(SRTN) | “最短的” 平均等待 / 周转时间;利于短作业 | 不利于长作业,可能会导致饥饿;难以做到正真的短作业优先 | 等待时间 ❌; 运行时间 ✔ | 会(导致长作业饥饿) |
HRRN | 非抢占式 | 上述两种算法的均衡考虑,综合考虑的等待时间和运行时间 | 等待时间 ✔; 运行时间 ✔ | 不会 |
注:这几种算法主要关心对用户的公平性、平均周转时间、平均等待时间等评价系统整体性能的指标,但是不关心“响应时间”,也并不区分任务的紧急程度,因此对于用户来说,交互性很糟糕。
因此这三种算法一般适合用于 早期的批处理系统 \color{red}早期的批处理系统 早期的批处理系统,
当然,FCFS
算法也常结合其他的算法使用,在现在也扮演着很重要的角色。
- 而适合用于交互式系统的调度算法将在下个小节介绍…