进程调度算法
时间片轮转。
队列调度:同一优先级属于某个队列,但是不能跨越队列。
- 服务高优先级队列,低优先级队列可能被饿死?
- 低优先级队列自己优先级内轮转
- 每个队列也有自己的调度策略
多级反馈队列调度算法
- 进入系统,最高优先级
- 当前时间没完成,强制降级(否则CPU进程欺骗),一旦完成某一层时间配额,就降低优先级
- 经过一段时间S,重新洗牌,所有工作全加入最高优先级
单CPU算法
- FIFO
- 短作业优先
- 最短剩余时间算法
- 允许抢占
- 最高响应比优先
- 等待/执行时间
- 公平共享
- 用户调度
实时管理和调度,必须在DDL之前调度完成
强实时:必须完成 软实时:尽量但是不是必须完成
工控设备和硬件绑在一起的,前提是明确了每个任务的执行时间
-
静态优先级调度
- 周期安排优先级
- 周期越短优先级越高
- 执行周期最短的任务
P1:e=20,p=50;e=35,p=100
-
动态调度算法
- EDF(EarLiest Deadline First)任务的优先级根据任务的截止时间分配,要抢占的人如果DDL在后面那就不能抢占
- LLF最低松弛度优先算法
- 还能等待/容忍/拖多长时间:松弛度=必须完成的任务DDL-本身还需要运行的时间-当前时间
- 执行每个时间片后判断优先级
- 优先级反置
- 用我锁上的资源的任务里面优先级最高的优先级拿来——优先级天花板协议
- 不管是否发生等待,优先级,怕的就是比最高优先级低居然比高优先级先执行
- 用我锁上的资源的任务里面优先级最高的优先级拿来——优先级天花板协议
- Linux或者自己的小系统能不能分配专门用来抢占的时间
- 发生了变化,会有什么问题
- 扩展?
超线程处理器可以做并发
NUMA(非一致内存访问系统)
- 多队列多处理器调度
- 负载均衡问题:偷(迁移),多核处理器的问题
- 什么时机去检查?但是检查也会去消耗资源,预测的问题
- 负载均衡问题:偷(迁移),多核处理器的问题
Linux的O(1)调度策略
O(n)->O(1)->CPS
- O(1),spinlock不释放资源,大概率很快拿到资源:1个问一下1000多个就慢了,Global runnable queue Scheduler logic
- O(1)要有很好的调度质量
- 每个优先级要有一个队列
优先级、时间片
- 从技术上讲,军队的技术往往是最先进的
参考资料:
https://www.cnblogs.com/zhaoyl/archive/2012/09/04/2671156.html