2.2.4 核心概念 - 运行队列
简要介绍runqueue
/* file: kernel/sched/sched.h */
struct rq {
unsigned int nr_running;
u64 nr_switches;
/*
* runqueue 采用的模块化的实现方式,各个不同的 Scheduling Class 都有自己的
runqueue 实现。不同的 runqueue 的数据结构保存在如下属性之中
*/
struct cfs_rq cfs; /* CFS runqueue 的实现 */
struct rt_rq rt; /* RT runqueue 的实现 */
struct dl_rq dl; /* Deadline runqueue 的实现 */
struct task_struct __rcu *curr; /* 当前 runqueue 中正在运行的进程 */
struct task_struct *idle; /* Idle 调度类的任务 */
struct task_struct *stop; /* Stop 调度类的任务 */
struct mm_struct *prev_mm;
atomic_t nr_iowait;
#ifdef CONFIG_SMP
struct root_domain *rd;
struct sched_domain __rcu *sd;
unsigned long cpu_capacity;
unsigned long cpu_capacity_orig;
#endif /* CONFIG_SMP */
#ifdef CONFIG_SCHEDSTATS
/* latency stats */
struct sched_info rq_sched_info;
unsigned long long rq_cpu_time;
/* could above be rq->cfs_rq.exec_clock + rq->rt_rq.rt_runtime ? */
/* sys_sched_yield() stats */
unsigned int yld_count;
/* schedule() stats */
unsigned int sched_count;
unsigned int sched_goidle;
#endif
};Last updated