Process 内核3中运行进程的链接列表*

Process 内核3中运行进程的链接列表*,process,linux-kernel,scheduling,Process,Linux Kernel,Scheduling,我想知道每个进程的下一个和上一个进程,它的状态是TASK_正在运行。 在旧内核中,有一个run_list结构作为task_结构的成员。如何在内核3中执行类似的操作?例如,跟踪正在运行的进程列表,但我不知道在内核3中哪个结构被定义为这样的列表。在较新的内核中,Linux并不维护所有正在运行的进程的列表。相反,CFS使用sched_实体的红黑树来存储有关正在运行的进程的信息 task_结构包含sched_实体类型的成员se。Sched实体包含struct rb_节点类型的成员run_节点。这就是你要

我想知道每个进程的下一个和上一个进程,它的状态是TASK_正在运行。
在旧内核中,有一个run_list结构作为task_结构的成员。如何在内核3中执行类似的操作?例如,跟踪正在运行的进程列表,但我不知道在内核3中哪个结构被定义为这样的列表。

在较新的内核中,Linux并不维护所有正在运行的进程的列表。相反,CFS使用sched_实体的红黑树来存储有关正在运行的进程的信息

task_结构包含sched_实体类型的成员se。Sched实体包含struct rb_节点类型的成员run_节点。这就是你要找的


有关rbtree的接口,请咨询include/linux/rbtree.h。要从sched_实体中提取task_struct,您可以使用see的container_,struct task_struct,se;请咨询kernel/sched/fair.c中的task_.

在较新的内核中,Linux并不维护所有运行进程的列表。相反,CFS使用sched_实体的红黑树来存储有关正在运行的进程的信息

task_结构包含sched_实体类型的成员se。Sched实体包含struct rb_节点类型的成员run_节点。这就是你要找的


有关rbtree的接口,请咨询include/linux/rbtree.h。要从sched_实体中提取task_struct,您可以使用see的container_,struct task_struct,se;咨询kernel/sched/fair.c中的task_.

您的意思是我应该在运行进程列表中遍历rb树吗?是的。这就是我的意思。若任务列表中的任务状态为1可中断,那个么它并没有任何sched_实体?或者它有sched_实体,但为空。sched_实体嵌入到task_结构中,因此在任何情况下都会出现。若任务未运行,则不会在rbtree中链接sched_实体。另外一个问题:我在kernel/sched/fair.c中看到了cfs_rq runqueue。它们包含按优先级排序的sched_实体?只有一个rbtree`的sched_实体被划分为多个运行队列?你的意思是我应该作为运行进程列表遍历rbtree?是的。这就是我的意思。若任务列表中的任务状态为1可中断,那个么它并没有任何sched_实体?或者它有sched_实体,但为空。sched_实体嵌入到task_结构中,因此在任何情况下都会出现。若任务未运行,则不会在rbtree中链接sched_实体。另外一个问题:我在kernel/sched/fair.c中看到了cfs_rq runqueue。它们包含按优先级排序的sched_实体?只有一个rbtree`的sched_实体被划分到多个运行队列?