4.2 Linux中的进程概述

Linux中的每个进程由一个task_struct数据结构来描述,在Linux中,任务(task)、和进程(process)是两个相同的术语,task_struct其实就是通常所说的“进程控制块”即PCBtask_struct容纳了一个进程的所有信息,是系统对进程进行控制的唯一手段,也是最有效的手段。

Linux2.4中,Linux为每个新创建的进程动态地分配一个task_struct结构。系统所允许的最大进程数是由机器所拥有的物理内存的大小决定的,例如,在IA32的体系结构中,一个512M内存的机器,其最大进程数可以达到32K,这是对旧内核(2.2以前)版本的极大改进[1]

Linux支持多处理机(SMP),所以系统中允许有多个CPU Linux作为多处理机操作系统时系统中允许的最大CPU个数为32。很显然,Linux作为单机操作系统时,系统中只有一个CPU,本书主要讨论单处理机的情况。

和其他操作系统类似,Linux也支持两种进程:普通进程和实时进程。实时进程具有一定程度上的紧迫性,要求对外部事件做出非常快的响应;而普通进程则没有这种限制。所以,调度程序要区分对待这两种进程,通常,实时进程要比普通进程优先运行。这两种进程的区分也反映在task_struct数据结构中了。

总之,包含进程所有信息的task_struct数据结构是比较庞大的,但是该数据结构本身并不复杂,我们将它的所有域按其功能可做如下划分:

·进程状态(State

·进程调度信息(Scheduling Information

·各种标识符(Identifiers

·进程通信有关信息(IPCInter_Process Communication

·时间和定时器信息(Times and Timers

·进程链接信息(Links

·文件系统信息(File System

·虚拟内存信息(Virtual Memory

·      页面管理信息(page

·      对称多处理器(SMP)信息

·和处理器相关的环境(上下文)信息(Processor Specific Context

·      其它信息

下面我们对task_struct结构进行具体描述。

 



[1] Linux2.2及以前的版本中,用一个task数组来管理系统中所有进程的task_struct结构,因此,系统中进程的最大个数受数组大小的限制。