3.1 Linux进程:
每个进程通过一个t a s k _ s t r u c t数据结构表示。Ta s k向量是一个指向系统中所有
t a s k _ s t r u c t数据结构的指针数组。这意味着系统中最大进程受限于Ta s k向量的大小,缺省情况
下它有5 1 2项。当进程被创建时,从系统内存中分配一个新的t a s k _ s t r u c t并把它加入到t a s k向量
中。为了便于查找,当前运行的进程由c u r r e n t指针来指向。
L i n u x还支持实时进程。
t a s k _ s t r u c t数据结构很大很复杂,但它的字段可以被分成几个功能区:
• 状态:运行/等待/停止/死亡
• 调度信息:调度器需要这些信息以公平地决定系统中哪个进程最值得运行
• 标识:系统中每个进程有一个进程标识。进程标识不是t a s k向量的索引,它只是一个简
单的数。每个进程还有用户和组标识,这些被用来控制本进程对系统中文件和设备的访
问。
• 进程间通信:L i n u x支持经典的UNIXTM IPC机制如信号、管道和信号灯,以及System V
I P C机制如共享内存、信号灯和消息队列。
• 链接:系统中每个
进程都有一个父进程,新的进程不是被创建,它们是从先前的进程被复制(或说克隆)。
每一个表示一个进程的t a s k _ s t r u c t都有指针指向其父进程及其兄弟进程(和它具有相同父
进程的进程)以及它自己的子进程。你可以用p t r e e命令查看L i n u x系统中运行的进程之间
的家族关系
• 时间和时钟:内核记住进程的创建时间以及在它生存期内消耗的C P U时间
• 文件系统:进程在需要的时候可以打开和关闭文件;进程的t a s k _ s t r u c t包含每个打开的
文件的描述符指针以及两个V F S索引节点的指针。每个V F S索引节点唯一地描述文件系
统中的一个文件或目录,并提供一个底层文件系统的统一接口。令p w d—打印工作目录(print working directory)
• 虚拟内存:大多数进程有一些虚拟内存(内核线程和守护进程没有),并且L i n u x必须跟踪
虚拟内存如何映射到系统物理内存。
• 处理器相关上下文:一个进程可以被认为是系统当前状态的总和。每当一个进程运行时,
它要使用处理器的寄存器、栈等等,这是进程的上下文( c o n t e x t )。并且,每当一个进程
被暂停时,所有的C P U相关上下文必须被保存在该进程的t a s k _ s t r u c t中。当进程被调度
器重新启动时其上下文将从这里恢复。