【系统分析与验证笔记】握手(handshaking)

概念

  • 握手是在TS上面直接进行的一种操作,在讲述握手之前,先来回顾两个以前学的定义:
    • 交错(Interleaving):指多个活动完全自主进行,异步访问共享变量。活动之间没有任何相互影响的操作,比如两个路口的红绿灯,各自运行,互不干涉。
    • 共享变量(Shared-variable):共享变量是一个多个活动都可以访问的变量,可以用于活动之间的通信(也叫消息传递),比如活动A对共享变量赋值,活动B检测共享变量的值进行响应的操作。
  • 握手(handshaking):一种同步操作,参与者双方同时访问共享变量进行数据交换。
    • 握手交换的信息:在握手中交换的信息可以是整形,也可以是复杂的数据类型。
  • 消息传递的发生条件: 只有当两个参与进程都准备执行相同的握手动作时,消息传递才能发生。

定义

  • 握手动作来源:对于两个进程 P 1 , P 2 P_1,P_2 P1,P2来说,有三种变量
    1. P 1 P_1 P1独有的动作
    2. P 2 P_2 P2独有的动作
    3. P 1 , P 2 P_1,P_2 P1,P2共享的动作,这个动作称为握手
  • 握手动作定义:指进程共有的动作,用符号 H H H表示,类似于 T S , P G TS,PG TS,PG的动作 A c t Act Act
  • 对于以前学习的 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
    其中: T S s , H ⊆ A c t 1 ∩ A c t 2   w i t h   τ ∉ H TS_s,H \subseteq Act_1 \cap Act_2 \ with \ \tau \notin H TSs,HAct1Act2 with τ/H
  • T S 1 ∣ ∣ H T S 2 TS_1 ||_H TS_2 TS1HTS2的定义:
    T S 1   ∣ ∣ H   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_1 \ ||_H \ TS_2 = (S_1 \times S_2,Act_1 \cup Act_2,\to,I_1\times I_2,AP_1 \cup AP_2,L) TS1 H TS2=(S1×S2,Act1Act2,,I1×I2,AP1AP2,L)
    其中:
    • L L L的定义: L ( S 1 , S 2 ) = L ( S 1 ) ∪ L ( S 2 ) L(S_1,S_2)=L(S_1) \cup L(S_2) L(S1,S2)=L(S1)L(S2)
    • → \to 的定义:
      • 在交错(Interleaving)动作中,即 α ∉ H \alpha \notin H α/H的情况下,多个状态 S S S分别进行变化,变化过程如下:

        S 1 → α 1 S 1 ′ ⟨ S 1 , S 2 ⟩ → α ⟨ S 1 ′ , S 2 ⟩ S 2 → α 2 S 2 ′ ⟨ 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 } \quad\quad \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,S2S1α1S1S1,S2αS1,S2S2α2S2
      • 在握手动作下,即 α ∈ H \alpha \in H αH的情况下,多个状态 S S S同步进行变化,变化过程如下:

        S 1 → α 1 S 1 ′ ∧ S 2 → α 2 S 2 ′ ⟨ S 1 , S 2 ⟩ → α ⟨ S 1 ′ , S 2 ′ ⟩ \tfrac{ S_1 \overset{\alpha }{\rightarrow}_1 {S_1}' \wedge 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,S2S1α1S1S2α2S2
  • 当动作 H H H A c t 1 Act_1 Act1 A c t 2 Act_2 Act2所共有的动作( H = A c t 1 ∩ A c t 2 H = Act_1 \cap Act_2 H=Act1Act2)时, T S 1 ∣ ∣ T S 2 = T S 1 ∣ ∣ H   T S 2 TS_1 || TS_2 =TS_1 ||_H \ TS_2 TS1TS2=TS1H TS2

握手的三条性质

  • 无共享动作时:这个时候, T S 1 TS_1 TS1 T S 2 TS_2 TS2的握手和交错一样,可直接转换为交错(Interleaving)动作的公式 T S 1   ∣ ∣ ∣   T S 2 TS_1 \ ||| \ TS_2 TS1  TS2表示,具体等式如下:
    T S 1   ∣ ∣ ∅   T S 2 = T S 1   ∣ ∣ ∣   T S 2 TS_1 \ ||_\varnothing \ TS_2 = TS_1 \ ||| \ TS_2 TS1  TS2=TS1  TS2
  • 交换律:两个 T S TS TS握手时,可以进行如下交换
    T S 1   ∣ ∣ H   T S 2 = T S 1   ∣ ∣ H   T S 2 TS_1 \ ||_H \ TS_2 = TS_1 \ ||_H \ TS_2 TS1 H TS2=TS1 H TS2
  • 结合律:对于多个进行握手的 T S TS TS,如果 H ⊆ A c t 1 ∩ . . . ∩ A c t n H \subseteq Act_1 \cap ... \cap Act_n HAct1...Actn
    那么 T S = T S 1   ∣ ∣ H   T S 2   ∣ ∣ H   . . .   ∣ ∣ H   T S n TS =TS_1 \ ||_H \ TS_2 \ ||_H \ ... \ ||_H \ TS_n TS=TS1 H TS2 H ... H TSn

对于一组进程,虽然可以多个进程一起握手,但我们通常只让进程两两握手

多个进程同时通信: T S 1 ∣ ∣ T S 2 ∣ ∣ . . . ∣ ∣ T S n TS_1||TS_2||...||TS_n TS1TS2...TSn

  • T S i TS_i TSi T S j ( 0 < i ≠ j ≤ n ) TS_j(0<i \neq j \leq n) TSj0<i=jn同步进行

  • H i , j = A c t i ∩ A c t j H_{i,j}=Act_i \cap Act_j Hi,j=ActiActj

  • k ∉ i , j k \notin {i,j} k/i,j τ ∉ H i , j \tau \notin H_{i,j} τ/Hi,j时, H i , j ∩ A c t k = ∅ H_i,j \cap Act_k = \varnothing Hi,jActk=

  • 对于 T S TS TS独有的动作执行时,即 f o r   α ∈ A c t i ∖ ( ⋃ 0 < i ≠ j ≤ n ) for \ \alpha \in Act_i \setminus (\bigcup_{0<i \neq j \leq n}) for αActi(0<i=jn),状态发生的变化:
    S i → α i S i ′ ⟨ S 1 , S 2 . . . S i . . . S j . . . S n ⟩ → α ⟨ S 1 , S 2 . . . S i ′ . . . S j . . . S n ⟩ \tfrac{ S_i \overset{\alpha}{\rightarrow}_i {S_i}' }{ \left \langle S_1,S_2...S_i...S_j...S_n \right \rangle \overset{\alpha}{\rightarrow} \left \langle S_1,S_2...{S_i}'...S_j...S_n \right \rangle } S1,S2...Si...Sj...SnαS1,S2...Si...Sj...SnSiαiSi

  • 对于两个 T S TS TS共享的动作执行时,即 f o r   α ∈ H i , j   a n d   0 < i < j ≤ n ) for \ \alpha \in H_{i,j} \ and \ 0<i < j \leq n) for αHi,j and 0<i<jn),状态发生的变化:
    S i → α i S i ′   ∧   S j → α j S j ′ ⟨ S 1 , S 2 . . . S i . . . S j . . . S n ⟩ → α ⟨ S 1 , S 2 . . . S i ′ . . . S j ′ . . . S n ⟩ \tfrac{ S_i \overset{\alpha}{\rightarrow}_i {S_i}' \ \wedge \ S_j \overset{\alpha}{\rightarrow}_j {S_j}' }{ \left \langle S_1,S_2...S_i...S_j...S_n \right \rangle \overset{\alpha}{\rightarrow} \left \langle S_1,S_2...{S_i}'...{S_j}'...S_n \right \rangle } S1,S2...Si...Sj...SnαS1,S2...Si...Sj...SnSiαiSi  SjαjSj

  • 范例

    • 例题一: 通过握手相互排斥
      • 有两个进程 T 1 T_1 T1 T 2 T_2 T2,他们重复执行 r e q u e s t request request r e l e a s e release release,位置也由由临界区(crit)和非临界区(noncrit)不断替换,当我们将这两个进程进行交错(Interleaving)动作 T 1 ∣ ∣ ∣ T 2 T_1|||T_2 T1T2后,我们可以得到下图
        在这里插入图片描述
        但我们发现, T 1 , T 2 T_1,T_2 T1,T2有可能同时占用临界资源(处于 c r i t 1 , c r i t 2 crit_1,crit_2 crit1,crit2结点)。
        为避免他们同时进入临界资源,我们增加一个仲裁器来避免这种情况的发生。仲裁器的执行流程如下图所示:
        在这里插入图片描述
        下面,请画出引入了仲裁器的交错图,即 T S A r b = ( T S 1 ∣ ∣ ∣ T S 2 ) ∣ ∣ A r b i t e r TS_{Arb} = (TS_1 ||| TS_2 ) || Arbiter TSArb=(TS1TS2)Arbiter
        • 答案:
          在这里插入图片描述
    • 例题二:登记系统
      • 三个进程:
        BCR:条码读取进程,当BCR=0时表示等待读取条形码,当BCR=1表示正在读取条形码
        BP:登记进程,当BP=0时表示等待登记,当BP=1表示正在登记
        Printer:打印登记结果进程,当Printer=0时表示等待打印,当Printer=1表示正在打印
      • 四个动作:
        store:进入准备扫码状态
        scan:进入扫描条形码状态
        prt_cmd:进入准备打印状态
        print:执行完成打印状态在这里插入图片描述

    画出这三个进程握手以后并发的模型,即 BCR || BP || Printer

    • 答案:在这里插入图片描述
    • 解析:
      • 模型中结点的三个数字依次表示BCR、BP、Printer在结点时的取值。例如:000表示初始状态,三个进程都处在等待状态;101表示读取条码和打印进程在同时进行,登记进程处于等待状态。
      • store和prt_cmd为握手动作。

