我想知道每个进程的下一个和前一个进程,它的状态是“TASK_RUNNING”。 在较旧的内核中,有一个run_list结构作为task_struct的成员。我怎么能在内核3中做这样的事情?例如,跟踪正在运行的进程列表,但我不知道在内核3中将哪个结构定义为此类列表。
答案 0 :(得分:4)
在较新的内核中,Linux不维护所有正在运行的进程的列表。相反,CFS使用sched_entity
的红黑树来存储有关正在运行的进程的信息。
task_struct
包含se
类型的成员sched_entity
。 Sched实体包含run_node
类型的成员struct rb_node
。这就是你要找的东西。
请咨询include/linux/rbtree.h
以了解rbtree的界面。要从task_struct
中提取sched_entity
,您可以使用container_of(your_se, struct task_struct, se);
(咨询task_of()
中的kernel/sched/fair.c
。