操作系统的进程是什么呢?有何神奇之处呢?

  • Post author:
  • Post category:其他


并发程序和顺序程序的执行有本质上的差异,为了能更好地描述程序的并发执行,实现处理器的并发性和共享性,引入“进程”的概念。以下部分介绍

进程的概念、进程状态及状态转换、描述进程属性的数据结构——进程控制块,以及对进程可实施的主要操作


一、进程的定义


进程是具有一定独立功能的程序在某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位

。 从操作系统角度来看,可将进程分为

系统进程



用户进程

两类。系统进程执行操作系统程序,完成操作系统的某些功能。用户进程运行用户程序,直接为用户服务。系统进程的优先级通常高于一般用户进程的优先级。


1.进程与程序的联系和区别

进程和程序既有联系又有区别


(1)进程和程序的联系

程序是构成进程的组成部分之一,一个进程的运行目标是执行它所对应的程序,如果没有程序,进程就失去了其存在的意义。从静态的角度看,

进程是由程序、数据和进程控制块(PCB)三部分组成的


(2)进程和程序的区别

程序是静态的,而进程是动态的。

进程是程序的一个执行过程。程序的存在是永久的(这里不讨论人为删除程序等行为)。而进程是为了程序的一次执行而暂时存在的。进程有生命周期,有诞生,亦有消亡。


一个进程可以包括若干程序的执行,而一个程序亦可以产生多个进程

。比如,一个编译进程在运行时就要执行词法分析、语法分析、代码生成和优化等若干个程序。而一个编译程序有时也需要同时生成几个编译进程,为几个用户服务。


进程具有创建其他进程的功能。被创建的进程称为子进程,而创建者称为父进程,从而构成了进程家族

2.可再入程序

一个程序不是任何条件下都可以产生多个进程的。一个能被多个用户同时调用的程序,在执行中自身不能改变。

如果一个程序在执行中会发生变化,那么,这个程序的功能就是可能改变的。显然该程序就不能以同样的方式为每个用户服务。甚至同一个用户以同样的要求在不同时刻调用它时,也可能得到不同的结果,这样的程序就不能同时为多个用户服务。


一个能够被多个用户同时调用的程序称作是“可再入”的程序

。可再入程序必须是“纯”代码的程序,程序在执行中不会修改自身的代码。换句话说,可再入程序必须和有关的数据区分离。可再入程序的操作对象,即数据,是与程序相分离的,要求调用者提供专用工作区,以保证程序以同样方式为各用户服务。现代的操作系统及编译程序都是属于可再入 程序,它们能同时被不同用户调用而形成不同的进程。

3.进程的特征

使用进程的概念能很好地描述程序的并发执行,并且能够揭示操作系统的内部特性。事实上,操作系统的并发性和共享性正是通过进程的活动体现出来的。

进程具有两个基本属性。首先,

进程是一个可拥有资源的独立单位

;其次,

进程同时又是一个可以独立调度和分派的基本单位

。正是由于进程具有这两个基本属性,才使之成为个能独立运行的基本单位,从而也构成了进程并发执行的基础。

进程具有以下特性。


(1)并发性

一个进程可以同其他进程一道向前推进,即一个进程的第一个动作可以在另一个进程的最后一个动作结束之前就开始。


(2)动态性

进程对应着程序的执行过程。进程的动态性体现在两方面。首先,进程有其生命周期,有产生,也有消亡。其次,在进程的生命周期内,进程的状态是不断变化的。


(3)独立性

一个进程是一个相对完整的资源分配单位。


(4)交往性

一个进程在运行过程中可能会与其他进程发生直接的或间接的相互作用。


(5)异步性

每个进程按照各自独立的、不可预知的速度向前推进。


(6)结构性


一个进程由程序、数据和进程控制块三部分组成


二、进程的状态与转换

进程在从创建到终止的全过程中一直处于一个不断变化的过程。为了刻画进程的这个变化过程,所有操作系统都把进程分成若干种状态,约定各种状态间的转换条件。对进程状态的刻画也经历了一个不断精确化的过程。下面我们就讨论进程的状态模型。

1.三状态进程模型

运行中的进程可以处于以下三种状态之一:

运行、就绪、等待


(1)运行状态( Running)

是指进程已获得处理器并且在处理器上执行的状态。显然,

在一个单处理器系统中,最多只有一个进程处于运行态


(2)就绪状态( Ready)

是指一个进程已经具备运行条件,但由于没有获得处理器而不能运行所处的状态。一旦把处理器分配给它,该进程就可运行。处于就绪状态的进程可以是多个。


