2.1 进程的引入
2.1.1程序的顺序执行
1.程序的顺序执行
程序是人们要计算机完成特定功能的一些指令序列,是一个按严格次序、顺序执行的操作序列,是一个静态的概念。
如:有一个程序,要求先输入数据,再做相应的计算,最后输出结果并用打印机打印。分别用I、C、P代表以上3个程序段,这样,上述3个程序段的执行顺序为:
I→C→P。
2.程序顺序执行时的特征
(1)顺序性。
处理机的操作严格按照程序所规定的顺序执行,即只有前一个程序段完成才执行下一个程序段,上一条指令完成再去执行下一条指令。
(2)封闭性。
程序是在封闭环境下运行的。
程序运行时独占全机资源,资源的状态除初始状态外,只有该程序本身才能改变它。
程序执行的最终结果由给定的初始条件决定,不受外界因素的影响。
(3)可再现性。
顺序执行的最终结果可再现。
也就是说它与执行速度及执行的时刻无关,只要输入的初始条件相同,无论何时重复执行该程序,结果都是相同的。
2.1.2 程序的并发执行及其特征
1.并发执行的概念
所谓程序的并发性,是指多道程序在同一时间间隔内同时发生。
程序的并发执行可总结为:一组在逻辑上互相独立的程序或程序段在执行过程中,其执行时间在客观上互相重叠,即一个程序段的执行尚未结束,另一个程序段的执行已经开始的一种执行方式。
2.程序并发执行时的特征
(1)间断性
程序在并发执行时,由于它们共享系统资源,以及为完成同一项任务而相互合作,致使这些并发执行的程序之间,形成了相互制约的关系。相互制约将导致并发程序具有“执行——暂停——执行”这种间断性的活动规律。
(2)失去封闭性
程序在并发执行时,是多个程序共享系统中的各种资源,因而这些资源的状态将由多个运行的程序来改变,致使程序的运行失去了封闭性。例如,当处理机被某个程序占有时,另一程序必须等待。
(3)不可再现性
在并发环境下,同一个程序执行多次,执行的结果可能不同。
例如,有两个循环程序A和B,它们共享一个变量N,初值为0。
程序A(): 程序B():
{do {do
N=N+1; print(N);
While(1) While(1)
} }
程序A和程序B以不同的速度运行,出现的结果可能不同。例如,当程序A和程序B运行的速度相近时,打印的结果为1、2、3、…;而当程序A的执行速度是程序B的2倍时,打印的结果可能是2、4、6…。
小结:引入进程的意义
从上例来看,程序在并发执行时,由于失去了封闭性,其计算结果与并发程序的执行速度有关,从而使程序失去了可再现性,程序经过多次执行后,虽然执行时的环境和初始条件相同,但得到的结果却各不相同。
所以,从上面的讨论看,由于程序的顺序性、间断性和不可再现性,用程序作为描述其执行过程以及共享资源的基本单位是不合适的。
这就需要一个既能描述程序的执行过程,又能用来共享资源的基本单位,这个基本单位被称为进程。
2.1.3 进程的定义与特征
1.进程的定义
进程是操作系统中最基本、最重要的概念之一。人们对进程下过许多定义。现列举其中的几种:
(1)进程是程序的一次执行。
(2)进程是可以和别的进程并发执行的计算。
(3)进程就是一个程序在给定活动空间和初始条件下,在一个处理机上的执行过程。
(4)进程是程序在一个数据集合上的运行过程,它是系统进行资源分配和调度的一个独立单位。
(5)进程是动态的,有生命周期的活动。内核可以创建一个进程,最终将由内核终止该进程使其消亡。
综上观点定义为:“并发执行的程序在一个数据集合上的执行过程” 【运行着的程序】
补充:进程和程序之间的关系
进程和程序是两个完全不同的概念,但又有密切的联系。程序是规定的工作流程,进程则是实际的工作过程。
它们之间的主要区别是:
(1)程序是静态的概念,而进程则是程序的一次执行过程。它是动态的概念。
(2)进程是一个能独立运行的单位,能与其它进程并发执行;而程序是不能作为一个独立运行的单位而并发执行的。
(3)程序和进程无一一对应的关系。
(4)各个进程在并发执行过程中会产生相互制约关系,而程序本身是静态的,不存在这种异步特征。
2.进程的特征
从进程与程序的区别可以看出,进程具有如下特征:
(1)动态性
动态性是进程最基本的特性。进程由创建而产生,由调度而执行,因得不到资源而暂停执行,以及因撤消而消亡。
(2)并发性
这是指多个进程实体,同存于内存中,能在一段时间段内同时执行。并发性是进程的重要特征,同时也是操作系统的重要特征。提高并发性,可以提高系统的效率。
(3)独立性
进程是一个能独立运行的基本单位,同时也是系统中独立获得资源和独立调度的基本单位。
(4)异步性
这是指进程按各自独立的、不可预知的速度向前推进;或者说,进程按异步方式运行。
(5)结构特征
从结构上看,进程实体是由程序段、数据段及进程控制块三部分组成,也称这三部分为进程映像。
2.1.4 进程的基本状态及转换
进程的动态性由它的状态及状态转换来体现的。
1.进程的三个基本状态
进程通常至少有三种基本状态:
(1)就绪状态(ready)
进程运行所需的外部条件满足,但因为其它进程已占用CPU,所以暂时不能运行。
(2)执行状态(running)
外部条件满足,进程已获得CPU,其程序正在执行。在单处理机系统中,只有一个进程处于执行状态。
(3)阻塞状态(blocked)
进程因资源无法满足而等待资源,暂时不能运行的状态,称为阻塞状态,也称为等待状态。
系统中处于阻塞状态的进程可能有多个,通常将它们排成一个队列,也有的系统则根据阻塞原因的不同将这些进程排成多个队列。
2.进程状态的转换
(1)就绪 ----> 执行
对于处于就绪状态的进程,在调度程序为之分配了处理机之后,该进程便可执行。相应地,它由就绪状态转变为执行状态。
(2)执行 ----> 就绪
正在执行的进程(执行状态)也称为当前进程,如果因分配给它的时间片已用完而被暂停执行时,该进程便由执行状态又回到就绪状态;
(3)执行 ----> 阻塞
一个处在执行状态的进程,如果因等待资源而使进程的执行受阻,使之无法继续执行,该进程将由执行状态转变为阻塞状态。
(4)阻塞 ----> 就绪
一个处于阻塞状态的进程,当它所需的外部事件满足,它应由阻塞状态变为就绪状态。
补充:引入挂起状态时的进程状态------挂起 、激活
除了上述3种基本状态以外,很多系统中又引入了挂起状态。
所谓挂起状态,实际上就是一种静止的状态。一个进程被挂起后,不管它是否在就绪状态,系统都不分配给它处理机。
处于挂起状态的进程要想重新进入到活动状态,必须被激活(即转换为活动状态),然后才有可能执行。
因此在引入挂起状态后,进程之间的状态转换除了四种基本状态转换以外,又增加了以下几种:
(1)活动就绪—挂起—静止就绪。
(2)活动阻塞—挂起—静止阻塞。
(3)静止就绪—激活—活动就绪。
(4)静止阻塞—激活—活动阻塞。