CHS_06.2.2.4_2+调度算法:时间片轮转、优先级、多级反馈队列

CHS_06.2.2.4_2+调度算法:时间片轮转、优先级、多级反馈队列

  • 知识总览
    • 时间片轮转(RR, Round-Robin)
    • 例题
    • 例题
    • 时间片轮转(RR, Round-Robin)
    • 优先级调度算法
    • 例题
    • 优先级调度算法
    • 思考
    • 多级反馈队列调度算法
    • 多级反馈队列调度算法
    • 知识回顾

在这个小节中 我们会学习剩下的几种调度算法

知识总览

CHS_06.2.2.4_2+调度算法:时间片轮转、优先级、多级反馈队列_第1张图片

包括时间片轮转 优先级调度 多级反馈对列调度算法和上个小节一样

大家需要注意各种算法 他们的算法思想是什么 这些算法的提出主要是为了解决什么问题

第二点最需要关注的当然是这些算法到底是怎么运行的 他们的规则是什么

另外呢 这些算法到底是用于作业调度还是进程调度 分别有什么区别

还有这些算法到底是抢占式的还是非抢占式的 这些都需要大家

稍微注意一下 另外呢优点和缺点一定是这个小节和上个小节啊最最常作为选择题考察的知识点

最后 我们还需要关注这些算法到底有没有可能导致饥饿现象 那么我们会按从上至下的顺序依次讲解

时间片轮转(RR, Round-Robin)

CHS_06.2.2.4_2+调度算法:时间片轮转、优先级、多级反馈队列_第2张图片

首先 我们来看一下时间片轮转调度算法 这种算法的提出其实是为了公平轮流的为各个进程服务

然后可以让各个进程在一定的一定长度的时间间隔内都可以得到响应 其实时间片轮转调度算法

是伴随着分时操作系统的诞生而诞生的 那么这种算法的规则其实也相对来说也比较简单

就是操作系统会按照各个进程他们到达就绪队列的顺序 轮流的让各个进程执行一个时间片 而这个时间片的长短

是不一定的 就是有的操作系统可能会设置的长一点 有的可能会设置短一点

而有的甚至有可能会动态的调整 那么当一个进程他的时间片用完了之后
这个进程会被强行的剥夺处理机 然后把这个正在运行的进程重新放回
就是对列里再重新排队等待调度
而时间片轮调度算法 它一般是用于进程调度的

因为所谓时间片其实指的是处理机的时间片 而一个作业只有当它放入了内存并且建立了相应的进程之后

只有作为进程 它才有可能被分配处理机的时间片 因为进程肯定是执行的

基本单位嘛 所以说这个算法一定是用于进程调度的 而通过刚才的这个描述 我们会发现

当一个进程他的时间片用完之后 虽然说他还没有结束 但是有可能会被强行的剥夺处理机这个资源

所以说这种算法肯定是一种抢占式的算法 并不一定要等到这个进程主动的放弃处理机才会发生调度

而这种抢占式 或者说这种时间片的切换是由时钟 时钟装置 也就是某一种计时的硬件
来发出时钟中断来通知cpu时间片已到的
而时钟中断还有时钟装置这些具体的内容

会在计算机组成原理那门课里进行学习 如果不考这门课的同学 只需要有个了解 能有个印象就可以了

那么我们用一个例题来具体看一下这个算法到底是怎么运转的

例题

CHS_06.2.2.4_2+调度算法:时间片轮转、优先级、多级反馈队列_第3张图片

CHS_06.2.2.4_2+调度算法:时间片轮转、优先级、多级反馈队列_第4张图片
CHS_06.2.2.4_2+调度算法:时间片轮转、优先级、多级反馈队列_第5张图片

这些进程他们的到达次序依次是这样的 那么我们分别分析一下

如果我们我们把时间片大小分别设为二和五分别是什么情况

这个地方大家可能会注意到 在这个题目当中 我们并不像上一小节那几个调度算法一样 就是还还来计算它的

什么平均周转时间 平均等待时间 这些指标原因在于时间片轮转调度算法 它一般是用于分时操作系统的

