4.2 Linux中的进程概述
Linux中的每个进程由一个task_struct数据结构来描述,在Linux中,任务(task)、和进程(process)是两个相同的术语,task_struct其实就是通常所说的“进程控制块”即PCB。task_struct容纳了一个进程的所有信息,是系统对进程进行控制的唯一手段,也是最有效的手段。
在Linux2.4中,Linux为每个新创建的进程动态地分配一个task_struct结构。系统所允许的最大进程数是由机器所拥有的物理内存的大小决定的,例如,在IA32的体系结构中,一个
Linux支持多处理机(SMP),所以系统中允许有多个CPU, Linux作为多处理机操作系统时系统中允许的最大CPU个数为32。很显然,Linux作为单机操作系统时,系统中只有一个CPU,本书主要讨论单处理机的情况。
和其他操作系统类似,Linux也支持两种进程:普通进程和实时进程。实时进程具有一定程度上的紧迫性,要求对外部事件做出非常快的响应;而普通进程则没有这种限制。所以,调度程序要区分对待这两种进程,通常,实时进程要比普通进程优先运行。这两种进程的区分也反映在task_struct数据结构中了。
总之,包含进程所有信息的task_struct数据结构是比较庞大的,但是该数据结构本身并不复杂,我们将它的所有域按其功能可做如下划分:
·进程状态(State)
·进程调度信息(Scheduling
Information)
·各种标识符(Identifiers)
·进程通信有关信息(IPC:Inter_Process Communication)
·时间和定时器信息(Times
and Timers)
·进程链接信息(Links)
·文件系统信息(File
System)
·虚拟内存信息(Virtual
Memory)
· 页面管理信息(page)
· 对称多处理器(SMP)信息
·和处理器相关的环境(上下文)信息(Processor Specific Context)
· 其它信息
下面我们对task_struct结构进行具体描述。