进程的基本原理 进程的作用就是担当分配系统资源(CPU 时间,存储器等)的实体
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/依然被保持
一般情况下,新进程可以接受任意个参数
进程描述【/include/linux/sched
h】 包含进程所有信息的task_struct 数据结构是比较庞大的,但是该数据结构本身并不复杂,我们将它的所有域按其功能可做如下划分: (