“从一个业内人士的视角来欣赏和理解Linux内核的设计和实现之美。”
进程:是处于执行期的程序以及相关的资源的总称。完全可能存在两个或多个不同的进程执行的是同一个程序。并且两个域两个以上并存的进程还可以共享许多诸如打开的文件、地址空间之类的资源。父进程调用fork()系统产生子进程。
在现代操作系统中,进程提供两种虚拟机制:虚拟处理器和虚拟内存
虚拟处理器:虽然实际上可能是许多进程正在分享一个处理器运算资源,但虚拟处理器给进程一种假象,让这些进程觉得自己在独享处理器。
虚拟内存:让进程在分配和管理内在时觉自己拥有整个系统的所有内存资源。
任务队列(task list):内核把进程的列表存放在任务队列的双向循环链表中。链表中的每一项都是为task_struct(在32位机器上它大约有1.7KB)、称为进程描述符的结构,该结构定义在<linux/sched.h>文件中。进程描述符中包含一个具体进程的所有信息。
进程的状态:进程描述符中的state域描述了进程的当前状态。系统中的每个进程都必然处于五种进程状态中的一种。
TASK_RUNNING(运行)----进程是可执行的,或者它正在执行,或者在运行队列中等待执行。
TASK_INTERRUPTIBLE(可中断)----进程正在睡眠(阻塞),等待某些条件的达成。
TASK_UNINTERRUPTIBLE(不可中断)----就算是接收到信号也不会被唤醒或准备投入运行。
__TASK_TRACED----被其他进程跟踪的进程。
__TASK_STOPPED(停止)----进程停止执行