比起之前所说的那些什么平均周转时间那些那些东西来说 这个这种类型的操作系统

会更关心进程的响应时间 所以在这个地方 我们也不再计算进程的什么等待时间 周转时间这些指标 当然如果说题目中要求大家计算的话 也需要自己要学会分析 不过我相信经过上一小节的讲解 大家应该已经学会怎么计算了

那么 如果说我们按照时间片大小为二来进行来运行的话

刚开始就绪 队列是空的 然后在零这个时刻p一进程

到达了 并且此时就绪队列当中只有p一这个进程 所以肯定是让p一上处理机运行一个时间片

而一个时间片的大小是二两个单位的时间长度 所以p一上处理机运行了两个单位的时间长度之后

这个时间片就用完了 然后会进行下一次调度 也就是在十克二的时候会进行一次调度

而这个时候 进程二p二刚好也在第二个时刻

到达并且p一它由运行态重新回到就绪态

然后又会重新插入到就绪队列的队尾 所以这个时刻

p2-0达就绪对列 让p一也会重新回到对位 虽然p一也是在二这个时刻下处理机 然后回到就绪对列里里的

而且p二这个进程也是在二这个时刻同时几乎是同时到达的 但是如果我们在题目当中遇到这种情况的话 我们一般是默认新到达的这个进程 也就是p二这个进程 它先插入就绪队列 然后之后

这个下处理机的进程在紧随其后 再回到 就是对列 所以我们把p二排在前 p一排在后

但是 如果题目中有特别的说明 那大家需要随机应变 根据题目给出的那个规则来进行分析

所以二这个时刻 由于此时p二是处于这个就绪队列的对头的

元素 所以我们会让p二上处理机运行 运行一个时间片

也就是两个单位的时间 那么在四这个时刻p3-0达

第3-0达 并且和刚才一样 p二也会紧接着下处理机

加入到这个就绪队列的对位 然后四这个时刻发生的调度就是选择对头的元素p一让他上处理机再执行两个

两个单位的时间 也就是一个时间片的大小 那么p一在执行了一个单位的时间 也就是到了五这个时刻的时候 p四

这个进程到达 所以p四会被插入到就绪队列的队位 但是需要注意的是

此时p4-0达 但是由于p一的时间片还没有用完 它的时间片大小为二但是此时只用了一个单位的时间 所以暂时不会发生调度

另外呢 为什么p一没有出现在这个就绪队列里呢 因为此时p一还处于运行态

所以他肯定是在cpu上执行的 所以p一不会现在 暂时不会出现在就绪队列当中

所以是这个样子 那么接下来 p一又会继续执行一个单位的时间 把他自己的这个时间片给用完 那么在六这个时刻

由于他时间片用完了 所以又会发生一次调度p一下 处理机重新放回就绪对电对

然后p三就是对头元素上处理机运行 然后需要注意的是

p三的运行时间总共只需要一个单位的时间 所以虽然说

就时间片的大小是二但是由于p三只需要运行一个单位的时间 所以在七这个时刻

p三就会主动的放弃处理机 所以虽然此时分配给p三的时间片他还没有用完 但是由于p三的主动放弃 所以我们也需要发生一次调度选择选择下一个进程上处理机 那么

p三放弃处理机之后 p二在对头 所以p二上处理机运行并且p二是在继续运行两个单位的时间

刚好就是他剩余的这个时间 那么皮尔在运行两个单位 之后九这个时刻又会发生调度 然后p四上处理机运行

接下来就和之前讲的那些情况很类似了 彼此运行一个时间片之后调度

然后p一再上处理机运行p一由于他只剩下一个单位的时间 所以当他运行了一个单位的时间也就到12这个时刻也会像p 他也会像p 31样主动的放弃处理机

于是p四这个进程又会被调度上处理机执行 在p四执行了一个时间片之后

操作系统会再次发生调度 但是由于此时就绪队列已经为空了 所以他会继续让p四接着运行一个时间片

那么到16这个时刻p四把他剩余的这些运行时间全部运行完 所以p四就结束了

那么16这个时刻也就意味着所有的进程已经完成 那这就是时间片大小为二的情况

