Linux内核学习笔记之进程进程的组织形式

1.进程标识符构成的哈希表

内核使用一个进程描述符来表示一个进程,因此通过进程描述符的地址来访问一个进程是最方便的. 这里主要是用哈希表来完成进程号到进程描述符地址之间的映射.

内核中设置了PIDTYPE_MAX个不同的哈希表(4个),这四个哈希表保存在数组pid_hash中,

static struct hlist_head *pid_hash[PIDTYPE_MAX];

pid_type是一个枚举内型。

enum pid_type

{

PIDTYPE_PID,//进程号哈希表

PIDTYPE_TGID,//线程组号哈希表

PIDTYPE_PGID,//进程组号哈希表

PIDTYPE_SID,//会话号表

PIDTYPE_MAX

};

在进程描述符中有一个成员变量 pids,定义如下:

struct pid pids[PIDTYPE_MAX];

struct pid{

int nr;

struct hlist_node  pid_chain;

struct list_head  pid_list;

};

pid_chain构成一个链表,表中的nr值不同,哈希函数将这些nr值映射到哈希表中的同一位置,这个链表就是主链。(nr值本身就是进程号)

pid_list将具有相同nr值的进程联系在一起构成从链。例如可以讲同一个线程组的所有线程联系起来。

Linux内核学习笔记之进程进程的组织形式

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwxpxf.html