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

batoom 2011-03-06

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内核学习笔记之进程进程的组织形式

相关推荐