linux的几个链表

1. 进程链表: 连接所有进程(双向),头: init_task,  节点: task_struct中的tasks;

2. TASK_RUNNING状态的进程链表:是每cpu变量(因为runqueue是每cpu变量),方便cpu选择task, 优先级队列(140级),头:runqueue的array(active和expired各一个), 节点:task_struct中的run_list;

3. pid hash表及其链表, 4张表(pid_hash(see pidhash_init, 由 alloc_bootmem()分配). 进程pid, 线程组tpid, 进程组pgrp, 会话组session),用于从pid得到task_struct, 2.6.11中每张表有2048个表项(这个是深入kernel书中的例子这个值应该跟mem size有关, 不是固定值), 每个表项是冲突链表的头, 连接到hash冲突的进程描述符task_struct, task_struct的pids字段的pid_chain是其节点。 而task_struct的pids字段的pid_list用于连接一个表项的节点task_struct的具有相同组pid的所有task_struct(这个用于类似kill整个组的case).

 

4. 等待队列: 用来存放睡眠的进程(TASK_INTERRUPT, TASK_UNINTERRUPT), 头: 类型为wait_queue_head_t, 节点类型为wait_queue_t.

 

 

 

你可能感兴趣的:(linux,session,list,struct,kill)