进程的定义
由于程序在并发执行时,各次执行的结果不同,所以用“程序”这个概念已无法描述程序的并发执行,所以必须引入新的概念 – 进程来描述程序的并发执行。
根据1978年在庐山召开的全国操作系统会议的讨论,认为“进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动”。
进程是系统进行资源分配和调用的独立单位。每一个进程都有它自己的内存空间和系统资源。
程序与进程之间的区别:
- 进程是程序的执行,属于动态,程序是静态的
- 进程的存在是暂时的,程序的存在是永久的。 “ 一次运行活动 ” –––生命周期、诞生(建立)、死亡(撤消)
- 进程实体=程序+数据+PCB (进程控制块),即进程 是一个程序及其数据在处理机上顺序地执行时所发生的活动。
- 一个程序可以对应多个进程
- 一个进程可以包含多个程序
进程的特性:
- 动态性:进程是程序的一次执行过程,由创建到消亡是有一定生命周期的,在生命周期内其状态动态变化。
- 并发性:在内存中的多个进程能在一段时间内同时运行。并发性使得进程执行过程随时会被中断。
- 独立性:进程是一个能够独立运行的基本单位,即只有进 程才能被独立调度运行及独立获得资源。
- 异步性:这是指进程以各自独立的、不可预知的速度向前推进。正是这一特征,将导致程序执行的不可再
现性,OS需要系统采取必要的措施,以保证各个进程的程序之间能协调运行。 - 交往性:多个进程之间可能会发生直接或间接的相互作用。
进程的三个基本状态
- 运行状态(Running):当一个进程在处理机上运行时,则称该进程处于运行状态。
- 就绪状态(Ready):一个进程获得了除处理机外的一切所需资源,一旦得到处理机即可运行,则称此进程处于就绪状态。
- 阻塞状态(Waiting):(又称等待状态、封锁状态):一个进程正在等待某一事件发生(例如请求I/O而等待I/O完成等)而暂时停止运行,这时即使把处理机分配给进程也无法运行,故称该进程处于阻塞状态。
三个基本状态之间可能转换和转换原因如下:
- 就绪态――>运行态:进程调度程序按某种算法将处于就绪队列的某个进程选出,把CPU分配给它,该进程便由就绪状态转变为运行状态。
- 运行态――>就绪态:处于运行状态的进程因时间片用完而被中断,将该进程的PCB表插入就绪队列,该进程便由运行状态转变为就绪状态。如果在采用抢占式调度策略的系统中,进入就绪队列的进程的优先级高于正处在运行状态的进程,可抢占CPU,将执行状态进程的PCB表插入就绪队列,由运行状态转变为就绪状态。
- 运行态――>阻塞态:进程在某等待事件发生(例如I/O请求、原语P操作等)而无法执行时,会由运行状态转变为阻塞状态,在等待该事件的完成过程中将放弃CPU的使用权。
- 阻塞态――>就绪态:进程在某等待事件完成,被阻塞的原因解除(例如I/O完成、原语V操作等)时,将阻塞状态进程的PCB表插入就绪队列,由阻塞状态转变为就绪状态,重新获得被调度的权力。
进程运行期间会不断地从一个状态转变为另一个状态,它可以多次处于上述三个基本状态中。当一个进程完成,或者在执行过程中出现意外情况而异常结束时,进程被撤消,生命期结束。
多进程的优点和缺点
-
优点:
可以并行的执行多个任务,提高运行效率,(可利用计算机多核),空间独立,数据安全,创建方便 -
缺点:
进程的创建和销毁过程需要消耗较多的计算机资源,
在需要频繁创建和删除较多进程的情况下,资源消耗过多,不适宜使用多进程完成任务;
不过进程池技术可以解决频繁创建和删除多进程。
线程
线程的引入
- 在引入进程概念的操作系统中,将进程作为一个独立运行的基本单位,这包括两层含义:只有进程可以被调度运行,只有进程才能拥有资源。
- 当进程被创建时,系统要为它分配PCB表及其它必要的资源,如内存等;当进程被撤消时,系统要收回这些资源及PCB表等,因此系统必须付出一定的时空开销。当进程运行时,进程的切换现象更会大量存在,由于要保留当前执行进程的CPU现场和为选中执行的进程重布现场,更需较大的时空开销。
- 为了使进程的程序充分并发执行,同时能尽量减少系统的开销,人们提出了新想法,将进程调度运行和拥有资源这两个基本运行单位的属性分开,让进程拥有资源,而让一个新的实体作为调度运行的基本单位。基于这种想法,产生了线程的概念。
- 在引入线程的操作系统中,将进程看作资源集合与线程集合的复合体。
- 进程拥有资源,属于同一个进程的所有线程可以共享这些资源。此外,每个线程仅有较少的私用资源,如程序计数器、寄存器和栈等。
- 每一个线程是一个动态对象,它表示进程中的一条控制线索,执行一系列指令操作,是一个相对独立的、可被调度运行的基本单位。
- 在进程的地址空间中可以有多个线程,它们可以并发执行,这就需要一张单独的表来记录线程控制与管理等信息,这张表称为线程控制表。其中,每个线程占一项,以记录线程的程序计数器、寄存器的值及状态等信息。程序计数器可以使线程像进程一样被暂停执行和恢复执行,寄存器的值等可以保存线程暂停执行时的CPU状态。
线程由创建而产生,由撤消而消亡,在生命期间,线程可以处于就绪状态、执行状态和阻塞状态三个基本状态中。这三个基本状态也像进程一样,会发生变迁,如就绪状态→执行状态,执行状态→阻塞状态,阻塞状态→就绪状态等。
线程与进程的比较
1.调度
在传统的操作系统中,拥有资源的基本单位和独立调度运行的基本单位都是进程。在引入线程的操作系统中,则把线程作为调度运行的基本单位,而把进程作为拥有资源的基本单位。在同一个进程中,线程的调度不会引起进程的调度,只有在由一个进程中的线程调度到另一进程中的线程时,才会引起进程的调度。
2.并发性
在引入线程的操作系统中,不仅进程之间可以并发执行,而且属于同一个进程的多个线程之间也可以并发执行,因而使系统具有更好的并发性,可以更有效地使用系统资源和提高系统的吞吐量。
3.拥有资源
无论是传统的操作系统,还是引入线程的操作系统,进程都是拥有资源的一个独立单位,而线程仅拥有很少的一些私有资源(如程序计数器、寄存器和栈、线程表项等),但是它可以访问所属进程的所有资源。
4.系统开销
由于在进程创建和进程撤消时,系统都要为之分配或回收资源,如PCB表、内存空间,I/O设备等。因此,系统所付出的开销显然大于创建线程和撤消线程的开销。类似地,在进行进程调度时,涉及到当前执行进程CPU环境的保存以及新调度运行进程的CPU环境的重布,而线程调度只须保存和重新设置少量寄存器、程序计数器PC的内容。可见,进程切换的开销远远大于线程切换的开销。此外,由于同一进程的多个线程具有相同的地址空间,使得它们之间的同步和通信也变得比较容易实现。