2.2.5~2.2.7 七种调度算法
1. 先来先服务算法 (First Come First Serve, FCFS)
1.1 调度对象
进程、作业
FCFS算法用于调度进程时,很少作为主算法存在,常常与其他算法相结合。
1.2 算法规则
主要从公平的角度考虑 (类似生活中的排队买东西)。
按照作业/进程到达的先后顺序进行服务。
- 用于作业调度:考虑哪个作业先到达后备队列
- 用于进程调度:考虑哪个进程先到达就绪队列
非抢占式算法。
1.3 优缺点
- 优点:公平、算法实现简单
- 缺点:
- 效率低,对长作业比较有利,对短作业不利 (相对于SJF和高相应比优先算法)
- 有利于计算型(CPU繁忙型)进程,不利于I/O型 (I/O繁忙型)进程
备注:
- 在排长作业(进程)后面的短作业需要等待很长时间,带权周转时间很大,对短作业来说用户体验不好。所以对长作业有利,对短作业不利
- 因为I/O型进程中的计算完成后会进入阻塞态以等待I/O操作完成,其中大部分时间花在了等待I/O操作上。
长作业 == 给后面的短作业添堵,后面的短作业会"不满";I/O型进程 == 自己给自己添堵,自己会"不满"。
1.4 是否会导致饥饿
不会
备注:
-
饥饿:某作业/进程长时间得不到服务。
-
饿死:作业/进程一直到不到服务
2. 短作业优先(Shortest Job First, SJF)
2.1 调度对象
进程、作业
2.2 算法规则
追求最少的平均等待时间、最少的平均周转时间、最少的平均带权周转时间。
估计运行时间最短的作业 (或进程)优先得到处理机。
当其用于进程调度时,称之为"短进程优先算法(Shortest Process First,SPN)"。
SJF和SPN为非抢占式算法,但是也有抢占式的版本——最短剩余时间优先算法 (Shortest Remaining Time Next, SRTN)。
备注:
- 如果题目中未特别说明,所提到的"短作业 (或进程)优先算法"默认为非抢占式
- 在所有进程都几乎同时到达时,采用SJF调度算法的平均等待时间、平均周转时间最少
- 抢占式的短作业/进程优先调度算法 (最短剩余时间优先,SRNT算法) 的平均等待时间、平均周转时间最少
- 虽然严格来讲,SJF的平均等待时间、平均周转时间不一定最少,但相比于其他算法(如FCFS),SJF依然可以获得较少的平均等待时间、平均周转时间
- 选择中如果遇到"SJF算法的平均等待时间、平均周转时间最少"的选项,先判断其他选项是否更加合适,如果没有更合适的,则可以选包含这一内容的选项。
2.3 优缺点
- 优点:"最短的"平均等待时间、平均周转时间
- 缺点:
- 不公平。对短作业(或进程)有利,对长作业不利。
- 可能产生饥饿现象。
- 不一定能真正做到短作业优先调度。
备注:
用户提供的估计执行时间与作业的实际执行时间不一定相同,用户可以将作业的估计执行时间设置为小于实际需要的执行时间以获取更高的优先级。因此,该算法不一定能够真正做到短作业优先调度。
2.4 是否会导致饥饿
会。
如果源源不断地有短作业(或进程)进入后备队列(就绪队列),可能使长作业(或进程)长时间得不到服务,产生饥饿现象。
3. 高相应比优先 (Highest Response Ratio Next, HRRN)
3.1 服务对象
作业、进程
HRRN算法主要用于作业调度
3.2 算法规则
综合考虑作业/进程的等待时间和要求服务时间
在每次调度时先计算各个作业/进程的相应比,选择相应比最高的作业/进程为其服务
既可用于作业调度,也可用户进程调度。属于非抢占式算法,因此只有当前运行的作业/进程主动放弃处理机时,才需要调度,才需要计算相应比
3.3 优缺点
- 优点:
- 综合考虑了等待时间和运行时间(要求服务时间)。等待时间相同时,要求服务时间短的优先,类似SJF算法;要求服务时间相同时,等待时间长的优先,类似FCFS算法。
- 对于长作业来说,随着等待时间越来越久,其相应比也会越来越大,从而避免了FCFS算法中长作业的饥饿问题。
4. 时间片轮转 (Round-Robin, RR)
4.1 服务对象
进程
只有作业放入内存,建立了相应进程后才能被分配处理机时间片
4.2 算法规则
公平地、轮流地为各个进程服务,让每个进程在一定时间间隔内都可以得到相应
按照各个进程到达就绪队列的顺序,轮流让各个进程执行一个时间片(如100ms)。若进程未在一个时间片内执行完,则剥夺处理机,将进程重新放到就绪队列队尾重新排队。
若进程未能在时间片内运行完,将被强行剥夺处理机使用权,因此时间片轮转调度算法属于抢占式算法。由时钟装置发出时钟中断来通知CPU时间片已到。
备注:
- 如果时间片太大,使得每个进程都可以在一个时间片内完成,则时间片轮转调度算法退化为FSFS算法,并且会增大进程响应时间。因此,时间片不能太大。
- 进程的调度、切换是有时间代价的 (保存、恢复运行环境),因此如果时间片太小,会导致进程切换过于频繁,系统会花大量时间来处理进程切换,从而导致实际用于进程执行的时间比例减小。所以,时间片也不能太小。
- 时间片的决定因素有:系统的响应时间、就绪队列中的进程数目、系统的处理能力。
4.3 优缺点
- 优点:公平、响应快,适用于分时操作系统。
- 缺点:
- 由于高频率的进程切换,因此有一定开销。
- 不区分任务的紧急程度。
4.4 是否会导致饥饿
不会
5. 优先级调度算法
5.1 服务对象
进程、作业
甚至会用于I/O调度中
5.2 算法规则
每个作业(或进程)有各自的优先级,调度时选择优先级最高的作业(或进程)
根据能否抢占,该算法可分为抢占式和非抢占式。
根据优先级能否动态改变,进程的优先级还可分为静态优先级和动态优先级。
一般来说,优先级设置如下:
-
系统进程 > 用户进程
-
交互型进程 > 非交互型进程
-
I/O型进程 (I/O繁忙型进程) > 计算型进程 (CPU繁忙型进程)
因为I/O型进程中,I/O设备的处理速度比CPU慢得多,因此,让I/O型获得更高的优先级,更有可能让I/O设备尽早开始工作,进而提升系统的整体效率
备注:
- 抢占式与非抢占式的优先级调度算法在做题时的区别在于:非抢占式只需在进程主动放弃处理机时进行调度即可,而抢占式还需要在就绪队列变化时,检查是否会发生抢占。
- 静态优先级与动态优先级的区别:
- 静态优先级:优先级是在创建进程时确定的,且在整个运行期间保持不变。
- 动态优先级:在进程运行过程中,会根据情况的变化动态地调整进程的优先级。
- 静态优先级与动态优先级确定进程优先级的主要依据:
- 静态优先级:进程类型、进程对资源的要求、用户要求
- 动态优先级:进程占有CPU的时间长短、就绪进程等待CPU的时间长短
5.3 优缺点
- 优点:用优先级区分紧急程度、重要程度,适用于实时操作系统。可灵活的调整对各种作业(或进程)的偏好程度
- 缺点:若源源不断地有更高优先级的进程到来,可能导致饥饿。
存疑:就绪队列未必只有一个,可以按照不同优先级来组织。另外,也可以把优先级高的进程排在更靠近队头的位置。
6. 多级队列调度算法 (先看7)
7.1 服务对象
进程
能否用于作业未查明
7.2 算法规则
与算法 1~5 不同,多级队列调度算法在系统中设置多个就绪队列,将不同类型或性质的进程固定分配到不同的就绪队列。
队列之间可采用固定优先级或时间片划分。
- 固定优先级:高优先级队列空时,才能开始调度低优先级队列中的进程。
- 时间片划分:如三个队列被分配的时间片为50%、40%、10%。
各个队列也可采用不同的调度策略,如第1级队列采用优先级调度、第2级队列采用RR、第3级采用FCFS。
7. 多级反馈队列调度算法
7.1 服务对象
作业、进程
7.2 算法规则
综合时间片轮转算法与优先级调度算法。
- 设置多个就绪队列,并为每个队列赋予不同的优先级。各级队列优先级从高到低,时间片大小从小到大。
- 每个队列都采取FCFS算法。新进程进入内存后,先进入第1级队列队尾,若其在一个该队列的时间片内未完成,则进入第2级队列,若在第二级队列中仍未完成,则进入第三级队列......以此类推,直至第n级队列,若仍未完成,则变为普通的时间片轮转算法进行调度。
- 算法按照队列的优先级依次调度每个就绪队列中的进程。当第i-1级队列中仍有进程未完成时,算法不会调度第i级队列中的进程运行。
7.3 优缺点
- 优点:
- 对各种类型的进程相对公平
- 周转时间短,每个新到达的进程都可以得到很快的相应
- 短进程作业优先
- 不必关心进程的估计运行时间,避免用户作假
- 可以灵活地调整对各类进程的偏好程度
- 缺点:若有可以在第1级队列的时间片内就可以完成的短进程,不断地进入第1级队列,会导致其他级别队列的进程发生饥饿现象。
调整各类进程偏好程度的例子:
可以将因I/O而阻塞的进程重新放回原队列,这样I/O型进程就可以保持较高的优先级
7.4 是否会导致饥饿
会。
各类调度算法的比较一览
| 先来先服务 | 短作业优先 | 高相应比 | 时间片轮转 | 优先级调度 | 多级反馈队列 | |
|---|---|---|---|---|---|---|
| 调度对象 | 进程、作业 | 进程、作业 | 进程、作业 | 进程 | 进程、作业 | 进程、作业 |
| 可抢占性 | 非抢占 | 非抢占、抢占 | 非抢占、抢占 | 抢占 | 抢占、非抢占 | 队列内算法不一定 |
| 默认可抢占性 | 非抢占 | 非抢占 | 非抢占 | 抢占 | - | 抢占 |
| 适用于 | - | 作业调度、批处理系统 | - | 分时系统 | 交互式系统 | 非常通用 |
| 是否可能导致饥饿 | × | √ | × | × | √ | √ |
备注:
时间片轮转、优先级调度、多级反馈队列算法适合于注重系统的响应时间、公平性、平衡性等指标的交互式系统 (包含分时操作系、实时操作系统等)
UNIX就是典型的分时操作系统,使用多级反馈队列算法。

浙公网安备 33010602011771号