https://www.scaler.com/topics/operating-system/process-scheduling/
https://courses.engr.illinois.edu/cs423/sp2018/slides/13-linux-schedulers.pdf
Linux历史
![w:600](figs/sqms.png)
调度器简介,以及Linux的调度策略 https://www.cnblogs.com/vamei/p/9364382.html
万字长文,锤它!揭秘Linux进程调度器 https://www.eet-china.com/mp/a111242.html
谈谈调度 - Linux O(1) https://cloud.tencent.com/developer/article/1077507
Linux Kernel 排程機制介紹
https://loda.hala01.com/2017/06/linux-kernel.html
---
#### Linux 2.4 内核:SMP 实现在内核态
- 使用多处理器可以加快内核的处理速度,调度器是复杂度为 O(n)
- 内核调度器维护两个 queue:runqueue 和 expired queue
- 两个 queue 都永远保持有序
- 一个 process 用完时间片,就会被插入 expired queue
- 当 runqueue 为空时,把 runqueue 和 expired queue 交换一下
![w:800](figs/linux-2.4-sched.png)
---
#### Linux 2.4 内核:SMP 实现在内核态
- 使用多处理器可以加快内核的处理速度,调度器是复杂度为 O(n)
- 全局共享的就绪队列
- 寻找下一个可执行的 process,这个操作一般都是 O(1)
- 每次进程用完时间片,找合适的位置执行插入操作,会遍历所有任务,复杂度为O(n)
![w:800](figs/linux-2.4-sched.png)
---
#### Linux 2.4 内核:SMP 实现在内核态
- 使用多处理器可以加快内核的处理速度,调度器是复杂度为 O(n)
- 现代操作系统都能运行成千上万个进程
- O(n) 算法意味着每次调度时,对于当前执行完的process,需要把所有在 expired queue 中的 process 过一遍,找到合适的位置插入
- 这不仅仅会带来性能上的巨大损失,还使得系统的调度时间非常不确定 -- 根据系统的负载,可能有数倍甚至数百倍的差异
![w:800](figs/linux-2.4-sched.png)
万字长文,锤它!揭秘Linux进程调度器 https://www.eet-china.com/mp/a111242.html
Linux 是如何调度进程的?https://jishuin.proginn.com/p/763bfbd2df25