以下是v3.5.4中的实时运行队列结构
struct rt_rq {
struct rt_prio_array active;
unsigned int rt_nr_running;
#if defined CONFIG_SMP || defined CONFIG_RT_GROUP_SCHED
struct {
int curr; /* highest queued rt task prio */
#ifdef CONFIG_SMP
int next; /* next highest */
#endif
} highest_prio;
#endif
#ifdef CONFIG_SMP
unsigned long rt_nr_migratory;
unsigned long rt_nr_total;
int overloaded;
struct plist_head pushable_tasks;
#endif
int rt_throttled;
u64 rt_time;
u64 rt_runtime;
/* Nests inside the rq lock: */
raw_spinlock_t rt_runtime_lock;
#ifdef CONFIG_RT_GROUP_SCHED
unsigned long rt_nr_boosted;
struct rq *rq;
struct list_head leaf_rt_rq_list;
struct task_group *tg;
#endif
};
我已经了解了一些数据成员所代表的含义,但我不完全确定以下数据成员:
a)rt_nr_migratory :(我认为)它是一个计数器,用于计算可以将多少任务推送到其他cpu的计数
b)pushable_tasks是可以推送到其他运行队列的任务列表,如果它们没有任何运行的话.
如果我对上述条目有误,请纠正我.
c)rt_throttled,rt_time,rt_runtime,rt_nr_total,rt_nr_boosted:我不明白这是什么用途.
为什么struct rq * rq;仅在组调度存在时才需要.我的意思是它的意义.