1.并行与并发
1.并行(Parallelism)进程:有两个进程P、Q,他们在系统中的执行顺序为PQPPQP,PPPQQP,QPQQPP等多种可能,这就叫做并行进程。用P||Q表示P和Q为一组并行进程。
2.并发(Concurrency)进程:有两个进程P、Q,他们虽处在统一系统中,但他们可以同时执行,不分先后,这就叫做并发进程。也可以类似的看作两个路口的红绿灯系统,他们都属于交通系统,同一时间都在工作,但他们之间的运作不分先后,互不干扰。用P|||Q表示P和Q为一组并发进程。
2.交错的 T S TS TS(Interleaving of Transition Systems)
1. T S TS TS的定义 T S i = ( S i , A c t i , → i , I i , A P i , L i ) , i = 1 , 2 TS_{i}=(S_{i},Act_{i},\to_{i},I_{i},AP_{i},L_{i}),i=1,2 TSi=(Si,Acti,→i,Ii,APi,Li),i=1,2
2.
T
S
TS
TS并发的表达式:
T
S
1
TS_{1}
TS1|||
T
S
2
=
(
S
1
×
S
2
,
A
c
t
1
∪
A
c
t
2
,
→
,
I
1
×
I
2
,
A
P
1
∪
A
P
2
,
L
)
TS_{2}=(S_{1} \times S_{2},Act_{1} \cup Act_{2} ,\to,I_{1} \times I_{2},AP_{1} \cup AP_{2},L)
TS2=(S1×S2,Act1∪Act2,→,I1×I2,AP1∪AP2,L)
其中,转移关系
→
\to
→定义规则为:
S
1
→
1
α
S
1
′
⟨
S
1
,
S
2
⟩
→
α
⟨
S
1
′
,
S
2
⟩
\tfrac {S_{1} \overset{\alpha }{\rightarrow_{1}}{S_{1}'}} {\langle S_{1},S_{2} \rangle \overset{\alpha }{\rightarrow}\langle {S_{1}}',S_{2} \rangle }
⟨S1,S2⟩→α⟨S1′,S2⟩S1→1αS1′ 和
S
2
→
2
α
S
2
′
⟨
S
1
,
S
2
⟩
→
α
⟨
S
1
,
S
2
′
⟩
\tfrac {S_{2} \overset{\alpha }{\rightarrow_{2}}{S_{2}'}} {\langle S_{1},S_{2} \rangle \overset{\alpha }{\rightarrow}\langle S_{1},{S_{2}}' \rangle }
⟨S1,S2⟩→α⟨S1,S2′⟩S2→2αS2′
标签函数 L L L定义规则为: L ( ⟨ s 1 , s 2 ⟩ ) = L ( S 1 ) ∪ L ( S 2 ) L(\langle s_{1},s_{2} \rangle) = L(S_{1} )\cup L(S_{2}) L(⟨s1,s2⟩)=L(S1)∪L(S2)
3.范例:
- 活动
α
\alpha
α表示
x
:
=
x
+
1
x:=x+1
x:=x+1
活动 β \beta β表示 y : = y − 2 y:=y-2 y:=y−2
初始条件: x = 0 , y = 7 x=0,y=7 x=0,y=7
那么 α ∣ ∣ ∣ β \alpha ||| \beta α∣∣∣β的过程如图所示:
(右图表示从初始状态开始,每次任选一个活动执行,活动 α \alpha α和 β \beta β各执行一次) - 但如果两个活动共享一个变量,对同一个变量进行修改,则可能会导致错误情况,比如:
活动 α \alpha α表示 x : = 2 ⋅ x x:=2\cdot x x:=2⋅x
活动 β \beta β表示 x : = x + 1 x:=x+1 x:=x+1
初始条件: x = 3 x=3 x=3
那么 α ∣ ∣ ∣ β \alpha ||| \beta α∣∣∣β的过程如图所示:
(此时用TS建立的模型会导致最终共享变量的结果出现矛盾:在同一状态上的共享变量取值不同,且执行结果也不正确)
3.交错的 P G PG PG(Interleaving of Program Graphs)
1.定义: P G i = ( L o c i , A c t i , E f f e c t i , ↪ i , L o c 0 , i , g 0 , i ) , i = 1 , 2 PG_{i} = (Loc_{i}, Act_{i},Effect_{i}, \hookrightarrow_{i}, Loc_{0,i},g_{0,i}),i=1,2 PGi=(Loci,Acti,Effecti,↪i,Loc0,i,g0,i),i=1,2,是变量 V a r i Var_{i} Vari上的两个PG,则在 V a r 1 ∪ V a r 2 Var_{1} \cup Var_{2} Var1∪Var2上,有 P G 1 ∣ ∣ ∣ P G 2 = ( L o c 1 × L o c 2 , A c t 1 ⊎ A c t 2 , E f f e c t , ↪ , L o c 0 , 1 , L o c 0 , 2 , g 0 , 1 ∧ g 0 , 2 ) PG_{1}|||PG_{2}=(Loc_{1} \times Loc_{2},Act_{1} \uplus Act_{2},Effect, \hookrightarrow_, Loc_{0,1}, Loc_{0,2},g_{0,1} \wedge g_{0,2}) PG1∣∣∣PG2=(Loc1×Loc2,Act1⊎Act2,Effect,↪,Loc0,1,Loc0,2,g0,1∧g0,2)
-
转移关系 ↪ \hookrightarrow ↪定义规则为:
l 1 ↪ g : α 1 l 1 ′ ⟨ l 1 , l 2 ⟩ ↪ g : α ⟨ l 1 ′ , l 2 ⟩ \tfrac {l_{1} \xhookrightarrow[]{g : \alpha }_{1}{l_{1}'}} {\langle l_{1},l_{2} \rangle \xhookrightarrow[]{g : \alpha }\langle {l_{1}}',l_{2} \rangle } ⟨l1,l2⟩g:α ⟨l1′,l2⟩l1g:α 1l1′ 和 l 2 ↪ g : α 2 l 2 ′ ⟨ l 1 , l 2 ⟩ ↪ g : α ⟨ l 1 , l 2 ′ ⟩ \tfrac {l_{2} \xhookrightarrow[]{g : \alpha}_{2}{l_{2}'}} {\langle l_{1},l_{2} \rangle \xhookrightarrow[] {g : \alpha }\langle l_{1},{l_{2}}' \rangle } ⟨l1,l2⟩g:α ⟨l1,l2′⟩l2g:α 2l2′
\quad
表示满足哪个 P G PG PG转移的条件,就引出一条向那个位置转移的关系。 -
影响集合 E f f e c t Effect Effect定义规则为: E f f e c t ( α , η ) = E f f e c t i ( α , η ) i f α ∈ A c t i Effect(\alpha,\eta ) = Effect_{i}(\alpha,\eta ) \ \ if \ \alpha \in Act_{i} Effect(α,η)=Effecti(α,η) if α∈Acti
\quad
表示新的 E f f e c t Effect Effect表取自之前的两个 E f f e c t Effect Effect表,当前转移上执行的动作 α \alpha α是哪个PG的动作( A c t i Act_i Acti)中的,就使用相应的之前表( E f f e c t i Effect_i Effecti)中的动作 α \alpha α对赋值 η \eta η的变换即可。
2.范例1: x = x + 1 ∣ ∣ ∣ x : = 2 ⋅ x x=x+1|||x:=2\cdot x x=x+1∣∣∣x:=2⋅x
- PG建模
- 模型交错
- 将交错的PG模型转换为TS模型
此时,得到的是两进程正确进行交错的结果,最终变量的取值取决于两段临界区代码的执行次序。
3.带互斥信号量的程序建模
- 定义:有一个共享变量y,初始值为1;当y的值为1的时候,互斥信号量是自由的,可以占用和访问,当y的值为0的时候,互斥信号量是被锁死的,不可以占用和访问。
- 范例:
刚开始, P G 1 PG_1 PG1和 P G 2 PG_2 PG2均处于非临界区( n o n c r i t i noncrit_i noncriti),接着,会进入等待区;在等待区,会判断是否满足条件: y > 0 y>0 y>0,如果条件满足,那么会执行 y : = y − 1 y:=y-1 y:=y−1,对临界区进行加锁,表示临界区正在使用,其他PG不可进入临界区,然后该PG进入临界区,执行相应的操作;在临界区执行完操作后,执行 y : = y + 1 y:=y+1 y:=y+1,对临界区进行解锁,回到非临界区,其他PG可以进入临界区。
P G 1 ∣ ∣ ∣ P G 2 PG_1|||PG_2 PG1∣∣∣PG2的结果
将结果转换为TS模型
n 1 n_1 n1和 n 2 n_2 n2表示非临界区
w 1 w_1 w1和 w 2 w_2 w2表示等待区
c 1 c_1 c1和 c 2 c_2 c2表示临界区资源,他们不会同时出现在同一个结点上,因此避免了临界区资源的冲突问题。
4.彼得森进程互斥(Peterson’s Mutual exclusion)算法
- 共享变量: b 1 , b 2 , x , b_1,b_2,x, b1,b2,x,
- 初始条件:
b
1
=
b
2
=
f
a
l
s
e
b_1=b_2=false
b1=b2=false
进程 P 1 P_1 P1:
loop forever
... (*noncritical actions*)
<b1 := true; x := 2;>
wait until (x = 1 ∨ ¬b2)
do critical section od
b1 := false
... (*noncritical actions*)
end loop
进程 P 2 P_2 P2:
loop forever
... (*noncritical actions*)
<b2 := true; x := 1;>
wait until (x = 2 ∨¬ b1)
do critical section od
b2 := false
... (*noncritical actions*)
end loop
- 进程 P 1 P_1 P1和 P 2 P_2 P2的 P G PG PG图
-
T
S
(
P
G
1
∣
∣
∣
P
G
1
TS(PG_1|||PG_1
TS(PG1∣∣∣PG1)