1. 进程的基本原理 进程的作用就是担当分配系统资源(CPU 时间,存储器等)的实体。 1.1 程序执行的原理 Linux 中的程序和命令通常由命令解释器执行,这一命令解释器称为 shell。 用户输入命令之后,shell 会在搜索路径(shell 变量PATH 中包含搜索路径)指定的目录中搜索和输入命令匹配的映象(可执行的二进制代码)名称。如果发现匹配的映象,shell 负责装载并执行该映像。shell 首先利用 fork 系统调用建立子进程,然后用找到的可执行映象文件覆盖子进程正在执行的 shell 二进制映象。 在执行fork()之后,同一进程有两个拷贝都在运行,也就是说,子进程具有与父进程相同的可执行程序和数据(简称映像)。但是,子进程肯定不满足于仅仅成为父进程的“影子”,因此,父进程就要调用execve()装入并执行子进程自己的映像。execve()函数必需定位可执行文件的映像,然后装入并运行它。当然开始装入的并不是实际二进制映像的完全拷贝,拷贝的完全装入是用请页装入机制(demand pageing loading)逐步完成的。开始时只需要把要执行的二进制映像头装入内存,可执行代码的 inode 节点被装入当前进程的执行域中就可以执行了。 例如:$ ls -l /usr/bin 以获得在/usr/bin 目录下的全部文件列表时,shell 进程创建一个新进程执行这个命令。这个新进程装入/bin/ls 可执行文件。在这样做的过程中,从shell 继承的大多数执行上下文被丢弃,但三个单独的参数ls、 -l 和 /usr/依然被保持。一般情况下,新进程可以接受任意个参数。 2. 进程描述【/include/linux/sched.h】 包含进程所有信息的task_struct 数据结构是比较庞大的,但是该数据结构本身并不复杂,我们将它的所有域按其功能可做如下划分: ( 1)进程状态(State) ( 2)进程调度信息(Scheduling Information) ( 3)各种标识符(Identifiers) ( 4)进程通信有关信息(IPC: Inter_Process Communication) ( 5)时间和定时器信息(Times and Timers) ( 6)进程链接信息(Links) ( 7)文件系统信息(File System) ( 8)虚拟内存信息(Virtual Memory) ( 9)页面管理信息(page) ( 10)对称多处理器(SMP)信息 ( 11)和处理器相关的环境(上下文)信息(Processor Specific Context) ( 12)其它信息 ( 1)进程状态(volatile long State) 进程执行时,它会根据具体情况改变状态。进程状态是调度和对...