(3)等待状态( Waiting)

也称阻塞状态或封锁状态。是指进程因等待某种事件发生而暂时不能运行的状态。例如,当两个进程竞争使用同一个资源时,没有占用该资源的进程便处于等待状态,它必须等到该资源被释放后才可以去使用它。引起等待的原因一旦消失,进程便转为就绪状态,以便在适当的时候投入运行。系统中处于等待状态的进程可以有多个。


在任何时刻,任何进程都处于且仅处于三种状态之一

。进程在运行过程中,由于它自身的进展情况和外界环境条件的变化,三种基本状态可以相互转换。这种转换由操作系统完成,对用户是透明的。它也体现了进程的动态性。图3-2表示了三种基本状态之间的转换及其典型的转换原因。


1)就绪→运行

。处于就绪状态的进程,它已具备了运行的条件,但由于未能获得处理器,故仍然不能运行。对于单处理器系统而言,因为处于就绪状态的进程往往不止一个,同一时刻只能有一个就绪进程获得处理器,进程调度程序根据调度算法(如优先级或时间片)把处理器分配给某个就绪进程,建立该进程运行状态标记,并把控制转入该进程的启动程序,/就绪把它由就绪状态变为运行状态。这样进程就投入运行。


2)运行→就绪

。这种状态变化通常出现在分时操作系统中。正在运行的进程,由于规定的运行时间片用完而使系统发出超时中断请求,超时中断处理程序把该进程的状态修改为就绪状态,根据其自身的特征而插入就绪队列的适当位置,保留进程现场信息,收回处理器并转入进程调度程序。于是,正在运行的进程就由运行状态变为就绪状态。


3)运行→等待

。处于运行状态的进程能否继续运行,除了受时间限制外,还受其他种种因素的影响。例如,运行中的进程需要等待文件的输入(或其他进程同步操作的影响)时,控制便自动转入系统控制程序,通过信息管理程序及设备管理程序进行文件输入;在输入过程中这个进程并不恢复到运行状态,而是由运行变成等待(此时,标记等待原因,并保留当前进程现场信息),然后控制转入进程调度程序。进程调度程序根据调度算法把处理器分配给原已处于就绪状态的进程。


4)等待→就绪

。等待的进程在其被阻塞的原因获得解除后,并不能立即投入运行,因为处理器满足不了进程的需要,于是将其状态由等待变成就绪,仅当进程调度程序把处理器再次分配给它时,才可恢复现场继续运行


2.五状态进程模型

五状态进程模型中,进程状态被分成下列五种状态。

进程在运行过程中主要是在就绪、运行和阻塞三种状态间进行转换。创建状态和退出状态描述进程创建的过程和进程退出的过程


1)运行状态( Running)

:进程占用处理器资源,处于此状态的进程的数目小于等于处理器的数目。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。


2)就绪状态( Ready)

:进程已获得除处理器外的所需资源,等待分配处理器资源,只要分配处理器就可执行。如图33所示,就绪进程可以排成一个就绪队列,也可以按多个优先级来划分队列。例如:当一个进程由于时间片用完而进入就绪状态时,排入低优先级队列;当进程由于I/O操作完成而进入就绪状态时,排入高优先级队列。


3)阻塞状态( Blocked)

:由于进程等待I/O操作或进程同步等条件而暂停运行时处于阻塞状态。在条件满足之前,即使把处理器分配给该进程,也是无法继续执行的。如图3-3所示,所有处于阻塞状态的进程排成一个阻塞队列,也可以按等待事件的不同分成多个子队列


4)创建状态(New)

:进程正在创建过程中,还不能运行。操作系统在创建状态要进行的工作包括分配和建立进程控制块表项、建立资源表格(如打开文件表),并分配资源,加载程序并建立地址空间表等。


5)结束状态(Exit)

:进程已结束运行,回收除进程控制块之外的其他资源,并让其他进程从进程控制块中收集有关信息(如记账和将退出代码传递给父进程)。


操作系统中多个进程的并发执行通过进程交替进入运行状态来实现的

。在五状态进程模型中进程的主要状态交替循环有两个,一个由调度与超时这两个转换构成。当一个正处于运行状态的进程超时后放入就绪队列,并修改进程状态为就绪状态;然后通过调度选择另一个就绪进程进入运行状态,完成一次运行进程的交替。另一个由调度、等待事件和事件出现这三个转换构成。当一个正处于运行状态的进程需要等待某事件发生时主动放弃处理器,进入阻塞状态;然后通过调度选择另一个就绪进程进入运行状态;当进程所等待的事件出现时,相应进程被从阻塞队列中取出,并放入就绪队列,同时进程状态从阻塞状态转换成就绪状态,等待进入运行状态。这样就完成了一次从运行到阻塞,再到就绪的状态循环。

