4.9 本章小节

   本章对进程进行了全面描述,但并不是对每个部分都进行了深入描述,因为在整个操作系统中,进程处于核心位置,因此,内核的其他部分(如文件、内存、进程间的通信等)都与进程有密切的联系,相关内容只能在后续的章节中涉及到。通过本章的介绍,读者应该对进程有一个全方位的认识:

1.            进程是由正文段(text)、用户数据段(user segment)以及系统数据段(system segment)共同组成的一个执行环境。

2.            Linux中用task_struct结构来描述进程,也就是说,有关进程的所有信息都存储在这个数据结构中,或者说,Linux中的进程与task_struct结构是同意词,在英文描述中,有时把进程(process) 和线程(thread)混在一起使用,但并不是说,进程与线程有同样的含义,只不过描述线程的数据结构也是task_structtask_struct就是一般教科书上所讲的进程控制块.

3.            本章对task_struct结构中存放的信息进行了分类讨论,但并不要求在此能掌握所有的内容,相对独立的内容为进程的状态,在此再次给与概述:

·      TASK_RUNNING:也就是通常所说的就绪(ready)状态

·      TASK_INTERRUPTIBLE:等待一个信号或一个资源 (睡眠状态)

·      TASK_UNINTERRUPTIBLE, 等待一个资源 (睡眠状态), 处于某个等待队列中。

·      TASK_ZOMBIE, 没有父进程的子进程

·      TASK_STOPPED, 正在被调试的任务。

4.            task_struct结构与内核存放在一起,8K的空间。

5.            当前进程就是在某个CPU上正在运行的进程,Linux中用宏current来描述,也可以把curennt当作一个全局变量来用。

6.            为了把内核中的所有进程组织起来,Linux提供了几种组织方式,其中哈希表和双向循环链表方式是针对系统中的所有进程(包括内核线程),而运行队列和等待队列是把处于同一状态的进程组织起来。

7.            Linux2.4中引入一种通用链表list_head,这是面向对象思想在C中的具体实现,在内核中其他使用链表的地方都引用了这种基类型。

8.            进程的权能和内核的同步我们仅仅做了简单介绍,因为进程管理会涉及到这些内容,但它们不是进程管理的核心内容,引入这些内容仅仅是为了让读者在阅读源代码时扫除一些障碍。

9.            进程的创建及执行将在第六章的最后一节进行讨论。