https://courses.engr.illinois.edu/cs423/sp2018/slides/13-linux-schedulers.pdf
![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?from=article.detail.1603917 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