2013-08-04 71 views
2

我想知道每個進程的下一個和前一個進程,它的狀態是「TASK_RUNNING」。 在較早的內核中,有一個run_list結構作爲task_struct的成員。我如何在內核3中做這樣的事情?例如跟蹤正在運行的進程的列表,但我不知道是哪個結構是在內核3內核3中正在運行的進程的鏈接列表。*

回答

3

定義爲這樣的列表在更新的內核,Linux不維護所有正在運行的進程的列表。相反,CFS使用sched_entity的紅黑樹來存儲有關正在運行的進程的信息。

task_struct包含sched_entity類型的成員se。 Sched實體包含struct rb_node類型的成員run_node。這是你正在尋找的。

include/linux/rbtree.h請諮詢rbtree的接口。爲了從sched_entity提取task_struct可以使用container_of(your_se, struct task_struct, se);(在kernel/sched/fair.ctask_of()諮詢)。

+0

你是說我應該將'rb tree'作爲運行進程列表來遍歷? – Mjina

+0

是的。那就是我的意思。 –

+0

如果任務列表中任務的狀態是1('INTERRUPTABLE'),它沒有任何'sched_entity'?或者它有'sched_entity'但是空的。 – Mjina