接下来我们再来看一下时间片 大小为五的时候会发生什么 什么情况在刚开始

例题

CHS_06.2.2.4_2+调度算法:时间片轮转、优先级、多级反馈队列_第6张图片
CHS_06.2.2.4_2+调度算法:时间片轮转、优先级、多级反馈队列_第7张图片

零这个时刻只有p1到达 所以p上去处理机运行 而由于他的运行时间只有五个单位的时间 并且给他分配的时间片大小也为五

所以给他分配的这个时间片足够他运行结束 所以p在0-5

这段时间内p都会一直运行 而期间呢 二这个时刻四这个时刻

还有五这个时刻p二p三p四会一次到达 而在五这个时刻p一刚好运行完成 他就是下处理机 之后会发生第二次调度

这个时候 p二这个进程 由于他是先到达的 所以他排在对头 就去对列的对头 因此会选择让p二上处理机运行

同样的 p二的运行时间小于给他分配的这个时间片的大小

所以到九这个时刻 p二的时间片没有没有用完 但是它会主动的放弃处理机 然后进行第三次调度

此时就去对列里只剩p三和p四然后p三是排在对头的 所以p三

上处理机运行运行了一个单位的时间之后 p 三有主动的防气处理机 然后p四上处理机运行

到15这个时刻 p四运行了一个时间片大小的 这这么长的时间之后

啊 操作系统此时本来应该发生调度的 但他发现此时就绪队列已经为空了 所以他会让p四继续执行一个时间片 所以一直到16这个时刻

p四的所有的运行时间都已经运行了 那么它会放弃处理机 然后所有的进程就执行结束

所以这就时间片大小为五的情况 接下来我们再看看一个 就是 假如说我们按照先来先服务调度算法

来调度这些程序 这些进程的话 那么他的调度顺序是这样子 有没有发现他和我们刚才时间片尾五这种情况是很类似的

除了这个地方 操作系统还需要做一个小小的检查之外 其他的这些

就是发生调度的时机还要 甚至调度的顺序都是一模一样的 所以我们会有这样的一个结论

如果说我们的时间片太大 导致每个进程 几乎每个进程都可以在一个时间片内完成的话

那么时间片轮转调度算法就会退化为先来先服务

调度算法 在刚才咱们举的这个例子当中 假如我们把时间片的大小设置为六或是或者是比六更更大的值

那么 这个时间片轮转调度算法就会导致每一个进程都可以在

给自己分配的时间片之内就执行结束 所有的调度都只会发生在这些进程主动放弃处理机的时候 并且这些调度的顺序也会按照各个进程到答案

就是对列的先后顺序来一次调度 那么这个算法就完全退化为了先来先服务的调度算法

所以如果时间片太大的话 当然也会增大这些进程的响应时间 就失去了时间片轮软掉都算法最大的一个优点

所以时间片是不能选择的太大的 那么怎么理解它会增大各个进程的响应时间呢

比如说我们这个系统当中有十个进程正在并发的执行 如果说我们把时间片大小设置为一秒的话

那么 如果一个进程被响应 有可能需要等待九秒 如果一个用户在自己的时间片刚好用完的时候

发出了 通过键盘发出了一个调试命令 那么这个调试命令就需要等待九秒之后

才有可能被系统响应 所以这就大大的增加了进程的响应时间

而第二点 如果我们把时间片设置的太小的话 又会导致进程的切换过于频繁

我们在之前的讲解当中 我们已经知道进程调度和切换 由于它需由于需要保存恢复运行环境 然后中间处理一系列的事情

所以调度和切换其实是需要付出一定的时间代价的 所以如果说进程切换过于频繁 那么系统会花大量的大部分的时间来处理进程切换中间的这些这些这些事情

从而导致我们实际进行进程运行进程执行的时间比例反而会减少

所以可以看到时间片的大小 如果选的太小的话 其实也是不利的

因此我们一定要选择一个时间片大小适中的这种这种这种情况

而什怎么定义这个时间片太小呢 一般来说 在设计时间片的大小的时候 可以让

就是切换进程所造成的开销比例占比不超过1%那么在这种情况下 我们就认为这样的时间片不是太小

