0

下面是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还有数据成员的含义是什么。

PS: 我有很多很多这样的问题,任何人都可以建议一个好的阅读。

4

1 回答 1

2

使用组调度时,不是单个队列,而是组树及其队列。例如,当两个用户各有一个调度组时,整个组/队列可能会为每个用户组分配 50% 的 CPU,而所有用户的程序都在他们组的队列中并竞争这 50%。有关多个队列如何工作的更详细说明,请参阅CFS 组调度

parent指向树中上一层的实体;rt_rq是该实体运行my_q的队列,而 是该实体的子实体运行的队列。

back字段在函数中用作临时存储dequeue_rt_stack()以实现堆栈,其中我们有一个指向最低实体的指针,但希望从顶层实体开始删除它们。

timeout由看门狗定时器增加,用于检查任务是否占用 CPU 时间不超过RLIMIT_RTTIME.


没有关于最近内核更改的书籍。 使用来源,卢克。

于 2012-10-17T21:52:30.930 回答