0

我正在研究 Linux 内核中的实时调度算法,我看到有很多函数调用,其中实际上没有定义任何内容:

(在内核 3.15 上)例如:

rt.c 1392 : dequeue_pushable_task(rq, p); 
rt.c 365  : static inline void dequeue_pushable_task(struct rq *rq, struct task_struct *p)
              {
              }


rt.c 1394 : set_post_schedule(rq);
rt.c 365  : static inline void set_post_schedule(struct rq *rq)
              {
              }

它们还在检查 SMP 的 ifdef 中重新定义。我只是想确定一下,这些功能是否特定于 SMP?或者是否有任何理由拥有这些空功能。

4

1 回答 1

3

根据sched/deadline 的评论:添加与 SCHED_DEADLINE SMP 相关的数据结构和逻辑 1baca4ce16b8cc7d4f50be1f7914799af30a2861 commit

这些方法用于将截止日期任务保留在 CPU 特定的运行队列中,可推或可拉的截止日期任务的概念要求它们是多个 CPU 运行队列来推拉任务之间的任务。如果未设置 CONFIG_SMP,则只有一个 CPU 运行队列,因此不需要迁移任务。

所以是的,函数实现是特定于 SMP 的,拥有这些空函数的原因是为了编译代码,但在未定义 CONFIG_SMP 时不执行任何操作,而不必在每个调用站点实现更多 ifdef 检查。

于 2014-06-21T06:45:13.773 回答