ostep学习笔记-8 Scheduing

从第八章开始,写一下学习笔记,因为从这张开始深入到一些算法以及原理了,最好还是写笔记记录一下

这张主要通过一系列问题的讨论,介绍并优化了MLFQ,Multi-Level Feedback Queue(多级反馈队列)这一操作系统调度任务的算法。

这个算法主要逻辑(讨论后最终给出)如下:

  • Rule 1:If Priority(A)>Priority(B), A runs (B doesn’t).如果任务A的优先级大于B,将先运行A。
  • Rule 2:If Priority(A)=Priority(B), A & B run in round-robin fash-ion using the time slice (quantum length) of the given queue.如果A的优先级大于B,将在AB之间使用轮询算法轮流执行。
  • Rule 3:When a job enters the system, it is placed at the highestpriority (the topmost queue).当任务进入系统时,将被放在优先级最高级的队列中
  • Rule 4:Once a job uses up its time allotment at a given level (re-gardless of how many times it has given up the CPU), its priority isreduced (i.e., it moves down one queue).当一个任务使用完在当前队列所分配给他的时间片之后,降低他的优先级,也就是移动到下一优先级队列中去
  • Rule 5:After some time period S, move all the jobs in the system to the topmost queue.在给定的S时间间隔以后,把所有任务移动到最高级队列中去

其中123显而易见可以作为基本的规则,4是为了解决在高优先级使用一些把戏去抢占cpu(比如在最初的设计中,采用的是如果任务发生了I/O或者放弃CPU的操作,就不会对优先级进行降级,而是保存在原队列中,以至于低优先级任务永远得不到执行的问题。5是为了在不断有任务到达,或者某个CPU高占用的任务过一段时间后转换成了I/O多的任务时,给低优先级任务一个被重新规划队列的机会。

针对这个队列,不同操作系统细节的实现以及不同的调参影响了实际的性能,一般来说,以下几个参数比较常用

  • 优先队列的数量,这个指的是优先队列一共有多少级,比如说一般是60级优先队列
  • 优先队列的时间片分配,即在该级别队列中,单个任务分配到多少时间片执行,一般来说优先级越高的队列越短,优先级越低的队列越长。比如在最高级队列中可能是10ms一个时间片去执行任务,在最低级队列中可能是100ms一个时间片去执行
  • 优先队列的升级周期s,就是过多久,所有任务统一上升到最高级队列,也就是5中的概念,一般是1秒

这里补充下这个模型的理解,队列中的任务其实是进程,假设ABC在最顶级队列p0,那么操作系统就会按照ABC轮询的顺序,执行A10ms后中断切换上下文去执行B,执行B10ms后继续C。所以我们可以看到如果规则4不这么设计,那么ABC可以无限执行直到ABC都执行完。所以再加上规则4后,ABC执行一次后就移动到了下一等级的队列p1,下一等级的队列如果时间窗口是20ms,那么就会在执行完下一队列p1内原有的任务后再执行ABC,然后没执行完的话大家继续降级。等待s秒一次的重启。

版权声明:除特殊说明,博客文章均为intotw原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