调度算法

2.2.4调度算法(1)_课程笔记

一、先来先服务(FCFS,First Come First Serve)

​ 例题:各进程到达就绪队列的时间、需要的运行时间如下表所示。使用先来先服务调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间。

2.2.4调度算法(1)_等待时间_02

​ 先来先服务调度算法:按照到达的先后顺序调度,事实上就是等待时间越久的越优先得到服务。

​ 因此,调度顺序为:P1 →P2→P3→P4

2.2.4调度算法(1)_课程笔记_03

​ 注意:本例中的进程都是纯计算型的进程,一个进程到达后要么在等待,要么在运行。如果是又有计算、又有I/O操作的进程,其等待时间就是周转时间-运行时间-I/O操作的时间

2.2.4调度算法(1)_调度算法_04

2.2.4调度算法(1)_计算机操作系统_05



二、短作业优先(SJF, Shortest Job First )

​ 例题:各进程到达就绪队列的时间、需要的运行时间如下表所示。使用非抢占式(严格来说,用于进程调度应该称为短进程优先调度算法(SPF))的短作业优先调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间。

2.2.4调度算法(1)_等待时间_02

​ 短作业/进程优先调度算法:每次调度时选择当前已到达运行时间最短的作业/进程。

​ 因此,调度顺序为:P1→P3→P2→P4

2.2.4调度算法(1)_平均等待时间_07

2.2.4调度算法(1)_计算机操作系统_08

​ 对比FCFS算法的结果,显然SPF算法的平均等待/周转/带权周转时间都要更低


​ 例题:各进程到达就绪队列的时间、需要的运行时间如下表所示。使用抢占式(抢占式的短作业优先算法又称“最短剩余时间优先算法(SRTN))的短作业优先调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间。

2.2.4调度算法(1)_等待时间_02

最短剩余时间优先算法:每当有进程加入就绪队列改变时就需要调度,如果新到达的进程剩余时间比当前运行的进程剩余时间更短,则由新进程抢占处理机,当前运行进程重新回到就绪队列。另外,当一个进程完成时也需要调度

2.2.4调度算法(1)_计算机操作系统_10

​ 需要注意的是,当有新进程到达时就绪队列就会改变,就要按照上述规则进行检查。以下Pn(m)表示当前Pn进程剩余时间为m。各个时刻的情况如下:

​ 0时刻(P1到达):P1(7)

​ 2时刻(P2到达)????1(5)、 P2(4)

​ 4时刻(P3到达)????1(5) 、 P2(2)、 P3(1)

​ 5时刻(P3完成且P4刚好到达): P1(5)、 P2(2) 、 P4(4)

​ 7时刻(P2完成)????1(5)、 P4 (4)

​ 11时刻(P4完成):P1(5)

2.2.4调度算法(1)_平均等待时间_11

​ 对比非抢占式的短作业优先算法,显然抢占式的这几个指标又要更低


注意几个小细节:

​ 1.如果题目中未特别说明,所提到的“短作业/进程优先算法”默认非抢占式

​ 2.很多书上都会说“SJF调度算法的平均等待时间、平均周转时间最少”

​ 严格来说,这个表述是错误的,不严谨的。之前的例子表明,最短剩余时间优先算法得到的平均等待时间、平均周转时间还要更少。应该加上一个条件“在所有进程同时可运行时,采用SJF调度算法的平均等待时间、平均周转时间最少”;或者说“在所有进程都几乎同时到达时,采用SJF调度算法的平均等待时间、平均周转时间最少”;如果不加上述前提条件,则应该说“抢占式的短作业/进程优先调度算法(最短剩余时间优先, SRNT算法)的平均等待时间、平均周转时间最少”

​ 3.虽然严格来说,SIF的平均等待时间、平均周转时间并不一定最少,但相比于其他算法(如FCFS),SJF依然可以获得较少的平均等待时间、平均周转时间

​ 4.如果选择题中遇到“SJF算法的平均等待时间、平均周转时间最少”的选项,那最好判断其他选项是不是有很明显的错误,如果没有更合适的选项,那也应该选择该选项

2.2.4调度算法(1)_调度算法_12


对FCFS和SJF两种算法的思考..

​ FCFS算法是在每次调度的时候选择一个等待时间最长的作业(进程)为其服务。但是没有考虑到作业的运行时间,因此导致了对短作业不友好的问题

​ SJF算法是选择一个执行时间最短的作业为其服务。但是又完全不考虑各个作业的等待时间,因此导致了对长作业不友好的问题,甚至还会造成饥饿问题

​ 能不能设计一个算法,即考虑到各个作业的等待时间,也能兼顾运行时间呢?



三、高响应比优先(HRRN,Highest Response Ratio Next)

​ 例题:各进程到达就绪队列的时间、需要的运行时间如下表所示。使用高响应比优先调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间。

2.2.4调度算法(1)_等待时间_02

高响应比优先算法:非抢占式的调度算法,只有当前运行的进程主动放弃CPU时(正常/异常完成,或主动阻塞),才需要进行调度,调度时计算所有就绪进程的响应比选响应比最高的进程上处理机。

2.2.4调度算法(1)_调度算法_14

2.2.4调度算法(1)_平均等待时间_15

2.2.4调度算法(1)_计算机操作系统_16



2.2.4调度算法(1)_课程笔记_17

​ 注:这几种算法主要关心对用户的公平性、平均周转时间、平均等待时间等评价系统整体性能的指标,但是不关心“响应时间”,也并不区分任务的紧急程度,因此对于用户来说,交互性很糟糕。因此这三种算法一般适合用于早期的批处理系统,当然,FCFS算法也常结合其他的算法使用,在现在也扮演着很重要的角色。而适合用于交互式系统的调度算法将在下个小节介绍...

提示:一定要动手做课后习题!这些算法特性容易考小题,算法的使用常结合调度算法的评价指标在大题中考察。