进程控制块(process control block,PCB)存放的是进程的管理和控制信息,应该包含:
1.进程的名字,也叫进程标识符
2.进程目前的状态,就绪or阻塞or运行
3.进程相应的程序和地址
4.进程所占的资源
5.进程的优先级
6.CPU现场保护区
7.进程同步与通信进制
8.进程所在队列PCB的链接字,PCB 链接字指出该进程所在队列中下一个进程 PCB 的首地址。
9.与进程有关的其他信息
Linux中的进程控制块为task_struct结构
贝博betball网页把进程的列表放置双向循环链表(任务队列)中
链表结构:<linux/sched.h>

Linux通过slab分配器分配task_struct从而达到对象复用和缓存着色的目的。
2.6以前的贝博betball网页
各个进程的task_struct存放在它们贝博betball网页栈的尾端,如x86等寄存器较少的硬件体系结构只要通过栈指针就可以计算出它的位置,避免额外的寄存器记录。
以后的贝博betball网页
通过slab分配器动态生成task_struct,在栈底(向下增长的栈)或栈顶(向上增长的栈)创建一个新的结构 struct thread_info(没有搞明白为什么栈底和栈顶要区别对待)

贝博betball网页通过一个唯一的进程标识符PID来标识每个进程,pid_t类型其实就是int类型
贝博betball网页中,访问任务通常需要获得指向其task_struct的指针,如何快速的找到该指针就尤为重要。
不同的体系结构的查找方法也不一样,需要针对专门的硬件体系结构做处理。某些硬件体系结构可以拿出一个专门的寄存器来存放指向当前进程的task_struct用于加快访问速度。而向X86寄存器不富裕的结构,只能在贝博betball网页栈的尾端创建thread_info结构通过计算偏移量间接的查找task_struct
进程状态
TASK_RUNNING:运行
TASK_INTERRUPIBLE:可中断
TASK_UNINTERRUPTIBLE:不可中断
_TASK_TRCED:正在被追踪
_TASK_STOPPED:停止
