
1.1.2 进程描述符
为了更好地管理进程,Linux制定了进程描述符(Process Descriptor)来详细地描述进程的状态和资源以及所做的事情。Linux的进程描述符是task_struct类型的数据结构,它详细描述了进程的所有信息。进程描述符的实现如代码清单1-1所示。

图1-3 CPU任务调度
代码清单1-1 进程描述符

在上述代码中,state字段描述了当前进程或线程的状态信息,字段值描述了进程当前所处的状态。在当前的Linux系统中进程有如下状态:可运行状态、可中断的等待状态、不可中断的等待状态、暂停状态、僵死状态。详细进程状态描述如表1-1所示。
表1-1 进程状态描述

进程状态变迁如图1-4所示。

图1-4 进程状态变迁
Linux为每个进程都分配了一个唯一的数字标识,这个标识称为PID(ProcessID,进程标识符)。PID是32位的无符号整数,存放在进程描述符的pid字段中。Linux允许的最大PID为32767。
task_struct中定义了4个字段来表示进程之间的关联关系,详细信息如表1-2所示。
表1-2 进程关联关系

task_struct中有4个字段prio、static_prio、normal_prio、rt_priority来表示进程的优先级,详细信息如表1-3所示。
表1-3 进程优先级

static_prio是普通进程的静态优先级,值越小表示优先级越高。rt_priority是实时进程的优先级,值越大表示优先级越高。由于static_prio与rt_priority的单位不同,一个是值越小优先级越高,另一个是值越大优先级越高,所以normal_prio统一成值越小优先级越高。prio是动态优先级,在系统进行任务调度的时候,调度器会根据prio来进行任务调度。对于实时进程,prio就等于normal_prio,对于普通进程,可以临时调整prio来提高优先级。