本文已参与「新人创作礼」活动,一起开启掘金创作之路。
概念
- 握手是在TS上面直接进行的一种操作,在讲述握手之前,先来回顾两个以前学的定义:
- 交错(Interleaving):指多个活动完全自主进行,异步访问共享变量。活动之间没有任何相互影响的操作,比如两个路口的红绿灯,各自运行,互不干涉。
- 共享变量(Shared-variable):共享变量是一个多个活动都可以访问的变量,可以用于活动之间的通信(也叫消息传递),比如活动A对共享变量赋值,活动B检测共享变量的值进行响应的操作。
- 握手(handshaking):一种同步操作,参与者双方同时访问共享变量进行数据交换。
- 握手交换的信息:在握手中交换的信息可以是整形,也可以是复杂的数据类型。
- 消息传递的发生条件: 只有当两个参与进程都准备执行相同的握手动作时,消息传递才能发生。
定义
- 握手动作来源:对于两个进程P1,P2来说,有三种变量
- P1独有的动作
- P2独有的动作
- P1,P2共享的动作,这个动作称为握手
- 握手动作定义:指进程共有的动作,用符号H表示,类似于TS,PG的动作Act
- 对于以前学习的TS的定义:
TSi=(Si,Acti,→i,Ii,APi,Li),i=1,2
其中:TSs,H⊆Act1∩Act2 with τ∈/H
- 对TS1∣∣HTS2的定义:
TS1 ∣∣H TS2=(S1×S2,Act1∪Act2,→,I1×I2,AP1∪AP2,L)
其中:
- L的定义: L(S1,S2)=L(S1)∪L(S2)
- →的定义:
- 在交错(Interleaving)动作中,即α∈/H的情况下,多个状态S分别进行变化,变化过程如下:
⟨S1,S2⟩→α⟨S1′,S2⟩S1→α1S1′⟨S1,S2⟩→α⟨S1,S2′⟩S2→α2S2′
- 在握手动作下,即$\alpha \in H$的情况下,多个状态$S$同步进行变化,变化过程如下:
⟨S1,S2⟩→α⟨S1′,S2′⟩S1→α1S1′∧S2→α2S2′
- 当动作H为Act1和Act2所共有的动作(H=Act1∩Act2)时,TS1∣∣TS2=TS1∣∣H TS2
握手的三条性质
- 无共享动作时:这个时候,TS1和TS2的握手和交错一样,可直接转换为交错(Interleaving)动作的公式TS1 ∣∣∣ TS2表示,具体等式如下:
TS1 ∣∣∅ TS2=TS1 ∣∣∣ TS2
- 交换律:两个TS握手时,可以进行如下交换
TS1 ∣∣H TS2=TS1 ∣∣H TS2
- 结合律:对于多个进行握手的TS,如果H⊆Act1∩...∩Actn
那么TS=TS1 ∣∣H TS2 ∣∣H ... ∣∣H TSn
对于一组进程,虽然可以多个进程一起握手,但我们通常只让进程两两握手
多个进程同时通信:TS1∣∣TS2∣∣...∣∣TSn
- TSi和TSj(0<i=j≤n)同步进行
- Hi,j=Acti∩Actj
- 当k∈/i,j且τ∈/Hi,j时,Hi,j∩Actk=∅
- 对于TS独有的动作执行时,即for α∈Acti∖(⋃0<i=j≤n),状态发生的变化:

- 对于两个TS共享的动作执行时,即for α∈Hi,j and 0<i<j≤n),状态发生的变化:

- 范例
- 例题一: 通过握手相互排斥
- 有两个进程T1和T2,他们重复执行request和release,位置也由由临界区(crit)和非临界区(noncrit)不断替换,当我们将这两个进程进行交错(Interleaving)动作T1∣∣∣T2后,我们可以得到下图
但我们发现,T1,T2有可能同时占用临界资源(处于crit1,crit2结点)。
为避免他们同时进入临界资源,我们增加一个仲裁器来避免这种情况的发生。仲裁器的执行流程如下图所示:
下面,请画出引入了仲裁器的交错图,即TSArb=(TS1∣∣∣TS2)∣∣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)
- 作用: 可以将一条或多条信息暂时存放在通道内,类似于缓存的功能。每个通道为握手的参与者们所独有,只能用于参与者之间交换信息,参与者们不可使用与其无关的通道。
- 动作集合Comm=c!v,c?x∣c∈Chan,v∈dom(c),x∈Var,dom(x)⊇dom(c) ,其中,Chan是有限的通道集合,dom(c)表示c通道所能接受的类型,dom(x)表示x通道所能接受的类型,dom(x)⊇dom(c)表示x所能接受的数据类型包含c所能接受的数据类型
- 通道容量:通道有一个有限或无限的容量,表示为cap(c)∈2IN∪{∞},有三种可能:
- cap(c)=∞,表示通道容量无限大
- cap(c)=0,表示通道容量为零,此时退化为同步数据通信方式——握手
- cap(c)>0,表示有限个通道容量, 此时同一消息的发送和读取发生在不同的时刻,称为异步消息传递。
- 通道系统的组成:一个通道系统由多个PG组成
CS=[PG1∣PG2∣...∣PGn]
- 通道系统的转变:
- 条件转变:lg:αl′
- 具有通信动作的条件转变:
- 将一条消息v通过通道c发送出去:lg:c!vl′
- 从通道c中取出要给消息v放入变量x中:lg:c?xl′
- 在发送和接受消息前,要进行判断
- 只有当通道没有满的时候,才会发送消息
- 只有当通道不为空的时候,才会发送消息
- 范例:交替位协议
-
在不可信通道unreliable channel c上,sender发送<m0,0>,<m1,0>,<m2,0>,...给receiver,其中m0,m1,m2...表示信息,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),则重新发送该消息。