目录
1.前趋图和程序执行
(1)前趋图
前趋图(Precedence Graph) 是一个有向无循环图,可记为DAG,用于描述程序/进程之间执行的先后顺序。
图中每个结点可用来表示一个进程或程序段,结点间的有向边表示两个结点之间存在的偏序或前趋关系。如P1与 P2存在前趋关系,记作P1 -> P2,表示在P2开始执行之前P1必须完成,此时称P1是P2的直接前趋,P2是P1的直接后继。没有前趋的结点称为初始结点,没有后继的结点称为终止结点,每个结点还有一个重量,用于表示该结点所含有的程序量或程序的执行时间。
(2)程序的顺序执行
在计算机系统中只有一个程序在运行,这个程序独占系统中所有资源,其执行不受外界影响。 一道程序执行完后另一道才能开始。
程序顺序执行的特点
- 顺序性:一个程序开始执行必须要等到前 一个程序已执行完成。
- 封闭性:程序一旦开始执行,其计算结果不受外界因素影响。
- 可再现性:程序的结果与它的执行速度无关(即与时间无关),只要给定相同的输入,一定会得到相同的结果。
(3)程序的并发执行
若干个程序同时在系统中执行,这些程序的执行在时间上是重叠的,一个程序的执行尚未结束,另一个程序的执行已经开始。
只有在不存在前趋关系的程序之间才有可能并发执行,否则无法并发执行。
程序并发执行的特点
- 间断性:在并发执行时由于共享系统资源以及相互合作,可能会导致程序在执行过程中互相制约,造成程序间断性的活动规律。
- 失去程序的封闭性: 程序在并发执行时,是多个程序共享系统中的资源,因此这些资源的状态将由多个程序来改变。
- 不可再现性:如循环程序A、B,共享变量N。 程序A执行N:=N+1;程序B执行Print(N),后将N置0。 两个程序以不同速度运行,可能出现三种情况:
N:=N+1在Print(N)和N=0之前,此时N值分为N+1,N+1, 0
N:=N+1在Print(N)和N=0之后,此时N值分为N, 0, 1
N:=N+1在Print(N)和N=0之间,此时N值分为N, N+1, 0
程序在并发执行时,由于失去了封闭性,其计算结果必将与并发程序的执行速度有关,从而使程序的执行失去了可再现性。程序经过多次执行后,虽然它们执行时的环境和初始条件相同,但等到的结果却各不相同。