TyPiCal:基于类型的Pi-Calculus静态分析器
目录
TyPiCal是基于类型的像素静态分析器。TyPiCal的当前版本提供了以下程序分析或程序转换:锁自由分析、死锁自由分析,无用代码消除,信息流分析和终止分析。前两个分析旨在静态分析每个通信是否成功与否。锁自由分析可以回答如下问题关于并发/分布式程序的行为:
- 服务器最终会接受来自客户端的每个请求吗?
- 服务器最终会对每个请求发送回复吗?
- 进程最终能获得锁吗?
- 获取了锁的进程最终会释放锁吗?
无用代码消除(UCE)通过以下方式优化pi-calculus过程移除不影响进程的可观察行为的子进程。UCE的结果与原始过程一致,但通常比原始流程,因此更高效,更容易验证(使用其他工具例如模型检查器)。信息流分析仪检查流程是否泄漏向环境提供有关机密数据的信息。您可以尝试使用web界面进行TyPiCal的死锁自由分析在这里.例子
考虑以下由两位用餐哲学家组成的节目。(“?”代表接收操作,“!”代表发送操作,“*”代表复制。)new fork中的新philos*菲洛斯?x(让左=fst(x)in让右=snd(x)in左边?对吧?w./***选择左叉子,然后选择右叉子***/(左!()|右!()|吃!()|菲利普斯!(左,右))|菲洛斯!(叉1,叉2)|菲洛斯!(分叉1,分叉2)|叉子1!()|fork2!()
这两位哲学家试图按照相同的顺序选择两个叉子,因此他们没有陷入僵局。TyPiCal的锁自由分析仪生成以下输出:new fork中的新philos*菲洛斯??x(让左=fst(x)in让右=snd(x)in左边??对吧??w./***选择左叉子,然后选择右叉子***/(左!!()|右!!()|正在吃!()|菲利普斯!!(左,右))|哲学!!(叉1,叉2)|菲洛斯!!(分叉1,分叉2)|叉子1!!()|fork2!!()
除了吃以外的所有通讯1!()标记为!!或者??,这意味着这些沟通最终会成功。上述结果表明两位哲学家可以无限频繁地获得叉子。给定相同的程序,TyPiCal的无用代码消除器将生成以下输出:*吃!()
由于哲学家可以无限频繁地获得叉子,因此整个过程实际上相当于吃!().如果第二个哲学家用不同的顺序分叉:
new fork中的新philos*菲洛斯?x(让左=fst(x)in让右=snd(x)in左边?对吧?w./***选择左叉子,然后选择右叉子***/(左!()|右!()|吃!()|菲利普斯!(左,右))|菲洛斯!(叉1,叉2)|菲洛斯!(分叉2,分叉1)|叉子1!()|fork2!()
那么,锁自由度分析器的输出是:new fork中的新philos*哲学?x(let left=fst(x)in let right=snd(x)in左边?对吧?w./***选择左叉子,然后选择右叉子***/(左!()|右!()|吃!()|菲利普斯!!(左,右))|菲洛斯!!(叉1,叉2)|菲洛斯!!(分叉2,分叉1)|叉子1!!()|fork2!!()
所以,我们知道哲学家可能无法吃东西(请注意,左?w和右?w没有注释??)。在这种情况下,无用代码消除器不会消除任何子进程。请参阅中的README文件分布了解更多详细信息。TyPiCal是一种基于类型的分析器。使分析复杂特性成为可能例如锁自由和信息流,对普通类型的系统进行了扩展,以便通道类型携带关于每个通道如何使用的精确信息。TyPiCal对这种扩展类型系统执行类型推理,并获得有关进程行为的信息。查看可用文件在这里TyPiCal的理论背景。建议第一次阅读以下教程文件:Naoki Kobayashi,“并发程序的类型系统”联合国大学/研究所十周年学术讨论会记录施普林格LNCS 2757,第439-453页
下文将更详细地描述TyPiCal的技术背景。Naoki Kobayashi,“无死锁过程的新型系统”CONCUR 2006,Springer LNCS 4137,第233-247页,2006年。
Naoki Kobayashi,“基于类型的Pi-Calculus信息流分析”《信息学报》,42(4-5),第291-347页,2005年。
Naoki Kobayashi和Davide Sangiorgi,“移动进程锁定自由度的混合型系统,”CAV 2008,Springer LNCS,2008。
TyPiCal是免费软件。(我们之前修改了GNU公共许可证,但由于一些要求,我们已经切换到BSD风格的许可证。请参阅发行版中的README文件,以了解重新分配和使用。)您可以下载当前版本的TyPiCal(1.6.2版)从在这里.该发行版包含源程序和示例像素程序。您需要Objective Caml来编译它们。更改历史记录
- Version 1.0.x:TyPiCal的第一个版本,它实现了死锁自由分析、锁自由分析和信息流分析,根据我们的Acta Informatica论文,消除无用代码
- 版本1.1.x:对死锁自由分析的改进递归,基于CONCUR 2006论文
- 版本1.2.x:基于我们的CONCUR 2006论文,增加了对列表数据结构的支持。
- 版本1.3.x:添加了简单类型推断。
- 版本1.4.x:根据我们的CAV 2008论文,增加了终止分析。
- 版本1.5.x:基于我们的CAV 2008论文,对递归的(弱)锁自由分析进行了改进。
- 版本1.6.x:基于我们的CAV 2008论文,添加了终止注释的自动推断。
有关安装的详细信息,请阅读发行版中的README文件和用法。请将任何问题、评论或错误报告发送给Naoki Kobayashi()