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

2014-11-24 07:51:34 · 作者: · 浏览: 2

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值的进程联系在一起构成从链。例如可以讲同一个线程组的所有线程联系起来。