我是Spin的新手,想知道是否可以使用Spin,或者是否已经使用了Spin,以便在间歇性或失败的网络中为心跳协议建模。
我正在努力解决这个问题的一个原因是Spin抽象了时间维度(只有概念是“之前”和“之后”),但心跳本质上是一个与时间相关的概念。在我们当前的分布式系统心跳设计(我想使用Spin改进)中,当网络变得脆弱时会发生一些不好的事情。最终,事情变得更好(系统重新启动),但“最终一致”在这种情况下还不够好 - 而Spin模型似乎最终认为是一致的而不是错误。在我们的例子中,客户有一定的实时响应要求。
对不起,这是一个如此模糊的问题;总结一下,有心跳相关Spin模型的例子吗?或者有关如何建模此类系统的任何建议?
答案 0 :(得分:1)
TL; DR:您可能需要查看混合实时系统的Sphin或其他模型检查程序
以某种方式,可以使用 Promela 设计一个discretized clock signal
的系统,然后在某个内部变量上表达一些 LTL 属性,跟踪流程时间但是,我这样做只是为了小玩具的例子,我不建议在较大的项目中使用它。
来自 Promela的documentation (重点是我的):
在基本的Promela语言中没有表达的机制 时钟或时间相关属性或事件的属性。那里 是将实时约束集成到数据中的好算法 模型检查过程,但迄今为止最受关注 相反,硬件电路设计中的实时验证问题 比异步软件的实时验证,这是 Spin模型检查器的域。
这些算法中最着名的算法会带来显着的性能 与不定时验证相比的处罚。每个时钟变量 添加到模型可以增加时间和内存要求 按一个数量级进行验证。考虑到需要的人 至少两个或三个这样的时钟变量来定义有意义的 约束,这似乎暗示,暂时,即实时 能力需要至少三到四个数量级 时间和内存比没有时间的同一系统的验证 约束
好消息是,如果可以证明正确性属性 不定时的Promela模型,保证保持其正确性 在所有可能的实时约束下。因此结果如此 坚固,可以有效地获得,并鼓励良好的设计 实践。在并发软件设计中,链接通常是不明智的 具有实时性能的逻辑正确性。
Promela是一种用于指定异步系统的语言 流程。 对于这样一个系统的定义,我们从中抽象出来 进程调度程序的行为和任何有关的假设 各种过程执行的相对速度。这些 假设是安全的,并且允许我们的最小假设 建立正确的证明。假设不同 从根本上来说可以用于硬件系统的那些 通常由一个已知的时钟驱动,相对速度为 执行准确知道。硬件中通常只是安全的东西 因此,验证在软件中不一定是公正和安全的 验证
Spin保证所有验证结果保持独立 进程在何处以及如何执行,在单个CPU上进行分时, 在多处理器或具有不同进程的真正并发中 在不同品牌和不同速度的CPU上运行。两点是 在这方面值得考虑:首先,这样的保证不能 如果引入实时约束,则给予更长时间,其次, 大多数现有的实时验证方法都假定为真 并发模型,无意中排除了更常见的方法 分时共享并发流程。
很难为抽象定义实际的时间范围 软件系统。通常,很少有人能够清楚地了解这一点 实现的实时性能。这通常是不明智的 在尝试建立一个时,依赖于推测信息 系统的关键正确性属性。