自动模型检测-Promela语言建模示例

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 最终进入Eventual Entry: a process that is attempting to enter its critical section will eventually succeed.
• 活性:
弱公平性: 强公平性:
进程公平性:
3.2.X 一个简单的AB协议
Spin is the checker for Promela models Assertions to test correctness of model: assert(some boolean condition); If condition not TRUE then assertion violated.
40
ei=(ei+1)%MAX;
41
if
43
::out!ack(s,0)
44
::out!err(0,0)
45
::skip
46
fi
48
::(s!=es)->
49
if
50
::out!nak(s,0)
51
::out!err(0,0)
52
::skip
53
fi
54
fi
56 ::in?err(0,0)->
57
out!nak(s,0)
$ spin ex01.txt B:s=0
timeout #processes: 2
s=0 5: proc 1 (A) line 2 "ex01.txt" (state 1) 5: proc 0 (:init:) line 4 "ex01.txt" (state 3) <valid end state> 3 processes created
Temporal claims
We got here again without making any progress! The support for temporal claims takes the form of: Endstate labels - for determining valid endstates Progress labels - claim no non-progress cycles Never claims - impossible temporal assertions
$ spin ex01.txt B:s=0
A:s=1 3 processes create
检验(系统的不变性)结果:
上面,我们列举了这个并发程序的三个执行轨迹,并说明还有其它的许多执行轨迹,并说明,不管什么 轨迹,全局状态不会出现0,1,2外的值;我们来证明这一点; 在模型检查中,由于系统是有穷的,可以 用穷举搜索的方法进行。 首先,定义有关的性质:为说明全局状态不会出现0,1,2外的值,我们定义: #define p1 s<0 #define p2 s>2 存在一个轨迹,使全局状态出现0,1,2外的值可用LTL公式: <> (p1 \/ p2) 描述,因此,我们要检验,系统满足:! <> (p1 \/ p2),或者,[ ] ( ! p1 /\ ! p2 )
#define MAX 10 mtype = { ack, nak, err, next, accept } proctype transfer( chan in, out, chin, chout) { byte o,i; in?next(o); do
:: chin?nak(i) -> out!accept(i); chout!ack(o) :: chin?ack(i) -> out!accept(i); in?next(o); chout!ack(o) :: chin?err(i) -> chout!nak(o) od }
15
::in?err(0,0)->goto again
16
::in?nak(r,0)->goto again
17
::in?ack(r,0)->
18
if
19
::(r==s)->
20
goto progress
21
::(r!=s)->goto again
22
fi
23 fi;
24 progress: s=1-s /*toggle seqno*/
发送端和接收端只会在某些无效的状态中循环,使用progress标记可以在检测过程中检测出没有任何意
义的不可推进的循环。以下为AB协议的Promela描述我们将其保存为abp文件:
1 #define MAX 2
2 mtype={mesg,ack,nak,err};
3 proctype sender(chan in,out){ /*r_s,s_r*/
分别用进程sender 和receiver来对AB协议的发送端和接收端进行建模;通过进程sender的发送语
句”out!msg(o,s)”,”out!err(0,0)”和”skip”来分别模拟通道(接收端到发送端)对所传送消息的正确传送、
改变和丢失三种可能;通过进程receiver的发送语句”out!ack(s,o)”,”out!err(0,0)”和”skip”来分别模拟通道
25 od
}
proctype receiver(chan in,out){
30 byte i; /* actual input*/
http://210.40.7.188/E'ojc/MXJC/SPIN/000/003.asp(第 3/12 页)2009/5/13 10:58:21
计算机研究生开放课程 - 并发系统性质的描述
Promela并发程序的执行轨迹、随机模拟与检验
下面的Promela程序描述了一个简单的由两个进程A,B构成的只有一个全局变量的并发系统, byte s = 1; proctype A() { (s= =1) -> s = s+1 ; printf("A:s=%d\n",s) } proctype B() { (s= =1) -> s = s-1 ; printf("B:s=%d\n",s) } init { run A(); run B() }
系统描述:
Promela 模型:
init
http://210.40.7.188/E'ojc/MXJC/SPIN/000/003.asp(第 1/12 页)2009/5/13 10:58:21
计算机研究生开放课程 - 并发系统性质的描述
{ chan AtoB = [1] of { mtype,byte }; chan BtoA = [1] of { mtype,byte }; chan Ain = [2] of { mtype,byte }; chan Bin = [2] of { mtype,byte }; chan Aout = [2] of { mtype,byte }; chan Bout = [2] of { mtype,byte }; atomic { run application( Ain,Aout ); run transfer( Aout,Ain,BtoA,AtoB ); run transfer( Bout,Bin,AtoB,BtoA ); run application( Bin,Bout ) }; AtoB!err(0) }
(发送端到接受端)对所传送消息的正确性传送、改变和丢失三种可能。
在sender和receiver进程中使用了assert语句来检验在可能会发生任意的消息丢失的情况下,数据是否能
全部按顺序正确地传到接收端。
在sender和receiver进程中使用progress状态标记两端传送正确的数据所必须要执行的语句。因为有可能
4 byte o,s,r;
5 o=MAX-1;
6 do
7 ::o=(o+1)%MAX;/*next msg*/
8 again:if
9
::out!mesg(o,s) /*send*/
10
::out!err(0,0)
11
::skip /*or lose*/
12
fi;
13
if
14
::timeout->goto again
计算机研究生开放课程 - 并发系统性质的描述
文,发送方发出报文之后启动超时时钟,等待认可报文。如果在给定的时间内没有收到认可报文,则重 发该报文。如果收到认可报文,其序号与发出报文序号相同,则序号寄存器的内容加1模2,然后发送端 实体从发送方用户获取下一个报文;接收端协议实体在收到报文后,如果确认报文无错误,并且序号和 序号寄存器的值相等,则向发送端实体发送认可报文(认可报文的序号值等于接收报文的序号值),然 后将报文递交给接收方用户,序号寄存器的内容加1模2。如果接收的报文有错误,或者序号不正确,则 丢失报文。
proctype application( chan in, out ) { int i=0, j=0, last i=0; do :: in?accept(i) ->assert( i==last i ); if :: (last i!=MAX) -> last i = last i+1 :: (last i==MAX) fi :: out!next(j) -> if :: (j!=MAX) -> j=j+1 :: (j==MAX) fi od }
计算机研究生开放课程 - 并发系统性质的描述
计算机研究生开放课程 《自动模型检测—Promela语言建模示例》
美国GeneChiu基金资助
3.2.1 并发系统性质的描述
分布式并发互斥系统的解(协议)需要满足性质:
• 互斥执行Mutual Exclusion: at most one process at a time is executing its critical section.
(3)全局状态s=1:进程A、B都执行结束 还有其它的执行轨迹,但全局状态不会出现0,1,2外的值
模拟结果:
$ spin ex01.txt A:s=2
timeout #processes: 3
s=2 5: proc 2 (B) line 3 "ex01.txt" (state 1) 5: proc 1 (A) line 2 "ex01.txt" (state 4) <valid end state> 5: proc 0 (:init:) line 4 "ex01.txt" (state 3) <valid end state> 3 processes createdo
这个系统的全局状态s可能是0,1,2,可能的执行轨迹(Trace)如下:
http://210.40.7.188/E'ojc/MXJC/SPIN/000/003.asp(第 4/12 页)2009/5/13 10:58:21
计算机研究生开放课程 - 并发系统性质的描述
(1)全局状态s=2:进程A执行结束,进程B阻塞在s= =1 (2)全局状态s=0:进程B执行结束,进程A阻塞在s= =1
58 od
}
60 init{
61 chan s_r=[1] of{mtype,byte,byte};
62 chan r_s=[1] of{mtype,byte,byte};
63 atomic{
64 run sender(r_s,s_r);
65 run receiver(s_r,r_s)
66 }
67 }Fra Baidu bibliotek
• 安全:
• 无死(活)锁Absence of Deadlock (Livelock): if two or more processes are attempting to enter their critical sections, at least one will succeed.
• 无延迟Absence of Unnecessary Delay: if a process is trying to enter its critical section and other processes are executing their noncritical sections (or have terminated), the first process is not prevented from entering its critical section.
Spin模拟检测:
3.2.2 AB协议
AB(Alternating Bit)协议是最早的端到端通信协议之一。在AB协议系统中,包含有发送端和接受端两 个实体。发送端协议实体从发送方获取一个报文,将序号寄存器值赋给报文,然后向接收端实体发出报
http://210.40.7.188/E'ojc/MXJC/SPIN/000/003.asp(第 2/12 页)2009/5/13 10:58:21
31 byte s; /* actual seqno*/
32 byte es; /* expected seqno*/
33 byte ei; /* expected input*/
34 do
35
::in?mesg(i,s)->
36
if
37
::(s==es)->
38
assert(i==ei);
39
progress: es=1-es;
相关文档
最新文档