进程简介
进程(Process)是Unix操作系统最基本的抽象概念之一。进程是正在执行的程序,同时也是操作系统进行资源管理的最小单位,进程需要管理打开的文件、挂起的信号、内核内部数据、处理器状态等。
线程(Thread)是进程中正在执行的程序片段,是操作系统进行调度的最小单位,一个线程指的是进程中一个单一顺序的控制流。Linux中线程只是一个特殊的进程,并没有对进程和线程进行专门的区分。
进程提供了两种虚拟抽象:虚拟处理器和虚拟内存。虚拟处理器让进程觉得自己独占处理器,虚拟内存让程序觉得自己独占系统所有内存。
Linux系统中通常通过fork()创建一个新的进程,通过exec函数族来载入新的程序执行(一般在fork了一个新进程之后调用),通过exit()退出执行。
进程描述符task_struct
进程描述符包含一个进程的所有信息,使用task_struct结构存储。内核使用双向循环列表来存储所有进程的文件描述符,该链表被称为任务队列(task list)。task_struct是一个非常大的结构,存储的信息包括进程号、打开的文件、进程的地址空间、挂起的信号、进程状态等。
task_struct结构使用slab allocator进行分配(slab通过对象重用的方式提高分内存使用效率)。和进程描述符相关的一个数据结构是tread_info,这个结构存储在内核栈的底部(此时栈向下扩展)或者顶部&#