为什么要引入进程和线程的问题呢?
一项新概念的引入一般都是为了更好的描述或构建一个新的体系。进程与线程也不外乎如此。
进程是在多道程序系统中引入,但直到目前为止,进程的定义也未能完全统一。而线程则出现的较晚,但却是弥补了进程的一些缺陷,所以线程又名轻进程。
关于进程这一概念的解释有很多种,但这些解释都具有同一个特性——强调程序的执行,即进程所具有的一种动态特性,这是进程与程序间本质上的差异。
进程与程序的区别:
- 程序是静态的,进程是动态的。
- 程序可通过存储介质长期保存,进程具有生命周期。
- 程序和进程是一对多的关系,而进程和程序确只能是一对一。
关于进程,我们做出如下讨论。
无论是系统进程还是用户进程,都具有:
并发性,动态性,独立性,交互性,异步性,结构性等几大特性。
注意:进程是调度的基本单位
基本状态有三种:
进程状态转换:
运行->就绪:剥夺进程所占有的处理器资源(也可能是进程正常执行结束)。
运行->等待:等待某事件的发生。
就绪->运行:分配进程处理器资源。
就绪->等待:不存在。
等待->就绪:进程所等待的事件以发生,当前正在等待处理器资源。
等待->运行:不存在。
NOTE:
非抢占式调度,不存在运行->就绪的状态转换。
处理器调度算法对于进程的状态转换具有直接的影响,如上所述即为一种情况。
进程控制块是标志进程存在的数据结构(对用户透明),在其中包含系统对进程管理所需要的全部信息。
PCB中所包含的信息数量与系统规模,功能成正相关关系。
建立进程->建立PCB
撤销PCB->撤销进程
将进程控制块送入就绪队列
由父进程创建的子进程是其全盘复制,即子进程除了进程号与父进程不一致外,其他均相同。
通知父进程
进程的撤销的原因可以是正常执行结束,也可以是进程执行是发生错误而结束。
逻辑关系:
相互作用:
直接相互作用: 不需要第三方而发生相互作用
只能发生在相关进程之间。
间接相互作用: 需要第三方才能发生作用
线程与进程相类似,所以又成线程为轻进程,但线程是进程内的一个相对独立的执行流,即一个线程包含多个线程。
进程内的多个线程执行同一程序中相同或不同代码段,共享数据区和堆。
进程是资源的分配单位,线程是CPU的调度单位。
TCB中内容较少,因为大多数内容是记录在进程中。
线程的实现方式决定TCB的归属。
TCB归属:操作系统空间,用户进程空间。
当一个应用中进程间的功能有所重叠(如具有相同的代码和数据),此时如果采用多进程的方式,那么对于系统来说,系统开销是非常巨大的。
所以多线程的引入成为了必需:
只有当同一进程中的多个线程具有相同代码和数据,或者这些线程之间是合作(执行代码不同部分)的,或者是同构(执行相同代码)。才可以采用多线程处理模式。
程序是进程的组成部分,进程是为了执行对应的程序而存在的,如此可知没有程序,进程也失去了讨论的意义。
而没了进程,线程也就不复存在了。
原文:https://www.cnblogs.com/keepsmart/p/11368485.html