在单道程序设计操作系统中,程序的执行方式是顺序执行,即必须在一个程序执行完后,才允许另一个程序执行;在多道程序环境下,则允许多个程序并发执行。程序的这两种执行方式间有着显著的不同。也正是由于程序的并发执行才在操作系统中引入了进程的概念。下面,将简单介绍程序的顺序执行和并发执行方式。
3
.1.1 程序的顺序执行及特征
1.程序的顺序执行
程序是实现算法的操作(指令)序列,程序执行的顺序性是指其在处理器上的执行严格有序,即只有在前一个操作结束后,才能开始后续操作,这称为程序内部的顺序性;如果完成一个任务需要若干不同程序,则这些程序也按照调用次序严格有序执行,这称为程序外部的顺序性。例如,在进行计算时,总需要先输入用户的程序和数据,然后进行计算,最后才能打印计算结果。用结点代表各程序段的操作(用圆圈表示),I代表输入操作,C代表计算操作,P为打印操作,用箭头指示操作的先后次序。这样,上述三个程序段的执行顺序如图3-1a所示。对一个程序段中的多条语句来说,也有一个执行顺序问题,例如对于下述三条语句的程序段:
S1:a=x+y;
S2:b=a+3;
S3:c=b+4;
其中,语句S2必须在语句S1之后才能执行(即a被赋值);同样,语句S3也只能在b被赋值后才能执行。因此,这三条语句应按照图3-1b所示的顺序执行。

图3 1 程序的顺序执行
2.程序顺序执行时的特征
(1)顺序性。处理机的操作严格按照程序所规定的顺序执行,即每一操作必须在上一个操作结束之后开始。
(2)封闭性。运行程序独占全机资源,资源的状态只能由此程序本身决定和改变,不受外界因素影响。
(3)结果的确定性。程序在执行过程中允许出现中断,但这种中断不会对程序的最终结果产生影响,也就是说程序的执行结果与它的执行速度无关。
(4)可再现性。只要程序执行时的环境和初始条件相同,当程序重复执行时,不论它是从头到尾不停顿地执行,还是“停停走走”地执行,都将获得相同的结果。程序顺序执行时的特性,为程序员检测和校正程序的错误带来了很大的方便。
3.1.2 程序的并发执行及特征
1.程序的并发执行
在图3-1中的输入程序、计算程序和打印程序三者之间,存在I i→C i→P i这样的前趋关系,以至对一个作业的输入、计算和打印三个操作,必须顺序执行,但并不存在P i→I i+1的关系,因而在对一批程序进行处理时,可使它们并发执行。例如,输入程序在输入第一个程序后,在计算程序对该程序进行计算的同时,可由输入程序再输入第二个程序,从而使第一个程序的计算操作可与第二个程序的输入操作并发执行。一般地,输入程序在输入第i+1个程序时,计算程序可能正在对第i个程序进行计算,而打印程序正在打印第i-1个程序的计算结果。图3-2示出了输入、计算和打印这三个程序对一批作业进行处理的情况。

