早上7点起床,困……
8点整到达实验室,除了马老师,基本没人。道了声早便开始工作了。今天还是承接昨天的工作,以老师的博士论文为切入点来学习通信协议正确性的证明。
Google到了几份论文,发现以学习Promela语言和Spin工具为切入点应该会比较有头绪。很幸运地找到了一篇名为《SPIN Beginners' Tutorial》的入门教程,简明清晰,十分适合入门。于是下面一天的事情都是围绕这个教程展开的。
Promela语言是一种十分适合描述多进程系统内相互通信的语言,Spin是它的编译工具(准确地说是Simulator,模拟器)。利用 Spin可以发现通信协议中存在的漏洞,缺陷等,而这些漏洞缺陷通过人脑分析一般很难找全。比如说ABP(Alternating Bit Protocol)协议是一个有问题的协议:一旦信道不稳定,出现传输错误,整个通信过程就会陷入死锁。通过下面的Promela小程序就可以自动发现 ABP中存在的问题,并且,利用XSpin还可以以图形界面的方式显示出协议中到底问题出在哪里:
mtype {msg,err,ack};
chan S = [2] of {mtype,bit}
chan R = [2] of {mtype,bit}
proctype Sender(chan in,out){
bit bitsend=0;
bit bitrecv;
do
::out!msg,bitsend ->
in ? ack,bitrecv;
if
::bitrecv == bitsend ->
bitsend = 1 - bitsend;
out!msg,bitsend;
::else /* 什么也不做,自动重发 */
printf("Sender:err. Re_send!/n");
fi
od
}proctype Receiver(chan in,out){
bit bitrecv;
do
::in?msg,bitrecv ->
out!ack,bitrecv;
od
}
init{
atomic{
run Sender(S,R);
run Receiver(R,S);
}
}
图中的循环便是问题所在
上午下午都在学习Promela和Spin。
由于安全显示,实验室的机器上不能装CYGWIN,XSpin缺少Cpp.exe,无法进行预处理,导致XSpin无法执行。明天还是把本子带过去,在自己的机器上测试。
马老师考虑到我住的比较远,对我就没有作时间上的限制,外部环境还是很宽松滴~这几天都是6点就回来了,下周起确定了项目估计就不能这么早了。不过,有了明确目标,应该很有意思!
现在我什么都不懂,但我有信心:过了下周,我就能够获得问题的整体轮廓了,再过下周,我就可以解决部分问题了,再然后,我就可以比较nice地解决问题了。
哈哈,YY而已~实际还是十分困难的,心里没底 :(
--------------------------------------------------------------
突然想到一个问题:放暑假了,为什么研究生们都在实验室???!!!