以下是linux调度中RT策略的实体类的代码。
struct sched_rt_entity {
struct list_head run_list;
unsigned long timeout;
unsigned int time_slice;
struct sched_rt_entity *back;
#ifdef CONFIG_RT_GROUP_SCHED
struct sched_rt_entity *parent;
/* rq on which this entity is (to be) queued: */
struct rt_rq *rt_rq;
/* rq "owned" by this entity/group: */
struct rt_rq *my_q;
#endif
};
列表已经实施时,数据成员back
是什么。
我也不明白如何实施群组安排政策,特别是为什么需要my_rq
和rt_rq
以及parent
将指向谁。
timeout
数据成员的含义是什么。
P.S: 我有很多这样的问题,任何人都可以提出一个好的阅读。
答案 0 :(得分:2)
使用组调度时,没有单个队列,而是组树及其队列。例如,当两个用户各有一个调度组时,整个组/队列可能会为每个用户的组分配50%的CPU,而所有用户的程序都在其组的队列中并竞争50%。 有关多个队列如何工作的更详细说明,请参阅CFS group scheduling。
parent
指向树中一级的实体; rt_rq
是运行此实体的队列,而my_q
是此实体的子进程运行的队列。
back
字段用作dequeue_rt_stack()
函数中的临时存储来实现堆栈,其中我们有一个指向最低实体的指针,但是想要从顶层实体开始删除它们
timeout
并用于检查任务是否占用CPU的时间超过RLIMIT_RTTIME
。
没有关于最近内核更改的书籍。 使用来源,Luke。