2
我想知道每個進程的下一個和前一個進程,它的狀態是「TASK_RUNNING」。 在較早的內核中,有一個run_list結構作爲task_struct的成員。我如何在內核3中做這樣的事情?例如跟蹤正在運行的進程的列表,但我不知道是哪個結構是在內核3內核3中正在運行的進程的鏈接列表。*
我想知道每個進程的下一個和前一個進程,它的狀態是「TASK_RUNNING」。 在較早的內核中,有一個run_list結構作爲task_struct的成員。我如何在內核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.c
與task_of()
諮詢)。
你是說我應該將'rb tree'作爲運行進程列表來遍歷? – Mjina
是的。那就是我的意思。 –
如果任務列表中任務的狀態是1('INTERRUPTABLE'),它沒有任何'sched_entity'?或者它有'sched_entity'但是空的。 – Mjina