图3-2 并发执行时的前趋图
在该例中存在下述前趋关系:I i→C i,I i→I i+1,C i→P i,C i→C i+1,P i→P i+1,而I i+1和C i及P i-1是重叠的,亦即在P i-1和C i以及I i+1之间,可以并发执行。对于具有下述四条语句的程序段:
S1:a=x+2
S2:b=y+4
S3:c=z+2
S4:d=a+b+c
S5:e=d+a
可画出图3-3所示的前趋关系。可以看出:S4必须在a,b和c被赋值后方能执行;S5必须在S4之后执行;但S1,S2和S3则可以并发执行,因为它们彼此互不依赖。
2.程序并发执行时的特征
程序的并发执行,虽然提高了系统吞吐量,但也产生了与程序顺序执行时不同的特征。(https://www.xing528.com)
(1)间断性。程序在并发执行时,共享CPU资源,由于操作系统的异步性使得并发程序具有“执行—暂停—执行”这种间断性的活动规律。
(2)失去封闭性。程序在并发执行时,是多个程序共享系统中的各种资源,因而这些资源的状态将由多个程序来改变,致使程序的运行失去封闭性。这样,某程序在执行时,必然会受到其他程序的影响。
(3)不可再现性。程序在并发执行时,由于失去了封闭性,也将导致其再失去可再现性。例如,有两个循环进程A和B,它们共享一个变量M。进程A和B以不同的速度运行。这样,可能出现很多不同的情况(假定某时刻变量M的值为5)。比如:
A B
L1:M=M+1; cout<<M;
Goto L1 M=0;
①先执行M=M+1,然后cout,M的值为6。
②执行M=M+1两次,然后切换到B,打印的M值为7。
这种情况说明,程序在并发执行时,由于失去了封闭性,其计算结果已与并发程序的执行速度有关,从而使程序的执行失去了可再现性,亦即程序经过多次执行后,虽然它们执行时的环境和初始条件相同,但得到的结果却各不相同。

图3-3 五条语句的前趋关系
3.1.3 进程的定义及描述
1.进程的定义
在多道程序环境下,程序的执行属于并发执行,此时它们将失去其封闭性,并具有间断性及不可再现性的特征,因此,人们引入了“进程”的概念。进程是操作系统中最基本、最重要的概念,它是为了刻画系统内部的动态状况,描述运行程序的活动规律而引进的新概念。曾有许多人从不同的角度对进程下过定义,其中较典型的进程定义有:
(1)进程是程序的一次执行。
(2)进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
(3)进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
在引入了进程实体的概念后,可以把传统OS中的进程定义为:“进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。”进程具有以下属性:
(1)结构特征。进程包含数据集合和运行于其上的程序,它至少由程序块、数据块和进程控制块等要素组成。
(2)动态性。进程是程序在数据集合上的一次执行过程,是动态的概念。同时,进程有生命周期,由创建而产生,由调度而执行,由事件而等待,由撤销而消亡,而程序则只是一组有序指令的集合,并存放于某种介质上,其本身并不具有运动的含义,因而是静态的。
(3)并发性。这是指多个进程实体同存于内存中,且能在一段时间内同时运行。并发性是进程的重要特征,同时也成为OS的重要特征。引入进程的目的也是使其进程实体能和其他进程实体并发执行;而程序(没有建立PCB)是不能并发执行的。
(4)独立性。在传统的OS中,独立性是指进程实体是一个能独立运行、独立分配资源和独立接受调度的基本单位。凡未建立PCB的程序都不能作为一个独立的单位参与运行。
(5)异步性。异步性也称随机性,是指进程按各自独立的不可预知的速度向前推进,或说进程实体按异步方式运行。
2.进程的描述——进程映像
进程的活动包括占有处理器执行程序以及对相关的数据进行操作,因而程序和数据是进程必需的组成部分,两者刻画进程的静态特征。还需要数据结构来刻画进程的动态特征,描述进程状态、占用资源状况、调度信息等,通常使用一种称为进程控制块的数据结构。由于进程的状态在不断发生变化,某时刻进程的内容及其状态集合称为进程映像,包括以下要素。
(1)进程控制块。每个进程捆绑一个控制块,用来存储进程的标志信息、现场信息和控制信息。进程创建时建立进程控制块,进程撤销时收回进程控制块,它与进程一一对应。
(2)进程程序块。进程程序块是被执行的程序,规定进程的一次运行所应完成的功能。每个进程有且仅有一个进程控制块,或称进程描述符,它是进程存在的唯一标识,是操作系统用来记录和刻画进程状态及有关信息的数据结构,也是操作系统掌握进程的唯一资料结构和管理进程的主要依据。
(3)进程核心栈。每个进程捆绑一个核心栈,进程在核心态工作时使用,用来保护中断/异常现场,保存函数调用的参数和返回地址等。
(4)进程数据块。进程数据块是进程的私有地址空间,存放各种私有数据,用户栈也要在数据块中开辟,用于在函数调用时存放栈帧,局部变量等参数。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。
