Chinaunix

标题: 关于任务调度的数据结构问题 [打印本页]

作者: lxy572535121    时间: 2018-03-31 19:45
标题: 关于任务调度的数据结构问题
我们知道linux内核中是以task_struct来存储每一个进程的相关信息的
在CFS(completely fair schedule)调度中是以红黑树的形式来连接每一个进程的task_struct的
但是同时每一个task_struct又通过list_head以双向循环链表的形式来连接
我想问的就是既然有了红黑树,为何还要以双向循环链表的形式来连接每个task_struct
求解答


作者: blake326    时间: 2018-04-02 10:27
回复 1# lxy572535121

rbtree给cfs schedule使用,取leftmost,insert,delete都很快。

list其他场景使用,比如for_each_task

作者: pqy330    时间: 2018-04-02 12:58
回复 2# blake326

啥?cfs schedule不是也要同时更新两种数据结构吗?不然rb tree 跟list就不同步了啊
作者: blake326    时间: 2018-04-02 16:34
回复 3# pqy330

只有running状态(等待cpu执行)的task才会再rbtree上。
更精确一点, 正在cpu上执行的task是不在rbtree上的,但是on_rq, on_cpu都是等于1的。





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2