一、程序的顺序执行和并发执行异同之处
1. 差异
顺序性
顺序执行要求一个程序开始执行必须要等到前一个程序已执行完成,具有顺序性;而并发执行若干个程序可以同时在系统中执行,时间上具有重叠性,因此不具有顺序性。
封闭性
顺序执行的程序一旦开始执行,它的计算结果不受外界因素影响,具有封闭性;而并发执行程序之间资源共享,因此不具有封闭性。
可再现性
顺序执行其程序的运行的结果与与时间无关,即给定相同的输入,一定会得到相同的输出,具有可再现性;而并发执行由于存在资源共享,失去结果可再现性。
2. 相同点
顺序执行与并发执行在单CPU环境下每个时刻都只能有一个程序被执行
二、Bernstein条件的解释
1. 解释
若两个程序p1、p2满足:
R
(
p
1
)
∩
W
(
p
2
)
∪
R
(
p
2
)
∩
W
(
p
1
)
∪
W
(
p
1
)
∩
W
(
p
2
)
=
Ø
R(p1)∩W(p2)∪R(p2)∩W(p1)∪W(p1)∩W(p2)=Ø
R(p1)∩W(p2)∪R(p2)∩W(p1)∪W(p1)∩W(p2)=Ø
且 R R R(read)代表读的集合、 W W W(write)代表写的集合,那么他们便能并发执行,且具有可再现性。
2. 举个“栗子”
问题描述
如下存在以下语句:
S1:a=5−x
S2:b=a∗x
S3:c=4∗x
S4:d=b+c
S5:e=d+3
根据以上语句画出前趋图并说明S2和S3是可以并发执行的,而S3和S4是不能并发执行的。
解决思路
(1)首先解释一下前驱图的定义:
- Precedence graph (前趋图): is a Directed Acyclic Graph(有向无环图, DAG).
- Node(结点):代表一个执行单元(如一条语句、一个程序段或进程)
- Edge(边, directed edge(有向边)):The precedence relation (前趋关系)“→”
→ = ( P i , P j ) →=(P_i,P_j) →=(Pi,Pj):表示 P i P_i Pi必须在 P j P_j Pj开始执行前执行完
(2) 据此描述画出前驱图:
(3) S2和S3是可以并发执行的
∵ R ( S 2 ) = a , x ; W ( S 2 ) = b ; R ( S 3 ) = x ; W ( S 3 ) = c \because R(S2)={a,x};W(S2)={b};R(S3)={x} ;W(S3)={c} ∵R(S2)=a,x;W(S2)=b;R(S3)=x;W(S3)=c
根据Berstein条件,存在:
R ( S 2 ) ∩ W ( S 3 ) ∪ R ( S 3 ) ∩ W ( S 2 ) ∪ W ( S 2 ) ∩ W ( S 3 ) = Ø R(S2)∩W(S3)∪R(S3)∩W(S2)∪W(S2)∩W(S3)=Ø R(S2)∩W(S3)∪R(S3)∩W(S2)∪W(S2)∩W(S3)=Ø
∴ \therefore ∴S2与S3可以并发执行
(4)S3和S4是不能并发执行的
∵ R ( S 3 ) = x ; W ( S 3 ) = c ; R ( S 4 ) = b , c ; W ( S 4 ) = e \because R(S3)={x} ;W(S3)={c};R(S4)={b,c} ;W(S4)={e} ∵R(S3)=x;W(S3)=c;R(S4)=b,c;W(S4)=e
根据Berstein条件,存在:
R ( S 3 ) ∩ W ( S 4 ) ∪ R ( S 4 ) ∩ W ( S 3 ) ∪ W ( S 3 ) ∩ W ( S 4 ) = c ≠ Ø R(S3)∩W(S4)∪R(S4)∩W(S3)∪W(S3)∩W(S4)={c}≠Ø R(S3)∩W(S4)∪R(S4)∩W(S3)∪W(S3)∩W(S4)=c=Ø
∴ \therefore ∴S3与S4不可以并发执行