我知道如果我们有task_struct,当然我们可以得到包含的sched_entity,因为它是task结构中的一个字段。但是我们可以在给定shed_entity的情况下得到指向task_struct的指针吗?下面是sched_entity结构:
struct sched_entity {
struct load_weight load; /* for load-balancing */
struct rb_node run_node;
struct list_head group_node;
unsigned int on_rq;
u64 exec_start;
u64 sum_exec_runtime;
u64 vruntime;
u64 prev_sum_exec_runtime;
u64 nr_migrations;
#ifdef CONFIG_SCHEDSTATS
struct sched_statistics statistics;
#endif
#ifdef CONFIG_FAIR_GROUP_SCHED
struct sched_entity *parent;
/* rq on which this entity is (to be) queued: */
struct cfs_rq *cfs_rq;
/* rq "owned" by this entity/group: */
struct cfs_rq *my_q;
#endif
};
字符串
似乎没有地方可以获取task_struct,我的最终目标是获取包含这个shed_entity的任务的task group_leader的sched_entity:>
2条答案
按热度按时间xfyts7mz1#
Linux内核代码提供了一种标准的方法来获取指向结构中包含的元素的指针,并返回指向包含结构的指针:
container_of
宏,该宏在整个内核中广泛使用。在这种情况下,如果你有一个
struct sched_entity *foo
,你可以得到封闭的task_struct
:字符串
(显然,只有当您确定原始
struct sched_entity *
指针指向struct task_struct
内部的struct sched_entity
时,这才是安全的,所以要小心...)zazmityj2#
kernel/sched/sched.h
文件中的task_of()
宏可以提供帮助。它基本上是调用container_of()
。