调度算法
引言
算法概念
本文介绍的是调度算法,跟算法还是有关联的,我们平时可能觉得算法这个东西很难,可能也会很抵制或这个概念,其实他并不是很难,算法只是我们处理事情的思维逻辑而已。
就像你做一件事,你的规划就可以称之为一种算法。算法只是一个思考的过程,它可以间接的去生成结果,但无法直接得到结果。
那它在调度里有什么用呢,下面我们来介绍调度
调度概念
调度按照字面意思来讲就是把一些资源通过某种规则从一个地方放到另一个地方,这就称之为调度。这里的资源的概念很广泛,你想让它是什么就是什么。而这里提到了通过某种规则,而这种规则就称之为算法,进而产生了我们的调度算法。例如:先来先服务(FCFS)、短作业优先、优先级调度、高响应比优先、时间片轮转(RR)和多级反馈队列。下边我们来依次介绍各个算法
计算机中的调度是外存–>内存–>CPU的任务调度。其分为高级调度(外存–>内存)、中级调度(外存–>内存)和低级调度(内存–>CPU)
复习任务不在,这里后续在介绍
调度算法的评价指标
调度算法的评价指标有:CPU利用率,系统吞吐量,周转时间(平均周转,带权周转,平均带权周转),等待时间和响应时间。下边依次介绍
CPU利用率
CPU利用率:CPU忙碌时间占总工作时间的比例
利用率=忙碌时间/工作总时间
系统吞吐量
系统吞吐量:单位时间内完成作业的数量
系统吞吐量=完成作业数总和/总共花费时间
周转时间
周转时间:从作业被提交给系统开始,到作业完成为止的这段时间间隔。
周转时间=作业完成时间-作业提交时间
平均周转时间=(各作业的周转时间之和)/作业数
带权周转时间=作业周转时间/作业实际运行时间
平均带权周转时间=各作业周转时间之和/作业数
等待时间
等待时间:作业等待处理机状态时间的总和
响应时间
响应时间:指用户提出请求到首次响应时间所用的时间
算法介绍
先来先服务(FCFS,First Come First Serve)
关键知识点 | 概念 |
---|---|
算法思想 | 先到先接受服务,类似于我们超市购物 |
算法规则 | 按照作业/进程的先后到达顺序进行服务 |
是否可抢占 | 非抢占式算法 |
优点 | 比较公平 |
缺点 | 对长作业有利,短作业不利(短作业排在长作业后边的话会消耗掉大量时间) |
是否会产生饥饿现象 | 不会 |
短作业优先算法(SJF,Shortest Job First)
关键知识点 | 概念 |
---|---|
算法思想 | 追求最少的平均等待时间、最少的平均周转时间、最少的平均平均带权周转时间 |
算法规则 | 最短的作业/进程优先得到服务 |
是否可抢占 | 非抢占式算法 |
优点 | 对短作业有利,缩短了平均等待时间、平均周转时间 |
缺点 | 不公平,对长作业不利,可能产生饥饿现象 |
是否会产生饥饿现象 | 会 ,在源源不断短作业/进程到达的时候,会导致长进程得不到服务,进而发生饿死现象 |
高响应比优先算法(HRRN,Highest Response Ratio Next)
响应比计算公式=(等待时间+要求服务时间)/要求服务时间 响应比>=1
关键知识点 | 概念 |
---|---|
算法思想 | 综合考虑作业/进程的等待时间和要求服务时间 |
算法规则 | 在每次调度时,先计算各个作业/进程的响应比,选择响应比比较高的作业/进程为其服务 |
是否可抢占 | 非抢占式算法 |
优点 | 上述两种算法的权衡折中,综合考虑的等待时间和运行时间 |
缺点 | 无吧 |
是否会产生饥饿现象 | 不会 |
时间片轮转算法(RR,Round-Robin)
关键知识点 | 概念 |
---|---|
算法思想 | 公平的轮流的为各个进程服务,让每一个进程在一定时间间隔内都可以响应 |
算法规则 | 按照进程到达就队列的顺序,轮流让各个进程执行一个时间片。若没有执行完就下处理机在排到就就绪队列队尾 |
是否可抢占 | 抢占时算法 |
优点 | 公平,响应快,适用于分时操作系统 |
缺点 | 由于高频率的进程切换,因此有一定的开销;不区分任务的紧急情况 |
是否会产生饥饿现象 | 不会 |
补充:时间片过大或过小的影响
时间片过小,会因为高频率的进程切换,导致大量开销,从而影响系统的效率
时间过大,进而就变成了先来先服务算法
优先级调度算法
上提到了不区分任务的紧急情况,而优先级调度解决了这一情况
关键知识点 | 概念 |
---|---|
算法思想 | 根据任务的应用场景,给任务新增优先级标签,以优先级的程度来决定处理顺序 |
算法规则 | 调度时优先选择优先级最高的作业/进程 |
是否可抢占 | 抢占式、非抢占式都有 |
优点 | 可以区分任务的紧急程度,重要程度,适用与实时操作系统 |
缺点 | 会导致饥饿状态 |
是否会产生饥饿现象 | 是 |
多级反馈队列算法
关键知识点 | 概念 |
---|---|
算法思想 | 对其他调度算法的折中权衡 |
算法规则 | 详情请看表格下方 |
是否可抢占 | 抢占式 |
优点 | |
缺点 | |
是否会产生饥饿现象 | 会 |
算法规则
1.设置多级就绪队列,各级队列优先级从高到低,时间片从小到大
2.新进程首先进入1级队列,按照FCFS+RR的方式进行执行,不过与RR不同的是,在进程执行一个时间片后,若是还没有完成,则下沉到第二队列,在次没有在一个时间片时间执行完毕就继续下沉,直至到地K的序列。这里的K代表的是最后的队列
3.只有当上一级队列的所有任务都执行过一个时间片后,才会执行下边一级队列。
例题
作业 | 到达时间 | 运行时间 |
---|---|---|
j1 | 8:00 | 120 |
j2 | 8:50 | 50 |
j3 | 9:00 | 10 |
j4 | 9:50 | 20 |
用先来先服务算法、最短作业优先算法、高响应比优先算法分别计算出作业的平均周转时间和带权的平均周转时间
先来先服务计算
首先我们要先计算周转时间,上边提到了周转时间是程序运行结束-程序到达时间,然后在计算带权周转时间,带权周转时间=周转时间/程序实际运行时间,然后我们的表格就要变为
作业 | 到达时间 | 运行时间 | 开始时间 | 结束时间 | 周转时间 | 带权周转时间 |
---|---|---|---|---|---|---|
j1 | 8:00 | 120 | 8:00 | 10:00 | 120 | 1 |
j2 | 8:50 | 50 | 10:00 | 10:50 | 120 | 2.4 |
j3 | 9:00 | 10 | 10:50 | 11:00 | 120 | 12 |
j4 | 9:50 | 20 | 11:00 | 11:20 | 90 | 4.5 |
平均周转时间就是各作业周转时间总和/作业数
即(120+120+120+90)/4=112.5
平均带权周转时间=各作业平均周转时间总和/作业数
即(1+2.4+12+4.5)/4=4.795
最短作业优先
由于最先到的程序是j1,在j1执行期间j2,j3,j4到达,所以j2,j3,j4是谁短谁先运行
作业 | 到达时间 | 运行时间 | 开始时间 | 结束时间 | 周转时间 | 带权周转时间 |
---|---|---|---|---|---|---|
j1 | 8:00 | 120 | 8:00 | 10:00 | 120 | 1 |
j2 | 8:50 | 50 | 10:30 | 11:20 | 150 | 3 |
j3 | 9:00 | 10 | 10:00 | 10:10 | 70 | 7 |
j4 | 9:50 | 20 | 10:10 | 10:30 | 40 | 2 |
平均周转时间=(120+150+70+40)/4=95
平均带权周转时间=(1+3+7+2)/4=3.25
高响应比优先算法题解
首先我们还是先运行j1,因为他先到。当j1运行结束之后再去计算j2,j3,j4的响应比时间。决定谁先运行,每运行结束一个我们都要计算一次响应比。之至最后。
作业 | 到达时间 | 运行时间 |
---|---|---|
j1 | 8:00 | 120 |
j2 | 8:50 | 50 |
j3 | 9:00 | 10 |
j4 | 9:50 | 20 |
首先先执行j1,j1执行结束,我们来到10:00时刻
响应比计算公式=(等待时间+要求服务时间)/要求服务时间
作业 | 到达时间 | 运行时间 | 等待时间 | 响应比 |
---|---|---|---|---|
j2 | 8:50 | 50 | 70 | 2.4 |
j3 | 9:00 | 10 | 60 | 7 |
j4 | 9:50 | 20 | 10 | 1.5 |
这里我们不用画表的,直接用公式计算,如下图:(画表只是为了更直观展示)
R是高响应比的计算符号(平时考试可以忽略,但考研别大意)
高响应比,所以我们要执行响应比高的。及执行j3,j3执行完毕,我们来到10:10时刻
作业 | 到达时间 | 运行时间 | 等待时间 | 响应比 |
---|---|---|---|---|
j2 | 8:50 | 50 | 80 | 2.6 |
j4 | 9:50 | 20 | 20 | 2 |
所以我们接下来执行j2,最后执行j4.这样我们就得出了程序执行的顺序。然后通过表格来计算各个程序的运行时间
作业 | 到达时间 | 运行时间 | 开始时间 | 结束时间 | 周转时间 | 带权周转时间 |
---|---|---|---|---|---|---|
j1 | 8:00 | 120 | 8:00 | 10:00 | 120 | 1 |
j2 | 8:50 | 50 | 10:10 | 11:00 | 130 | 2.6 |
j3 | 9:00 | 10 | 10:00 | 10:10 | 70 | 7 |
j4 | 9:50 | 20 | 11:00 | 11:20 | 80 | 4 |
平均周转时间=(120+130+80+70)/4=97.5
平均带权周转时间=(1+2.6+7+4)/4=3.625