进程(process)是一个可执行程序(program)的实例。
程序是包含了一系列信息的文件,这些信息描述了如何在运行时创建一个进程,所包括的内容如下所示。
二进制格式标识:每个程序文件都包含用于描述可执行文件格式的元信息(metainformation)。内核(kernel)利用此信息来解释文件中的其他信息。
历史上,UNIX可执行文件曾有两种广泛使用的格式,分别是最初的a.out(汇编程序输出)和更加复杂的COFF(通用对象文件格式)。
现在,大多数UNIX实现(包括Linux)采用可执行连接格式(ELF),这一文件格式比老版本格式具有更多优点。
机器语言指令:对程序算法进行编码。
程序入口地址:标识程序开始执行时的起始指令位置。
数据:程序文件包含的变量初始值和程序使用的字面常量(literal constant)值(比如字符串)。
符号表及重定位表:描述程序中函数和变量的位置及名称。这些表格有多种用途,其中包括调试和运行时的符号解析(动态链接)。
共享库和动态链接信息:程序文件所包含的一些字段,列出了程序运行时需要使用的共享库,以及加载共享库的动态链接器的路径名。
其他信息:程序文件还包含许多其他信息,用以描述如何创建进程。
可以用一个程序来创建许多进程,或者反过来说,许多进程运行的可以是同一程序。
现在定义进程是由内核定义的抽象的实体,并为该实体分配用以执行程序的各项系统资源。
从内核角度看,进程由用户内存空间(user-space memory)和一系列内核数据结构组成,其中用户内存空间包含了程序代码及代码所使用的变量,而内核数据结构则用于维护进程状态信息。
记录在内核数据结构中的信息包括许多与进程相关的标识号(IDs)、虚拟内存表、打开文件的描述符、信号传递以及处理的有关信息、进程资源使用及限制、当前工作目录和大量的其他信息。
看来一个进程起来还是包含了好多东西啊。