SPIN安装与模型验证实验报告.docx

上传人:b****5 文档编号:6508987 上传时间:2023-01-07 格式:DOCX 页数:19 大小:1.03MB
下载 相关 举报
SPIN安装与模型验证实验报告.docx_第1页
第1页 / 共19页
SPIN安装与模型验证实验报告.docx_第2页
第2页 / 共19页
SPIN安装与模型验证实验报告.docx_第3页
第3页 / 共19页
SPIN安装与模型验证实验报告.docx_第4页
第4页 / 共19页
SPIN安装与模型验证实验报告.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

SPIN安装与模型验证实验报告.docx

《SPIN安装与模型验证实验报告.docx》由会员分享,可在线阅读,更多相关《SPIN安装与模型验证实验报告.docx(19页珍藏版)》请在冰豆网上搜索。

SPIN安装与模型验证实验报告.docx

SPIN安装与模型验证实验报告

 

实验报告

 

实验题目:

基于SPIN的LTL模型检测

课程名:

形式化方法

姓名:

王燕霞

学号:

2141

一、SPIN 概述

SPIN是由贝尔实验室形式化方法与验证小组用ANSIC开发,可以在所有UNIX操作系统版本使用,也可以在安装了Linux、Windows95以上版本等操作系统中使用,适合于分布式并发系统,尤其是协议一致性的辅助分析检测工具。

SPIN模型检验工具的基本思想是求两种自动机所接受语言的交集,若交集为空集,则安全特性得到验证,否则输出不满足安全特性的行为迹。

SPIN可以用于以下三种基础模型中:

1) 作为一个模拟器,允许快速对建立的系统模型进行随意的、引导性的或交互的仿真。

2) 可以作为一个详尽的分析器,严格的证明用户提出的正确性要求是否满足(使用偏序简约进行最优化检索)。

3) 用于大型系统近似性证明,用SPIN可以对大型的协议系统进行有效的正确性分析,即使这个系统覆盖了最大限度的状态空间。

二、SPIN的安装

2.1安装Cygwin

Cygwin是一个在windows平台上运行的类UNIX模拟环境,我们可以通过这个软件在windows系统上模拟简单的unix环境。

(1)首先从官网,下载Cygwin安装包,选择64位windows系统

(2)打开软件安装包setup-x86_64.exe,界面如下:

(3)选择installfromInternet,下一步

(4)选择安装路径

(5)选择模拟的Unix环境在系统中的路径

(6)选择UseInternetExplorerProxySetting,根据自己的网络链接状态选择

(7)选择镜像,最好是选国内的,以.cn结尾或者含有.cn的,国外镜像下载速度只有几K,所以可以不用尝试。

在这里我选择的是中科大的一个镜像

(8)选择要安装的包,Cygwin默认安装的东西很少,像gcc、make、X11、tcl/TK这些都没有,需要自己勾选,可以在Search中直接输入关键字进行查找。

如果一次安装没有全都装上也不要紧,可以再次运行setup.exe,然后继续安装其他的包。

(9)点击下一步,等待安装完毕。

2.2在Cygwin中安装yacc和SPIN。

(1)第一步,编译YACC

先下载用编译yacc.exe:

将byacc.tar.Z放在一个空目录yacc中,解压:

gunzip*.tar.Z;tar-xf*.tar;然后用make编译,若有错误再用下面命令编译:

gcc-oyacc*.o将yacc.exe拷贝到cygwin/bin下(或Src*目录下)

(2)第二步,编译SPIN

在SPIN官网上下载spin642.tar.gz放在一个空目录spin中,解压:

gunzip*.tar.gz;tar-xf*.tar;转到Src*目录下cdSrc*,make-fmake_unix,最后将生成的spin.exe放到cygwin/bin下。

编译好以后的截图如下:

(3)这时候运行在Cygwin命令行中输入spin就会显示spin的版本,截图如下:

2.3安装SPIN的图形界面工具ispin

(1)安装ISPIN的前提是Cygwin支持图形界面,也就是刚才我们在安装Cygwin的时候必修安装Tcl/TK和X11,安装好以后在windows开始菜单会出现一个Cygwin-X目录,如下图所示:

(2)从SPIN官网上下载ispin.tcl放到C:

\cygwin64\bin目录下,把后缀去掉,重命名为ispin。

(3)打开Cygwin-X目录下的XWinServer,在命令框中输入ispin就会出现ispin的界面。

(4)遇到的问题:

在这里不知道为什么,大多数同学都没有出现ispin界面错位的问题,但是我的ispin超出了界面,影响到了正常使用。

后来在ispin.tcl文件中加了一条关于字体大小的全局声明就好了,经试验对于xspin方法也是一样的。

下面的改代码前后改代码后的界面对比:

三、利用SPIN进行模型检测

3.1互斥协议的模型检测

bytesem=1;//占用信号:

0表示临界区被占用

bytecritical=0;//临界区:

n表示临界区被n人占用

#definesss(sem>0)

#definemutex(critical<=1)//要求检验

activeproctypeP1(){

do:

:

atomic{sem>0;sem--;}

critical++;//进程P1占用临界区

critical--;//进程P1退出临界区

sem++;//释放占用信号

od

}

activeproctypeP2(){

do:

:

atomic{sem>0;sem--;}

critical++;//进程P2占用临界区

critical--;//进程P2退出临界区

sem++;//释放占用信号

od

}

互斥协议指的是两个进程共享一个临界区(critical),任何时间只能有一个进程占用临界区。

互斥协议的Promela语言的正确表述如下:

ltle1{<>mutex}//未来存在一种情况,无多个用户占用临界区

ltle2{!

<>mutex}//未来临界区始终有多个用户

ltle3{<>!

mutex}//未来存在一种状态临界区有多个用户

ltle4{[]mutex}//临界区始终最多只有一个用户

ltle5{!

[] mutex}//未来存在一种状态临界区有多个用户,跟e2等价

ltle6{[]!

mutex}//临界区始终有多个用户,跟e3等价

ltle7{!

sss ->[]mutex}//如果临界区被占用,则临界条件成立

对该模型建立如下LTL检验条件:

下面我们用SPIN对该模型进行检验,打开mutex.pml,首先进行语法检验,syntaxcheck,得到结果如下图所示,没有语法错误,提示有没有用到的ltl公式。

然后选择verification选项卡,进行模型验证,模型验证分成三块,safety、liveness、以及LTLneverclaims。

刚开始我们先对程序进行安全性和可活动性验证,下面截图中用的是默认勾选的选项,第一个表示死锁,进程无法执行下去,第二个表示程序的断言冲突(在mutex这个程序中不包含断言),第三个是允许循环,就是允许只有一个进程一直处于活动状态,而另一个不动。

运行结果是没有找到反例,所以描述的模型是没有死锁的。

选择检验条件e1,同样也没有找到反例。

说明未来存在一种情况,只有一个用户占用临界区这个断言是正确的。

同样我们也可以选择其他的检验条件。

如果条件不成立的话,在选择Simulate/Replay,模拟方式选择Guidewithtrail,意思就是重放检验的时候得到的路径。

比如,当我们检验e6时,显然这个条件是不成立的,在下面的进程运行步骤中就能看到一个使断言不成立的运行步骤。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1