【系统分析与验证笔记】PG、TS各自的交错(Interleaving)

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,Act1Act2,,I1×I2,AP1AP2,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,S2S11α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,S2S22α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:=y2
    初始条件: 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:=2x
    活动 β \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} Var1Var2上,有 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}) PG1PG2=(Loc1×Loc2,Act1Act2,Effect,,Loc0,1,Loc0,2,g0,1g0,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,l2g:α l1,l2l1g:α 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,l2g:α l1,l2l2g:α 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+1x:=2x

  • 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:=y1,对临界区进行加锁,表示临界区正在使用,其他PG不可进入临界区,然后该PG进入临界区,执行相应的操作;在临界区执行完操作后,执行 y : = y + 1 y:=y+1 y:=y+1,对临界区进行解锁,回到非临界区,其他PG可以进入临界区。
    图片来自https://blog.csdn.net/SHU15121856/article/details/102635137
    P G 1 ∣ ∣ ∣ P G 2 PG_1|||PG_2 PG1PG2的结果
    在这里插入图片描述
    将结果转换为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 TSPG1PG1
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

print_Hyon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值