pid_namespace深入学习


基数树

看这篇文章:https://zhuanlan.zhihu.com/p/643699822

节点的基本结构如下:

上述结构体中:

shift表示位移量,其实也就是和层级正相关的;

slots用于指向下一个节点,如果没有相应的子节点就可以是NULL;

tags表示是否存在,因为你可能某个数的存在而分配了这个slot,但是和它相邻的数并不存在,这个其实和Linux的多级页表比较类似,但是基数树的作用仅仅是存储并查询某个数字是否存在,是一种动态存储的结构:

pid的分配

pid_namespace结构的第一个成员是idr:

idr的定义如下:

其使用的是如下所示的基数树这样的一种结构,idr_rt正是这个树的根:

在pid_namespace中,正是使用基数树来存储并查询某个pid是否已经被分配;

通过pid查找task

查询基数树能返回一个指针:

int pid 到structuct pid

struct pid查找task

关键函数是pid_task:https://elixir.bootlin.com/linux/v6.13.5/source/kernel/pid.c#L409

总结

参考

https://zhuanlan.zhihu.com/p/643699822


文章作者: q1ming
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 q1ming !
  目录