2012-07-01 47 views
3

我知道如果我們有task_struct,我們可以得到包含的sched_entity,因爲它是任務結構中的一個字段。但是,我們可以通過給shed_entity得到指向task_struct的指針嗎?以下是sched_entity結構:是否有可能從sched_entity中找到相應的task_struct?

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獲取包含任務的任務group_leader的sched_entity:>

+0

這可能有助於[task_struct進程列表示例](http://tuxthink.blogspot.in/2011/03/using-foreachprocess-in-proc-entry。 html) –

+0

@Richard Chambers Thanks.It很有幫助。 –

回答

6

Linux內核代碼提供了一種標準的方法來獲取指向包含在結構中的元素的指針,並獲取指向包含的結構:container_of宏,在整個內核中廣泛使用。

在這種情況下,如果你有一個struct sched_entity *foo,你可以得到封閉task_struct有:

struct task_struct *task = container_of(foo, struct task_struct, se); 

(顯然這一點,如果你肯定知道,原來struct sched_entity *指針指向struct sched_entity是唯一安全這是一個struct task_struct,所以要小心......)

+0

謝謝。這真的很有幫助。讓我試試看。 –

相關問題