CHS_07.2.2.4_3+调度算法:多级队列调度算法
- 多级对列调度算法
接下来
多级对列调度算法
看一个图你就明白了 如果一个系统采用多级对列调度算法
那么 这个系统会按照进程的类型设置多个对列 并且给不同的对列设置不同的优先级
举个例子 分为系统进程 交互式进程以及批处理进程 最上面的这个对列
优先级最高 然后往下 优先级一次降低 当一个进程被创建之后
首先要给进程进行一个分类 它属于哪一类进程 就把它分到相应的对列当中
好 首先解释一下为什么我们这个例子当中要这么设计各个队列的优先级 首先 系统进程它的优先级最高 这个无可厚非 对吧
另外 交互式的进程需要得到比较及时的响应和反馈 比如说你打游戏的时候 或者打字的时候 你当然是希望自己的鼠标以及键盘点下去之后立即得到一个反馈
因此 相比其他用户进程而言 交互式的进程显然应该给他赋予更高的优先级 更优先的去处理 这样才可以更快的去响应用户的请求
和那批处理进程比 交互式进程的优先级更低 这个就很好理解了 比如说学人工智能 我们训练a i模型的时候
或者你剪辑了一个视频需要渲染这个视频的时候 那这个渲染的过程它的优先级放低一点 对你而言体验没有那么糟糕 对吧
你会更关注当前和你交互的这些进程 它的一个反应的速度 而不是在后台渲染视频的时候 它速度到底有多快 有没有很及时
这个你并不关心 因此这三个队列的优先级才是这样的一个排列 系统进程最高 其次交互式的进程
最后是批处理进程 当然这只是一个简单的例子 帮助大家理解 实际的操作系统当中 还可以给进程进行更多的分类 也就是分为更多级的对列
好 那这种调度算法我们可以给各个队列之间设置一个绝对的 固定的优先级
采取这种策略意味着只要高优先级的队列此时不空 那么接下来运行的肯定是高优先级的这个队列里面的进程
这种方式有时候是不合理的 比如说你作为用户 你现在正在打字 但是现在只要就去对这一边有一个系统进程 那你这个打字的动作就永远不会被响应
那这样你的使用体验是不是很糟糕好 所以还有另一种方式 我们可以给不同的队列分配不同的时间
比如说100毫秒的时间 我们先给系统进程分配50%也就是50毫秒
让交互式的进程用40毫秒来处理 剩下的十毫秒再来处理这个批处理的进程
也可以这么搞 那这样的话就可以保证在固定的一个时间范围内 任何一类的进程都至少会被响应一次
照我们回答的是 每一次调度应该选择哪个对列这样的一个问题
好 那选中了一个队列之后 一个队列当中有很多很多个同类的就绪进程 对吧
在这个队列当中 我们又应该选择哪一个进程呢 那事实上 各个队列我们可以采用不同的调度策略
比如说系统进程 系统进程 我们可以采用优先级调度有多个当前就绪的系统进程 那谁的优先级更高 谁更紧急 我就优先处理谁
而交互式对列当中 我们可以选择时间片轮转调度 时间片轮转可以保证
各个交互式的进程在很短的一个时间周期内都会被至少响应一次
那最后批处理这对列当中 可以从先来先服务的一个调度策略 当然这只是一个举例啊 我们还可以设置别的调度算法
好 所以多级对列调度算法并不复杂 系统会设置多个就绪对列
每个就绪队列的优先级各不相同 每一次调度发生的时候 首先要选中一个队列
然后再根据这个队列内的调度算法来选取队列内的某一个进程 让他上述了一句 运行
那这就是多级对列调度算法
推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习