引言
这两个概念确实很容易让人混淆,但其实是不太一样的。
区别
进程和程序并不是一一对应的,一个程序执行在不同的数据集上就成为不同的进程,可以用进程控制块来唯一地标识每个进程。而这一点正是程序无法做到的,由于程序没有和数据产生直接的联系,既使是执行不同的数据的程序,他们的指令的集合依然是一样的,所以无法唯一地标识出这些运行于不同数据集上的程序。程序只是一组指令的有序集合,它本身没有任何运行的含义,它只是一个静态的实体。而进程则不同,它是程序在某个数据集上的执行。进程是一个动态的实体,它有自己的生命周期。它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消。反映了一个程序在一定的数据集上运行的全部动态过程。
综上,程序就是一个在某种媒介上的二级制代码,它是静态的。而进程是一个程序及其数据在计算机上的一次运行过程,是一个动态的过程。从组成上来说进程由进程控制块(PCB:其中存放了进程标识符,进程运行状态,程序段和数据段的地址,以及该程序运行时的CPU信息),数据,程序组成,而程序由一组有序的指令集合组成。也就是说进程是程序对应的运行过程。
我们可以为进程下一个定义:
进程是可并发执行的程序在一个数据集合上的运行过程,亦即进程实体(进行映像)的运行过程(进程实体:PCB,数据,程序)。即进程是系统资源和调度的一个基本单位。
有一个例子很形象:
一位有一手好厨艺的计算机科学家正在为他的女儿烘制生日蛋糕。他有做生日蛋糕的食谱,厨房里有所需要的原料,在这个比喻中,做蛋糕的食谱就是程序(即用适当形式描述的算法),计算机科学家就是处理机(CPU),而做蛋糕的各种原料就是输入数据。进程就是厨师阅读食谱,取来各种原料以及烘制蛋糕等一系列动作的总和。
参考:
- 博文《进程与程序的区别和联系》
- 博文《操作系统:进程的概念和与程序的区别》
- 博文《进程,线程,程序的区别和联系》