就是可以接受的 而这个一般来说不会考察 只是作为一个拓展 让大家能有更进一步的了解

时间片轮转(RR, Round-Robin)

CHS_06.2.2.4_2+调度算法:时间片轮转、优先级、多级反馈队列_第8张图片

那么 这就是时间片轮转调度算法的一系列的规则 还有一些细节优点呢

就很明显就是对各个进程都是公平的 会轮流的为他们服务 并且响应很快

只要我们设置的时间片大小是合理的 那么就会在一定的时间间隔内就可以给各个进程 各个用户都有一个响应

所以这种这种调度算法就比较适合于分时操作系统 可以为各个用户分配一个大小的时间片

而缺点呢就是刚才咱们说的用于竞神切换的时候会有一定的开销

另外呢 这个算法 它并不区分任务的紧急程度 而通过刚才对算法规则的了解 我们会发现这种算法其实是不可能导致饥饿的

因为他肯定是轮流的 会为哥哥进程服务 最后我们需要注意的是 刚才强调的问题就是时间偏带太大或者太小

分别会有什么影响 这个在选择题当中经常会作为考察 那以上就是时间片轮转调度算法

优先级调度算法

CHS_06.2.2.4_2+调度算法:时间片轮转、优先级、多级反馈队列_第9张图片

下种算法是优先级调度算法 这种算法其实是随着计算机的发展 然后越来越多的应用场景需要根据任务的紧急程度 重要程度来决定处理这些任务 处理这些进程的顺序

所以就提出了优先级调度算法 会为每一个作业或者进程设置一个优先级 然后在调度的时候会选择优先级最高的一个进程或者作业进行调度 那么这个这个

算法的规则并不复杂 这个算法既可以用于作业调度 也可以用于进程调度

啊 没的区别在于作用于作业调度的时候 就是把一个处于外存当中的外存后备对列当中的作业 让他选择它 然后进入内存 然后用于进程调度的时候 是

选择一个在内存的就绪队列当中的一个进程 为他分配处理机 这一点咱们在之前的讲解当中也已经强调过很多遍

那么优先级调度算法甚至还可以用于我们之后会学到的l调度

那这个算法呢 他既有抢占式的 也有非抢占式的版本 在做题的时候 我们需要注意的是

非抢占式的 我们只需要在一个进程主动放弃处理机的时候来检查

这个时候进行调度就可以 而如果说题目告诉我们采用的是抢占式的优先级调度算法的话 那么当一个就绪对列发生改变的时候 我们也需要检查是否会发生抢占 那具体我们用一个例题来进行

例题

CHS_06.2.2.4_2+调度算法:时间片轮转、优先级、多级反馈队列_第10张图片
CHS_06.2.2.4_2+调度算法:时间片轮转、优先级、多级反馈队列_第11张图片

说明各个进程的到达时间 运行时间 还有优先数是像这个样子

这个地方优先数越大 优先级越高 大家需要注意的是 优先数和优先级的概念并不并不一样

有的题目当中有可能是优先数越小 优先级越高 所以具体要看题目给出的信息和条件

那既然采用的是非抢占式的优先级调度算法 那么也就是说我们只需要关注

各个进程主动放弃处理机的时候 这个时刻就可以了 所以整个调度的情况是这样子

在零这个时刻p一只 整个系统当中只有p一这个进程到达 所以

p一理所应当让他上处理机运行 而只有p一主动放弃处理机 也就是他运行了七个单位的时间之后 我们才会进行第二次的调度

在这个时候 其他的这些进程都已经到达了 但是由于p三的优先数最高 也就是优先级最高 所以我们会在这次调度当中 选择优先级最高的p三进程 让他上处理机运行

ip3-8这个时刻也就运行了一个单位的时间之后 他会主动的放弃处理机 接下来就是下一次调度

那么 p二和p四这两个进程 它们的优先级是一样的 但是不同的在于不同点在于p二它的到达时间是要比p四更早的

所以 p二会优先上处理机运行 然后p二运行四个单位的时间 之后再调度 再进行下次调度 此时只剩下p四然后p四运行