通道系统(Channel System,简称CS)

  • 作用: 可以将一条或多条信息暂时存放在通道内,类似于缓存的功能。每个通道为握手的参与者们所独有,只能用于参与者之间交换信息,参与者们不可使用与其无关的通道。
  • 动作集合 C o m m = c ! v , c ? x ∣ c ∈ C h a n , v ∈ d o m ( c ) , x ∈ V a r , d o m ( x ) ⊇ d o m ( c ) Comm={c!v,c?x|c\in Chan,v\in dom(c),x\in Var,dom(x) \supseteq dom(c) } Comm=c!v,c?xcChan,vdom(c),xVar,dom(x)dom(c) ,其中, C h a n Chan Chan是有限的通道集合, d o m ( c ) dom(c) dom(c)表示c通道所能接受的类型, d o m ( x ) dom(x) dom(x)表示x通道所能接受的类型, d o m ( x ) ⊇ d o m ( c ) dom(x) \supseteq dom(c) dom(x)dom(c)表示x所能接受的数据类型包含c所能接受的数据类型
  • 通道容量:通道有一个有限或无限的容量,表示为 c a p ( c ) ∈ 2 I N ∪ { ∞ } cap(c) \in 2^{IN} \cup \{ \infty \} cap(c)2IN{},有三种可能:
    • c a p ( c ) = ∞ cap(c)=\infty cap(c)=,表示通道容量无限大
    • c a p ( c ) = 0 cap(c)=0 cap(c)=0,表示通道容量为零,此时退化为同步数据通信方式——握手
    • c a p ( c ) > 0 cap(c)>0 cap(c)>0,表示有限个通道容量, 此时同一消息的发送和读取发生在不同的时刻,称为异步消息传递。
  • 通道系统的组成:一个通道系统由多个PG组成
    C S = [ P G 1 ∣ P G 2 ∣ . . . ∣ P G n ] CS=[PG_1|PG_2|...|PG_n] CS=[PG1PG2...PGn]
  • 通道系统的转变:
    • 条件转变: l ↪ g : α l ′ l \xhookrightarrow[]{g : \alpha } {l}' lg:α l
    • 具有通信动作的条件转变:
      • 将一条消息v通过通道c发送出去: l ↪ g : c ! v l ′ l \xhookrightarrow[]{g : c!v } {l}' lg:c!v l
      • 从通道c中取出要给消息v放入变量x中: l ↪ g : c ? x l ′ l \xhookrightarrow[]{g : c?x } {l}' lg:c?x l
  • 在发送和接受消息前,要进行判断
    • 只有当通道没有满的时候,才会发送消息
    • 只有当通道不为空的时候,才会发送消息
  • 范例:交替位协议
    在这里插入图片描述
    • 在不可信通道unreliable channel c上,sender发送 < m 0 , 0 > , < m 1 , 0 > , < m 2 , 0 > , . . . <m_0,0>,<m_1,0>,<m_2,0>,... <m0,0>,<m1,0>,<m2,0>,...给receiver,其中 m 0 , m 1 , m 2 . . . m_0,m_1,m_2... m0,m1,m2...表示信息, b 0 , b 1 , b 0 . . . b_0,b_1,b_0... b0,b1,b0...表示控制位
    • 在可信通道channel d上,receiver发送返回确认消息给sender
    • timer为计时器,消息发送后,开始计时,如果时间过去后未收到返回确认消息,则重新发送消息
    • 请画出该协议的sender和receiver的PG通信图。
    • 答案
      • 协议sender的PG图:
        在这里插入图片描述
      • 协议receiver的PG图:
        在这里插入图片描述
    • 解析:
      • Chan={ c, d, tmr_on, tmr_off , timeout }
      • Var = { x, y,mi }
      • Alternating Bit Protocol = [S | Timer | R ]
      • tmr_on表示打开计时器,进行等待。对于sender来说,若收到了返回的确认消息,则关闭计时器(tmr_off),若等待超时(timeout),则重新发送该消息。
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

print_Hyon

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

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

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

打赏作者

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

抵扣说明:

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

余额充值