下面是五状态进程模型中的主要状态转换。


1)创建新进程

:创建一个新进程,以运行一个程序。创建新进程的可能原因包括用户登录、操作系统创建以提供某项服务、批处理进程等。


2)提交( Admit)

:完成一个新进程的创建过程,新进程进入就绪状态。由于性能、内存、进程总数等原因,系统会限制并发进程总数。


3)调度运行( Dispatch)

:从就绪进程表中选择一个进程,进入运行状态。


4)释放( Release)

:由于进程完成或失败而终止进程运行,进入结束状态。为了简洁,状态变迁图中只画出了运行状态到结束状态间的释放转换;但实际上,还存在从就绪状态或阻塞状态到结束状态的释放转换。运行到结束的转换可分为正常退出(Exit)和异常退出( Abort);其中异常退出是指进程执行超时、内存不够、非法指令或地址访问、I/O操作失败、被其他进程所终止等原因而退出。可能导致从就绪或阻塞到结束转换的可能是由于多种原因引发的,如父进程可在任何时间终止子进程。


5)超时( Timeout)

或被抢占:由于用完时间片或由于高优先级进程就绪被抢占等原因导致进程暂停运行。


6)事件等待( Event Wait)

:进程要求的事件未出现而进入阻塞;可能的原因包括申请系统服务或资源、通信、I/O操作等。


7)事件出现( Event occurs)

:进程等待的事件出现;如操作完成、申请成功等。


3.七状态进程模型

五状态进程模型没有区分进程地址空间位于内存还是外存,而在操作系统中引人虚拟存储管理技术后,需要进一步区分进程的地址空间状态。该问题的出现是由于进程优先级的引入,一些低优先级进程可能等待较长时间,从而被对换至外存。这种做法可得到下列好处。


1)提高处理器效率

:就绪进程表为空时,有空闲内存空间用于提交新进程,可提高处理器效率


2)可为运行进程提供足够内存

:资源紧张时,可把某些进程对换至外存。


3)有利于调试

:在调试时,挂起被调试进程,可方便对其地址空间进行读写。

如图34所示,与五状态进程模型相比,七状态进程模型把原来的就绪状态和阻塞状态进行了细分,增加了就绪挂起和阻塞挂起两个状态。这时原来的就绪状态和阻塞状态的意义也发生了一些变化。下面列出的是在挂起进程模型中的四种意义有变化或新的状态。


1)就绪状态( Ready)

:进程在内存且可立即进入运行状态。


2)阻塞状态( Blocked)

:进程在内存并等待某事件的出现。


3)阻塞挂起状态( Blocked, Suspend)

:进程在外存并等待某事件的出现。


4)就绪挂起状态( Ready, Suspend)

:进程在外存,但只要进入内存,即可运行。

在七状态进程模型中,新引入的状态转换有挂起和激活两类,意义有变化的转换有事件出现和进程提交两类。


1)挂起( Suspend)

:把一个进程从内存转到外存;可能有以下几种情况。


阻塞到阻塞挂起

:没有进程处于就绪状态或就绪进程要求更多内存资源时,会进行这种转换,以提交新进程或运行就绪进程。


就绪到就绪挂起

:当有高优先级阻塞(系统认为会很快就绪的)进程和低优先级就绪进程时,系统会选择挂起低优先级就绪进程。


运行到就绪挂起

:对抢先式分时系统,当有高优先级阻塞挂起进程因事件出现而进入就绪挂起时,系统可能会把运行进程转到就绪挂起状态。


2)激活( Activate):

把一个进程从外存转到内存;可能有以下几种情况。


就绪挂起到就绪

:就绪挂起进程优先级高于就绪进程或没有就绪进程时,会进行这种转换。


阻塞挂起到阻塞

:当一个进程释放足够内存时,系统会把一个高优先级阻塞挂起进程激活,系统认为会很快出现该进程所等待的事件。


3)事件出现( Event occurs)

:进程等待的事件出现;如操作完成、申请成功等;可能的情况如下。


阻塞到就绪

:针对内存进程的事件出现。


阻塞挂起到就绪挂起

:针对外存进程的事件出现。


4)提交( Admit)

:完成一个新进程的创建过程,新进程进入就绪状态或就绪挂起状态。进入就绪挂起的原因是系统希望保持一个大的就绪进程表(挂起和非挂起)。