一直到他结束就16这个时刻 那这就是非强战式的优先级调度算法 而如果我们采用的是抢战式的优先级调度算法的话

就是我们除了要关注各个进呃 各个进程主动放弃处理机这样的一个时刻之外

我们还需要关注这个就绪 对列发生改变的时刻 我们要检查一下到底是不是会发生抢占

是不是是不是当前到达的这个进程优先级要比此时正在运行的进程优先级还要更高

那么 在零这个时刻 p1-0达只有p系统 当中只有p一这个进程 所以p力所应当商处理机

但是 当他运行到二这个时刻的时候 p二进程到达了 那p二的优先级要比p一更高 所以p二会抢占处理机 然后p一回到就绪对列

所以p二在抢占了处理机之后 他又会继续运行

直到三直到四这个时刻p 三进程到达就绪对列 也就是说 就绪对列发生了改变

所以这个时候 系统也会检查到底是否会发生抢占 由于p三的优先级是更高的 所以当然p三会抢占处理机 p三上处理机运行

那么 当p三运行到五这个时刻的时候 他会他运已经运行结束 因为他只需要运行一个单位的时间 然后他会主动的放弃处理机

接下来的调度 接下来这个五这个时刻p四刚好也已经到达了焦绪对列 然后插到了对位

但是 由于p二进入这个就绪队列的时间更早一些 所以我们依然会优先选择p二这个进程 让p二上处理机运行

那接下来啊 就是p二刚才已经运行了两个单位的时间 接下来他只需要在运行两个单位的时间 也就是到七这个时刻 他就会主动的放弃处理机 再次发生调度

而p四的禁止p四优先级又要比p一更高 所以p四先上处理机运行 最后才是让p一解上处理机运行完他剩下的那些时间单位

所以这就是抢占式的优先级调度算法的一个一个大体的过程

那么优先级调做算法相关的知识 我们还需要补充这么一些点
CHS_06.2.2.4_2+调度算法:时间片轮转、优先级、多级反馈队列_第12张图片

首先就是就绪队列其实未必只有一个有的操作系统 它是按照优先级来组织就绪队列的

另外呢 如果说设置一个就绪对列的话 也有的操作系统是会按照优先级从高到低的顺序

来动态的就是排队 就是调节这个就绪队列当中各个进程的位置

可会让优先级更高的进程排在更靠近对头的位置 这样的话在调度的时候就只需要从对头

来选择一个进程为它分配处理机就可以了 另外 根据优先级在确定了之后是否可以动态的发生改变 我们又可以把优先级分为两种 静态优先级和动态优先级

静态优先级就是创建进程的时候确定了之后就一直不变 而动态优先级是在刚开始会给他一个初始值

但之后可能会根据具体运行的情况在动态的调整优先级的大小 那么我们要怎么为一个进程设置一个优先级的初始值才会比较合理呢

一般来说 有这样一些原则 系统进程的优先级要高于用户进程 这个很好理解 因为系统进程毕竟是作为管理者

所以 管理者的优先级自然是要比被管理者要更高的 另外呢 前台进程的优先级要高于后台进程

这个其实在咱们什么iphone 安卓这些手机上就是有这样一个原则 因为前台进程毕竟是现在用户能够看到的进程

所以这些进程的流畅程度啊之类的这些这些指标肯定是要比后台进程要更重要

所以 他的优先级也理应要高于后台进程 第三个操作系统会更偏好o型进程

o型进程 又称作l繁忙型进程 与它相对应的有个概念叫做计算型进程 也就是cpu繁忙型进程

那么 为什么操作系统会更加偏好更加优先的处理l繁忙型进程呢

我们可以这样理解IO设备 它和cpu是可以并行的工作的

所以如果说我们让l繁忙型进程的优先级比

计算型的进程更高的话 那么也就意味着l繁忙型的进程 它可以优先的运行

而它越优先的运行 就越有可能让l设备尽早的投入工作

尽早的开始和cpu并行的工作 所以这就会直接的导致系统资源的利用率会上升 也就是IO设备的利用率

