文章目录
- 1. 进程的组成
- 2. 进程与程序的联系
- 3. 进程与程序的区别
- 4. 进程与程序关系
1. 进程的组成
进程具体包含哪些东西:
- 首先要执行相应的代码,所以执行代码需要放到内存中
- 代码执行需要处理数据,数据需要放到内存中
- 需要知道现在要执行哪条指令,需要一个相应的记录,用程序计数器表示,程序计数器存着下一条要执行指令在什么地方
- 同时在处理过程中会用到大量 CPU 寄存器,寄存器会在动态变化
- 还有会用到很多计算机提供的资源,包含内存资源,文件系统,网络等等一系列资源
总之,进程在执行过程中包含了正在运行的程序的所有状态信息,状态信息是比较抽象的概念。
2. 进程与程序的联系
进程不等于程序,进程是动态执行过程,而程序是静态代码。
-
程序和进程到底什么样关系?
程序是产生进程的基础,因为进程执行的所有功能其实在程序中有具体的描述,进程执行功能受制于程序代码,代码已经限制了进程到底实现什么样的功能,所以说程序是产生进程的基础。
另一方面,程序的每次执行构成不同进程,其实可以看到程序只有一份,它放在硬盘中,但可以多次执行这个程序,多次执行程序得到结果不一定是一样的,因为数据可以不一样,当这个程序在运行过程中,它在内存中处理的数据是不一样,那有可能导致它产生行为不一样,这也意味着一个程序多份执行的时候,由于有可能处理的数据不一样,它获得的资源不一样,那么最后得到效果也是不一样,所以说程序的每一次执行,构成不同的进程,而不是同一个进程。
不管怎么说,进程的执行过程是程序功能的体现,虽然可能输入不一样,导致输出不一样,但整体的功能体现是一样。
通过多次执行,一个程序可以应对多个进程,通过调用关系一个进程也可以包含多个程序,因为有可能多个程序合在一起来完成一个更大的功能体现,可以看到进程和程序之间是一种比较复杂的多对多的映射关系。
3. 进程与程序的区别
进程是动态的体现,而程序是静态的代码,程序是有序代码的集合,进程是程序的执行,所以说进程实际上是程序的具体体现。进程在执行过程中需要注意有核心态和用户态度区分,核心态在操作系统中运行,但是写代码时候并没写操作系统代码,那为什么有核心态呢?写代码都是运行在用户态,那为什么有核心态存在?其实进程在执行中需要去完成特定功能,功能只有操作系统才能提供,比如说要读文件,读写文件的过程涉及到跟具体硬盘打交道,那这过程全是操作系统来完成,所以说进程只需给操作系统发出请求,操作系统代表进程在内核中执行,这时候说进程处于核心态,因为它在内核中执行。
进程是暂时的,而程序是永久的。执行一个程序,以进程形式在内存中运行,占用 CPU 运行,整个过程有开始到结束的变化过程,过程结束之后进程就结束了。但程序不一样,程序保存在硬盘中,只要硬盘不坏,程序可以长久地保存。
在具体组成方面也有不一样的地方,虽然说进程用到程序的代码段、数据段等数据结构,但进程执行中有其它一些变化,处理数据的时候,数据在变,而这一点在程序的组成中是不存在的,比如它处理输入数据,最后产生输出数据,以及为了管理这个进程,操作系统所建立进程控制块等等,这些信息在程序中是没有的。所以应该说进程包含了程序部分,还包含一些新的部分。