1、论文提出了一种模型检测器NesC@PAT工具,它能自动验证违反特定属性(死锁、状态可达、线性时序逻辑)的传感网程序。
2、模型检测技术:通过搜索给定系统所有可能的状态空间来检测违反特定属性的传感网程序。譬如说T-Check就是基于模型检测的一种工具通过搜素系统所有可能的状态空间来检测违反安全属性和活性属性的传感网程序bug。但是T-Check会有缺陷:不能检测并发bug + 底层bug。
3、NesC@PAT通过一系列的解析器和模型生成器整合了nesC语言的操作语义、能够保存TinyOS执行模型的驱动中断信息、底层硬件模型的抽象和结点之间非确定的条件信息,形成了这样一个全自动化的NesC语言的模型检测工具。
Abstract
- 在这个例子程序中,提出了一种特定领域的模型检测器——NesC@PAT;
- NesC@PAT工具将NesC程序和网络拓扑作为输入,并且能自动验证违反的特定属性的传感网程序(例如死锁、状态可达和线性时序逻辑公式)。
- NesC@PAT能够找出非正常情况下小概率的传感网bug,普通的模拟和调试是能找出这些bug的。
Introduction
- TinyOS/NesC程序的并发性和事件驱动的特点导致有些bug发生的概率很低而且很难调试;
- 模型检测技术通过探索给定系统的所有可能的状态空间(场景)来检测相应的属性(通常被表达成一种时序逻辑)。
- 例如基于TOSSIM实现的模型检测器:T-Check,来检测传感网程序中违反了安全属性和活性属性的bug;但是T-Check也有一定的缺陷,例如:
1、T-Check不能够检测并发错误和一些底层错误
2、T-Check中的断言是一种命题逻辑而不能指定成重要的是时序逻辑属性,譬如说:时常无限释放缓存或者两个事件的交替出现。 - 论文的贡献:
1、NesC@PAT:一个完全自动化的模型检测工具,以NesC程序和网络拓扑为输入,验证违反传感网指定的属性,例如无死锁、状态可达性和线性时序逻辑公式。
2、为了最小化人工干预,NesC@PAT集成了模型生成器,根据NesC程序自动生成模型,保存驱动中断并发,并且包含了大部分NesC语言的特点譬如说命令。事件。任务甚至是一些高级的特性例如参数化绑定和层次绑定。
二、Overview of NesC@PAT
- 如图为NesC@PAT的结构示意图:
- 解析器和模型生成器将NesC程序转化成一个LTS(标签转换系统),LST中整合了nesC语言的操作语义、能够保存TinyOS执行模型的驱动中断信息、底层硬件模型的抽象和结点之间非确定的条件信息。
- 模型检测器对LTS生成的状态空间进行有穷的搜索并且返回违反了断言的反例,目前该模型检测器能够检测死锁、状态空间不可达和不满足线性时序逻辑的bug。
- 例如如下例子程序:
buggy code:
result_t tryNextSend () {
atomic {
if (! sendTaskBusy ) {
post sendTask ( ) ;
sendTaskBusy = TRUE;
}
} . . .
}
revised code:
result_t tryNextSend () {
atomic{
if (! sendTaskBusy ) {
if (SUCCESS != post sendTask ())
sendTaskBusy = FALSE;
else sendTaskBusy = TRUE;
} . . .
}