并且系统的吞吐量也会因为这样的策略会有所提升 所以操作系统更偏好l型进程 对整体的性能提升是有帮助的

这一点需要大家理解 在选择题当中也会出现 也会考察 那么

优先级调度算法

CHS_06.2.2.4_2+调度算法:时间片轮转、优先级、多级反馈队列_第13张图片

接下来考虑的一个问题是当我们采用动态优先级 这种
这种策略的时候 我们什么时候应该调整一个进程的优先级呢

我们可以从追求各个进程公平竞争 还要提升资源利用率等等各种各样的系统性能的角度来考虑

比如说 如果一个进程他在就绪队列当中等了太长时间 那么可以适当的提升他的优先级 如果一个进程他运行了很长时间 那么可以适当的降低他的优先级

那这就是从一个公平的角度来考虑 而而上面这一条就是

进程在就绪队列当中等了很长时间适当提升他的优先级 这个有没有发现其实咱们之前学过的高响应比优先那个算法所谓的响应比

也是这样一个规则 就是 当他等待的时间长了之后 响应比会增大 那么响应比其实就代表了这个进程的优先级 所以他的优先级也得到了提高 所以其实我们也可以

只认为想高 想玉米优先算法 它就是一种动态的优先级的一种调度算法

另外呢 如果我们发现一个进程它频繁的进行凹操作 那么可以适当提升它的优先级 因为它频繁进行凹操作就说明它很有可能是一种l频繁型的进程

那么我们提升它的优先级 经过刚才的分析 我们也知道可以这样可以提升系统资源的利用率 然后系统的吞吐量

这些指标也会得到提升 所以经过刚才的讲解 大家应该已经可以体会到

优先级调度算法它的优点很明显就是可以用优先级来区分各种任务的紧急程度 重要程度 所以优先级调度算法也比较适合用于实时操作系统

我们可以很灵活的来调整对各种作业进程的偏好程度 有我们希望这种进程优先被处理 那么我们就可以让它的优先级设置的更高一些

而缺点呢就是它有可能会导致饥饿 如果说源源不断的有更高优先级的进程到达到来的话 那么低优先级的进程就有可能会发生饥饿的现象

所以是会发生饥饿的 那这就是优先级调度算法 接下来我们思考一个问题

思考

CHS_06.2.2.4_2+调度算法:时间片轮转、优先级、多级反馈队列_第14张图片

像先来先服务算法 它的优点最大的优点就是公平

而短作业优先这个算法的优点就是可以让短作业尽早的处理完 然后就可以追求到一个

比较短的啊 平均等待时间 平均周转时间 而时间片轮转调度算法呢 它的优点优势 可以让各个进程可以及时的得到响应

优先级调度算法又可以灵活的调整各个进程被服务的机会 也就是通过优先级来进行控制

那么我们是否能设计出一种算法 能够综合上面这些算法的优点取一个折中平衡呢

那基于这个想法 人们就提出了多级反馈对列调度算法

多级反馈队列调度算法

CHS_06.2.2.4_2+调度算法:时间片轮转、优先级、多级反馈队列_第15张图片

那这个算法就是对其他的 咱们之前学过的那些调度算法的一个折中权衡规则比较复杂 这儿先不展开 咱们之后结合例题来1 1点进行分析

然后 这算法一般来说是用于进程调度的 并且它是一种和抢战式的算法 而抢战的时候也需要注意 在抢战的过程中 这个规则也比较复杂

咱们会根据之后的立体再来展开讲解 那这个地方虽然说它是抢占式的算法 但是在实际的操作系统应用当中 也有可能是把它实现为非抢占式的版本

但是考试的时候呢 咱们就以汤子盈的教材为准 就是认为他是抢占式的算法 并且注意一下他在抢战的时候会发生什么事情

那我们直接用一个立体来具体的了解多级反馈对列调度算法的一个规则

首先我们会设置多级就很多个级别的 就需对列

各个队列的优先级从高到低 然后时间片 各个队列的时间片是从小到大的

比如说一级对列的执行的时间片就是一个长度的单位时间单位 而第二级执行的是两个长度的单位 第三级执行的是四个长度的单位

