泰皮卡尔

TyPiCal:基于类型的Pi-Calculus静态分析器

目录

什么是TyPiCal?

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来编译它们。

更改历史记录

有关安装的详细信息,请阅读发行版中的README文件和用法。

联系信息

请将任何问题、评论或错误报告发送给Naoki Kobayashi()