一、进程
1、概念
进程就是处于执行期的程序,其包含了代码区段、资源区段、数据区段等。进程提供了两种虚拟机制:虚拟处理器和虚拟内存。虚拟机制的存在使得每个进程会认为自己独享处理器与物理存储资源。
进程是处于执行期的程序以及相关资源的总称。进程在创建的时刻开始存活,在linux中这通常是调用fork函数产生的结果。fork系统调用从内核返回两次:一次返回到父进程, 另一次返回到新产生的子进程。父进程可以通过wait族函数(wait() , waitpid() , wait3() , wait4())系统调用来查询子进程是否终止。子进程退出后被设置为僵死状态,直到父进程调用wait族函数为止。
2、进程描述与结构
内核把进程的列表存放在一个叫做任务队列(task_list)的双向循环链表中。链表中的每一项都是类型为task_struct、被称为进程描述符的结构,该结构在<linux/sched.h>中定义。通过task_struct,可以描述出该进程所需的所有信息,比如:打开的文件、进程地址空间、挂起信号、进程状态等。
Linux通过slab分配器分配task_struct结构,这样能够达到对象复用和缓存着色的目的,通过此种方式,使得Linux的进程创建非常迅速。在使用slab分配器的情况下,内核只需要在栈底(当栈是向下增长的)或栈顶(当栈是向上增长的)的位置创建一个新的结构struct thread_info(在x86上被定义在asm/thread_info.h中):
struct thread_info
{
...
struct task_struct *task;
...
...
};