为了管理进程,内核必须清楚地了解每个进程在做什么。例如,它必须知道进程的优先级、它是在 CPU 上运行还是在某个事件上被阻塞、分配给它的地址空间、允许它寻址的文件等等。这就是进程描述符的作用——一个task_struct
类型的结构,其字段包含与单个进程相关的所有信息。作为如此多信息的存储库,进程描述符相当复杂。除了包含进程属性的大量字段外,进程描述符还包含几个指向其他数据结构的指针,这些数据结构又包含指向其他结构的指针。下图示意性地描述了 Linux 进程描述符。
图中右侧的六个数据结构指的是进程所拥有的具体资源。这些资源中的大部分将在以后的章节中介绍。本章重点介绍两种类型的字段,它们是进程状态和进程父/子关系。
PID 通常是上一个创建进程 PID + 1。可以从头利用。
内核维护一个 bitmap pidmap_array
用于记录哪些 PID 可用,哪些 PID 已被使用,用一个页装载(32位体系结构)。这些页从不释放。