为各个各个级别的队列分配的时间片是从小到大的第二点

如果有一个新进程到达的话 他会先进入优先级最高的 也就是第一级队列

的对位 然后按照先来先服务的这种原则排队等待分配时间片那刚开始零这个时刻p一这个进程到达 所以他会先放入第一级队列

那由于他是先到达的 而此时此时也没有别的进程 所以p一理所应当他应该被分配一个时间片

但是第一集对列的时间片大小只有一个单位的时间 所以当p一执行了一个单位的时间片之后 他的时间片就用完了

那么他会被啊 他在用完时间片之后还没有结束 所以他会进入下一集队列的对位

也就是第二季队列就是这样子那

接下来 在第一这个时刻 当p一执行结束之后 p 二也会紧随其后 也是在一这个时刻到达的

所以此时 由于我们的更高级别的这个队列还有一个进程没有处理完 所以暂时不会处理

更低级别的这个队列当中的进程 因此 在这个情况下 一这个时刻会选择p 二这个进程 让他上处理机运行

同样的 他运行的时间片大小是一个单位的时间 所以运行了一个单位的时间之后 他会放到下一季对列的对位

接下来 在二这个时刻 由于更高级的 第一级的队列已经全部为空了

低级的对列为空 所以这个时候我们才会对第二级更低级的这个对列

进行调度 为更低级的对列 这个对头的进程分配一个时间片

而此时第二级对应的时间片大小是二所以p一会执行两个单位的时间

那么当他执行完了之后 他的运行时间还没有全部全部结束 所以他还会被放到下一季的对联

而此时下一次调度 由于第二季对列还有 还有还有一个进程 所以又会让p二运行

但需要注意的是 p二当他运行了一个单位的时间 也就是他的时间片还没有用完的情况下

在五这个时刻p三进程到达到达第一级队列 那 由于

此时有一个更高优先级的进程到达 所以会发生抢占处理机的情况

所以 此时p二这个进程会被剥夺处理机 但但是他并不是放到下一季队列 而是把它放回原来这一集的队列的对位

之后让p三上处理机 抢占处理机 让他运行 然后运行了一个一个单位的时间之后

刚好p三也只需要运行一个单位的时间 所以p三运行完成它就可以

被调出内存了 接下来又是皮尔继续运行 由于之前皮尔运行了一个单位的是一个单位的时间加上一个单位的时间 也就是总共运行了两个单位的时间 所以在这次他被他上处理及运行的时候

他只需要运行完这个两个单位的时间片之后 他总共就运行了四个

单位的时间 所以这个时候p二完成就可以调出内存 所以当上面的这些对列当中的进程已经全部都空了的时候 才会

才会调度最后面最最低级的这个对列 然后让p一上处理机

运行四个单位的时间 因为最后这个队列 它的时间片大小是四个单位

然后当他运行了四个单位的时间之后 我们来看一下 他总共运行了1+2+4也就是总共运行了七个单位的时间

但是他的运行时间是八个单位 但是由于此时p一已经在最下面一集 已经在最下面一集的队列了

所以他此时已经没办法再往下了 那么他只会被放回到最下 同样是最下面这一集队列的队位

然后再次被调度 他之前已经运行了七个单位的时间 那最后只需要再为再让他运行一个单位的时间 就总共运行了八个单位的时间

此时p一完成 然后再调调出内存 所以这就是多级反馈对列的一个流程

多级反馈队列调度算法

CHS_06.2.2.4_2+调度算法:时间片轮转、优先级、多级反馈队列_第16张图片

比之前所有的那些算法都要复杂的多得多
那多级反馈对列 它有很多优点 就是对各种各样的进程都是相对公平的 每个进程刚开始进来的时候 肯定都是会被优先处理的 因为刚开始的时候它的优先级是最高的 而这就是先拉线服务的一个优点

而且每个新到达的进程其实很快就可以得到响应 因为它优先级高 而所以在第一级队列的话肯定很快就可以被调度

这又是时间片轮转调度的一个一个优点 另外呢 短进程只需要经历过优先级比较高的那几个队列 就执行了几个较短的时间片 之后就可以完成了 所以这也会导致 就是

