文章目录
- 1、Linux调度概述
- 2、实时调度类 rt_sched_class
- 2.1、SCHED_FIFO 调度策略
- 2.2、SCHED_RR 调度策略
- 3、实时调度相关数据结构
- 3.1、实时调度实体 sched_rt_entity
- 3.2、优先级队列rt_prio_array
- 3.3、实时就绪队列 rt_rq
- 3.4、带宽控制结构体 rt_bandwidth
- 3.5、组调度结构体 task_group
- 参考博文:
1、Linux调度概述
-
实时调度器主要为了解决以下四种情况
- 1、在唤醒任务时,待唤醒的任务放置到哪个运行队列最合适(这里称为pre-balance);
- 2、新唤醒任务的优先级比某个运行队列的当前任务更低时,怎么处理这个更低优先级任务;
- 3、新唤醒任务的优先级比同一运行队列的某个任务更高时,并且抢占了该低优先级任务,该低优先级任务怎么处理?
- 4、当某个任务降低自身优先级,导致原来更低优先级任务相比之下具有更高优先级,这种情况怎么处理。
-
对于情况2和情况3,实时调度器采用push操作。
- push操作从根域中所有运行队列中挑选一个运行队列(一个cpu对应一个运行队列),该运行队列的优先级比待push任务的优先级更低。运行队列的优先级是指该运行队列上所有任务的最高优先级。
-
对于情况4,实时调度器采用pull操作。
- 当某个运行队列上准备调度时,候选任务比当前任务的优先级更低时,实时调度器检查其他运行队列,确定是否可以pull更高优先级任务到本运行队列。
- 还有,当某个运行队列上发生调度时,该运行队列