这些进短进程的平均周转时间会比较比较理想 而这就是

最短进程优先这个算法的一个优点 另外呢 短进程优先算法一般来说是要求用户

来提供就是自己的进程大概需要运行多长时间这样的数据的 但是有可能会有用户作假就本来是常进程 他把自己的时间说的很短

但是像多级反馈对列这种这种算法 他又不必要优秀 事先估计这个进程的运行时间 从而就避免了用户作假这种造成的一系列的后果 另外 多级反馈对列也可以像

优先级调度算法 那样可以灵活的调整对各种进程的偏好程度 比如说对cpu型就是计算性还有o型这两种进程来说 如果我们想偏偏好o型进程 想优先的处理o型进程的话

那么我们可以这么处理 当一个o型进程 当它在运行的过程当中

因为发出l请求而主动的阻塞的时候 我们可以把这个进程 当他就是再次被唤醒的时候 让他重新放回原来那集的队列 而不是让他降到下一季队列

这种处理就会让导致一个l密集型的进程 它可以长期的保持一个较高的优先级 保持在较高优先级的队列里

所以这就是调整对各类进程偏好程度的一种方式 一个例子 那么

这个算法是有可能会导致饥饿的 因为如果说有源源不断的有进程 有短进程到达的话

那么他可能短进程 在第一级队列被分配一个较短的时间片之后就可以被处理完

然后这种进程源源不断的到来的话 那么已经被降级为更低级 更低 有先级的那些进程就有可能会长期得不到服务 他就从而也会导致饥饿的现象

那么 这是这个小节的一些简要的一些总结 特别对于多级反馈对列这个算法 它的规则

知识回顾

CHS_06.2.2.4_2+调度算法:时间片轮转、优先级、多级反馈队列_第17张图片

运行的规则是比较复杂的 大家要注意结合刚才的那个立体来进行理解 另外呢 优先级调度算法当中 我们需要注意它是有

抢占式的版本也有非抢占式的版本 在做题的时候 我们需要注意的是非抢占式的优先级调度算法

我们只需要注意各个进程主动的放弃处理机 这样的时刻 我们在这个时刻检查是否需要调度就可以了

而对于抢占式的优先级调度算法来说 我们除除了刚才所说的情况之外 还需要注意一个

就绪对列发生改变的这种情况下 是否会发生抢占这样的事情 然后在这个时刻也需要解决

进行检查 那各个算法有各自的优点和缺点 但是比起之前介绍的那三种算法来说 这三种算法的优缺点是

更不容易被考察的 那么他们是否会导致饥饿这个问题大家也需要学会自己会分析 另外我们补充的

时间片轮转调度算法我们需要注意时间片太大或者太小会有什么影响

大家现在再回忆一下 然后优先级调度算法当中 我们也又补充了所谓的动态优先级和静态优先级 它们有什么区别呢

另外 我们在为各个进程设置优先级的时候 都有哪些原则呢 这些在之后课后习题当中也会遇到 大家在通过题目来进行巩固和总结

这个介绍的这几种算法是比较适合用于交互式系统的 因为比起早期的这些批处理操作系统来说

这个计算机的造价其实是越来越低的 所以之后出现的这些交互式的系统 包括像分时操作系统 还要实施操作系统

这些操作系统 它会更注更注重这些对于各个进程的响应时间 还有公平性 平衡性这些指标 而不是一味的追求批处理操作系统当中的什么平均周转时间啊这些这些很宏观的一些指标 所以啊这几种算法刚好有时

特别适用于这种啊交互式系统的这一系列的需求可以提供比较快的响应时间 然后也可以用一系列的

这种策略来追求一个比较公平平衡的这种性能 所以他们是适合用于交互式系统的

比如说像unix系统使用的就是多级反馈对列调度算法 那么最后还是要强调一下这些调度算法相关的知识点 大家一定要通过动手做课后习题

来 再进一步的巩固总结好的 那么以上就是这个小节的全部内容

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习

你可能感兴趣的:(操作系统,#,处理机调度,第二章进程与线程,linux,运维,服务器)