Symmetry-Aware Predicate Abstraction for Shared-Variable Concurrent Programs (Extended Technical Report)
谓词抽象是将有限状态模型检查器应用于主流语言编写的程序的关键使能技术。它已经非常成功地用于调试顺序系统级C代码。虽然模型检验最初是为分析并发系统而设计的,但很少有证据表明谓词抽象在共享变量并发软件中的富有成效的应用。本文的目的就是缩小这一差距。我们已经开发了一个可感知的谓词抽象策略:它考虑到C程序的复制结构,包括许多线程执行相同的过程,并生成一个布尔程序模板,其多线程执行健全overapproximates并发C程序。在此模板的模型检验并行实例化期间的状态爆炸现在可以通过利用对称性来吸收。我们已经实现了我们的方法中的SATABS谓词抽象框架,并证明其优越的性能在大范围的同步程序的替代方法。
2011-02-11 cs.PL
Petrification: Software Model Checking for Programs with Dynamic Thread Management (Extended Version)
本文针对动态 fork/join 线程的并发程序验证,提出 petrification 转换,将其归约为基于 Petri 网的固定线程数形式化体系,并在支持 pthreads 的 C 程序模型检测工具中实现。
2023-11-02 cs.PL
A Modular Formalization of Reversibility for Concurrent Models and Languages
并发一致可逆性是并发可逆性的参考概念。我们介绍了一个模块化的框架,用于定义并发模型和语言的并发一致的可逆扩展。我们展示了我们的框架可以用来定义不同的CCS和并发X-机的形式主义可逆扩展。这种方法的普遍性允许在不同的环境中重复使用理论和技术。
2016-08-11 cs.LO cs.PL
Towards Gradual Checking of Reference Capabilities
并发和并行编程是困难的,由于存在的内存副作用,这可能会引入数据竞争。类型限定符(如引用功能)可以通过限制可变数据的共享来消除数据竞争。不幸的是,引用能力语言是一个全有或全无的游戏,即,所有类型都必须用引用能力进行注释。在这项正在进行的工作中,我们建议将参考能力文献中的想法与渐进类型相结合,从而实现渐进的参考能力。
2019-10-15 cs.PL
Modular termination verification with a higher-order concurrent separation logic (Intermediate report)
我们报告的中间结果,我们的研究推理活性属性,除了深正确性的一个命令,并发程序设计语言与高阶存储。目前,我们集中在一个特定的活性属性,即终止。通过保证终止性,我们可以将部分正确性的陈述加强为完全正确性。这是通过将终止性转换为安全属性的经典方法来实现的。特别是,我们扩展的程序设计语言考虑与调用权限,这已被证明,使模块化的推理终止。添加原子块是为了增加我们基于调用权限的方法的表现力。我们的工作建立在Iris --一个基础的、机器检查的、高阶并发分离逻辑框架--之上,而不修改它。有了这些补充,我们就能够模块化地推理并发但非阻塞算法的终止。我们对正在考虑的程序设计语言的添加保留了Iris对帮助和预言进行推理的能力。作为一个例子,我们将当前的系统应用于现有的无锁并发堆栈的案例研究,并在Iris中得到了证明。最后,我们概述了扩展阻塞并发方法的后续步骤。
2022-12-28 cs.LO cs.PL
Checking Robustness against TSO
我们提出的算法检查和执行的并发程序对总存储排序(TSO)内存模型的鲁棒性。一个程序是健壮的,如果它的所有TSO计算对应于顺序一致性(SC)语义下的计算。我们提供了一个完整的非鲁棒性的特征,在所谓的攻击:(有害的)程序的顺序执行的限制形式。然后,我们发现,检测攻击可以并行化,并可以解决SC语义下使用状态可达性查询在一个适当的仪表程序获得的线性大小的源到源的翻译。重要的是,该构造对于任意数量的地址和任意数量的并行线程都是有效的,并且它独立于数据域和TSO语义中的存储缓冲区的大小。特别是,当数据域是有限的,地址的数量是固定的,我们得到的鲁棒性的可判定性和复杂性的结果,即使是任意数量的线程。作为第二个贡献,我们提供了一个算法来计算一组最佳的围栏,执行鲁棒性。我们考虑两个标准的最优性:最小化的程序大小和最大化的性能。我们定义的算法被实现,并成功地应用于分析和纠正几个并发算法。
2012-10-29 cs.PL
Modular Reasoning about Error Bounds for Concurrent Probabilistic Programs (Extended Version)
提出Coneris,首个高阶并发分离逻辑,通过随机逻辑原子性支持并发概率程序的错误概率界模块化推理,并在Rocq和Iris中机械化验证。
2025-08-07 cs.LO cs.PL
Optimal Stateless Model Checking of Transactional Programs under Causal Consistency
我们提出了一个有效的无状态模型检验(SMC)的框架下的因果一致性,CCv,CM,CC,读提交和读原子五个突出的模型。我们的方法是基于探索下的程序顺序(PO)和读取(RF)关系的痕迹。我们的SMC算法是可证明的最佳意义上,它探讨了每一个PO和RF的关系,正好一次。我们已经实现了我们的框架中的一个工具,称为TRANSPORKER。实验结果表明,TRANSPORKER在经典的分布式数据库基准测试中具有良好的异常检测性能。
2023-01-16 cs.PL
On the Complexity of Checking Transactional Consistency
事务通过支持对共享数据的计算来简化并发编程,这些计算与其他并发计算隔离并且对故障具有弹性。现代数据库为事务提供了不同的一致性模型,对应于一致性和可用性之间的不同权衡。在这项工作中,我们调查的问题,检查是否一个给定的执行事务数据库坚持一些一致性模型。我们表明,一致性模型,如读提交,读原子,因果一致性是多项式时间检查,而前缀一致性和快照隔离一般是NP完全的。这些结果补充了以前的NP-完全性的结果有关的串行化。此外,在NP完全一致性模型的上下文中,我们设计了多项式时间的算法,假设输入执行中的某些参数,例如,会话的数量是固定的。我们评估这些算法的可扩展性的上下文中的几个生产数据库。
2019-08-13 cs.DB cs.PL
Correctness Witnesses for Concurrent Programs: Bridging the Semantic Divide with Ghosts (Extended Version)
本文提出一种基于幽灵的并发程序正确性见证格式,使交错语义与线程模块化语义下的见证有效性一致,并在SV-COMP基准上验证了其可行性。
2024-11-25 cs.PL
Formalizing and Checking Thread Refinement for Data-Race-Free Execution Models (Extended Version)
当优化并发程序中的线程时(手动或由编译器完成),必须保证结果线程是原始线程的细化。大多数有效优化的理论都是根据程序代码上的有效语法转换或线程执行轨迹上的有效转换来制定的。我们提出了一个新的理论制定,而不是在同步操作的线程的状态,并表明它提供了几个优点:它支持更多的优化,并导致更有效和更简单的程序细化检查。我们开发的SC-DRF执行模型(使用锁同步)的理论,并表明其在编译器测试设置中的应用程序导致大的性能改善。
2015-10-24 cs.PL
Datalog-based Scalable Semantic Diffing of Concurrent Programs
当修改演进程序以解决与线程同步相关的问题时,需要确认改变是正确的,即,它不会引入意外的行为。然而,手动比较两个程序以识别语义差异是劳动密集型的并且容易出错,而基于模型检验的技术在计算上是昂贵的。为了填补这一空白,我们开发了一种快速的近似静态分析来计算两个程序的同步差异。该方法是快速的,因为它不依赖于重量级模型检验技术,而是利用基于多项式时间数据日志的程序分析框架来计算差分数据流边缘,即,一个程序允许的边缘,而另一个程序不允许。虽然使用近似,我们的方法是足够准确的,由于精心设计的数据流推理规则和迭代增加所需的数据流边缘表示的差异。我们已经实现了我们的方法,并在大量的多线程C程序上对其进行了评估,以确认其通常在几秒钟内产生与人类获得的相同差异的能力;相比之下,基于模型检验的现有技术需要几分钟甚至几小时,因此可能会慢10倍到1000倍。
2018-07-16 cs.PL cs.SE
On the Complexity of Checking Mixed Isolation Levels for SQL Transactions
本文研究了同时使用多种隔离级别的 SQL 事务执行正确性检查问题,证明了该问题的多个受限版本为 NP 完全,并提出了一种兼顾最坏情况指数时间、相关情况多项式时间及实际高效的验证算法。
2025-07-15 cs.DB cs.PL
Visibility Reasoning for Concurrent Snapshot Algorithms
可见性关系是由Henzinger等人提出的,作为一种抽象,用于证明并发算法的线性化,从而获得模块化和可重用的证明。这与基于展示算法的线性化点的常规方法相反。在本文中,我们应用可见性关系开发模块化的证明三个优雅的并发快照算法的Jayanti。证明被签名分成抽象级别增加的组件;更高抽象级别的组件被共享,即,它们同时应用于所有三种算法。重要的是,界面特性在数学上捕捉到了Jayanti最初的直觉,而这些直觉以前只是非正式地给出的。
2021-11-08 cs.LO cs.PL
A New Approach to Stateless Model Checking of LTL Properties
大型复杂并发程序的验证是软件界的一个重要课题。无状态模型检验是一种适合于大型程序系统化、自动化测试的方法,它在大型程序代码验证中的作用已得到证实。这方面的另一个众所周知的方法是运行时验证。无状态模型检验和运行时验证在某些方面是相似的。运行时验证中的一种常见方法是为线性时态逻辑中表示的属性构建运行时监视器。目前,在运行时验证领域提出了一些对有限路径上的线性时态逻辑公式进行检验的语义,这些语义也可以应用于无状态模型检验。然而,现有的无状态模型检查器不支持LTL公式。在某些设置中,使用无状态模型检验而不是运行时验证更有利。本文提出了一种新的编码的最近LTL语义有限路径到一个演员为基础的系统。我们采取了一个真正的并行方法,而不保存任何程序的状态或痕迹,这不仅解决了重要的问题,在运行时验证,但也可以应用于无状态的模型检验。
2016-03-11 cs.PL
Checking Robustness Between Weak Transactional Consistency Models
对数据库的并发访问通常封装在事务中,以便能够与其他并发计算隔离并对故障具有弹性。现代数据库为事务提供了各种语义,对应于一致性和可用性之间的不同权衡。由于较弱的一致性模型提供更好的性能,因此一个重要的问题是调查给定程序所需的最弱一致性级别(以满足其规范)。作为处理这个问题的一种方式,我们调查的问题,检查是否一个给定的程序具有相同的一组行为时,更换一个较弱的一致性模型。这种被称为鲁棒性的特性通常意味着在削弱一致性时保留程序的任何规范。我们专注于一致性模型的鲁棒性问题,这是弱于标准的串行化,即因果一致性,前缀一致性,快照隔离。我们发现,检查这些模型之间的鲁棒性是多项式时间减少到一个状态可达性问题下的串行化。我们使用这种减少也得到一个务实的证明技术的基础上,利普顿的减少理论,允许证明程序的鲁棒性。我们已经将我们的技术应用于几个具有挑战性的应用程序,从分布式系统和数据库的文献。
2021-01-22 cs.LO cs.PL
A Lazy, Concurrent Convertibility Checker
OCamlPro;Collège de France, PSL University(法兰西公学院,PSL大学)
本文提出一种基于惰性和并发的可转换性检查算法,通过共享计算和并行探索提高效率,避免了传统启发式方法带来的计算开销。
2026-01-09 cs.LO cs.PL
Context-Bounded Model Checking for POWER
基于Qadeer等人在2005年提出的用于检测并发程序(假定运行在经典SC模型下)中bug的上下文有界分析的工作,我们提出了一种针对POWER内存模型下运行的程序的欠近似可达性分析算法.为此,我们首先引入了一个新的上下文绑定概念,它适用于POWER下的计算推理,它概括了Atig等人在2011年为TSO内存模型定义的概念。然后,我们提供了一个多项式大小减少的上下文有界状态的可达性问题下POWER SC下相同的问题:给定一个输入并发程序P,我们的方法产生一个并发程序P',这样,对于一个固定数量的上下文切换,运行P' SC下产生相同的一组可达状态下运行P POWER。生成的程序P'包含与P相同数量的进程,并且在相同的数据域上操作。通过利用标准的模型检查器CBMC,我们已经实现了一个原型工具,并将其应用于一组基准测试,表明我们的方法的可行性。
2019-09-24 cs.FL cs.LO cs.PL
On the Complexity of Checking Soundness of Natural Reductions (Extended Version)
LIX – CNRS – École Polytechnique(巴黎综合理工学院 LIX 实验室);University of Toronto(多伦多大学)
研究提出自然缩减类,探讨其在给定半交换性关系下的声学性判定问题,针对无线程同步情况给出多项式时间算法,同步情况则证明问题coNP难。
2026-05-13 cs.PL
Liveness for Verification
我们探讨使用活性的交互式程序验证一个简单的并发对象语言。我们的实验IDE集成了两种(正式双)持续测试到开发环境中:兼容性检查,它验证一个对象的使用其他对象,和合规性检查,它验证一个对象的要求,以完善另一个对象的行为。IDE突出显示的源代码错误不是静态类型错误,而是在系统的某些执行过程中发生的运行时错误的源代码反射。我们展示我们的方法,并讨论机遇和挑战。
2016-09-14 cs.PL
Sthread: In-Vivo Model Checking of Multithreaded Programs
本文的工作旨在使POSIX多线程程序的形式化验证更容易为一般程序员所接受。Sthread直接在多线程C/C++程序上运行,不需要中间的形式化模型。Sthread是内置的,因为它提供了pthread库的直接替代品,并直接在编译后的目标可执行文件和应用程序库上操作。没有编译器生成的中间表示。应用程序中的系统调用保持不变。可选地,程序员可以添加少量额外的原生C代码,以包括基于用户算法的断言、共享内存区域的声明以及进度/活动条件。这项工作有两个重要的动机:(一)它可以用来验证正确的并发算法实现多线程;(二)它也可以用于教学提供即时反馈给学生学习无论是采用POSIX线程系统调用或实现多线程算法。这项工作代表了体内模型检验直接操作的标准多线程可执行文件及其库的第一个例子,没有编译器生成的中间表示的帮助。Sthread利用了开源的SimGrid库,并最终将集成到SimGrid中。Sthread采用非抢占式模型,其中线程上下文切换仅在多线程系统调用时发生(例如,互斥量、信号量)或在访问共享存储器区域之前。重点是发现“算法错误”(原始算法中的错误,实现为POSIX线程和共享内存区域)。这项工作是在对比上下文有界分析(CBA),它假设线程的抢占式模型,并强调实现错误,如缓冲区溢出和写后释放内存分配。特别是,Sthread在体内的方法有很强的未来潜力的教学,提供即时反馈给学生谁是第一次学习的正确使用Pt…
2020-02-14 cs.PL
Compositional Non-Interference for Fine-Grained Concurrent Programs
非干扰性是一种程序属性,可确保不存在信息泄漏。在程序设计语言的上下文中,有两种常见的方法来建立非干扰:类型系统和程序逻辑。类型系统提供了强大的自动化(通过类型检查),但它们在它们支持的程序类型方面有固有的限制。程序逻辑支持具有挑战性的程序,但它们通常需要大量的人工帮助,并且不能处理模块或更高阶的程序。为了连接这两种方法,我们提出了SeLoC-一种非干扰的分离逻辑,在此基础上,我们使用逻辑关系技术建立了一个类型系统。通过在分离逻辑之上构建类型系统,我们可以组合地验证由类型化和非类型化部分组成的程序。前一部分通过型式检验进行验证,后一部分通过人工校对进行验证。SeLoC的核心技术贡献是最弱前提条件的关系形式,可以使用分离逻辑资源跟踪信息流。SeLoC是完全机器检查的,并且构建在Iris框架之上,用于Coq中的并发分离逻辑。与Iris的集成为细粒度并发提供了无缝支持,这是之前的类型系统和程序逻辑无法实现的无干扰性。
2020-03-06 cs.LO cs.PL
Awaiting for Godot: Stateless Model Checking that Avoids Executions where Nothing Happens
无状态模型检验(SMC)是一种并发程序的验证技术,它通过探索所有可能的线程冲突来检查安全违规。当与动态偏序约简(DPOR)结合时,它是非常有效的,DPOR引入了一个等价类,并且在每个等价类中只需要探索一个。即使使用DPOR,SMC也经常花费不必要的努力来探索纯循环迭代,即,对程序状态没有影响。我们提出的技术,使SMC与DPOR更有效的纯循环迭代程序。第一种是静态程序分析,用于检测循环纯度和相关的程序转换,称为部分循环纯度消除,插入假设语句以阻止纯循环迭代。随后,其中一些假设被转换为await语句,完全删除了许多假设阻止的执行。最后,我们提出了一个扩展的标准DPOR等价,通过削弱事件之间的冲突关系。所有这些技术被纳入一个新的DPOR算法,最佳DPOR等待,它可以处理等待和较弱的冲突关系,是最佳的意义上,它只探索一个执行在每个等价类,也可以诊断活锁。我们在Nidhugg中的实现表明,这些技术可以显着加快并行程序的分析,这些程序目前对SMC工具来说是具有挑战性的,无论是探索其完整的交织集,还是检测其中的并发错误。
2022-08-19 cs.PL cs.SE
Safe Execution of Concurrent Programs by Enforcement of Scheduling Constraints
并发程序的自动化软件验证是具有挑战性的,因为相对于线程的数量和每个线程的事件的数量呈指数级大的状态空间。诸如模型检验之类的验证技术需要探索在非确定性调度器下可能的大量可能执行。状态空间约简技术,如偏序约简,简化了验证问题,然而,减少的状态空间可能仍然是指数级大和棘手的。本文讨论了\emph{Iteratively Relaxed Scheduling},一个框架,使用调度约束,以简化验证问题,使自动验证程序,不能处理完全不确定性调度。程序执行是安全的,只要在程序已被验证的情况下实施相同的调度约束,例如,通过用附加的同步来检测程序。由于严格执行调度约束可能会导致很高的执行时间开销,我们提出了一个天真的解决方案,减少这种开销的优化。我们的评估的原型实现知名的基准程序显示的效果调度约束的执行时间开销,以及如何通过放松和选择约束,可以减少这种开销。
2020-04-14 cs.PL
The Singularity Theory of Concurrent Programs: A Topological Characterization and Detection of Deadlocks and Livelocks
该研究提出并发程序分析的奇点理论范式,通过分支拓扑空间建模程序执行,用代数拓扑不变量检测死锁与活锁,为并发验证提供新的拓扑基础。
2025-10-29 cs.DC cs.LO cs.PL
A Formalisation of Core Erlang, a Concurrent Actor Language
本文形式化了并发核心Erlang的帧栈语义,证明了确定性、合流性等性质,并基于双模拟定义了程序等价性,为验证重构保持程序行为奠定基础。
2023-11-17 cs.PL
LAGC Semantics of Concurrent Programming Languages
形式化的、数学上严格的程序设计语言语义是设计允许对并发程序进行自动推理的逻辑和演算的基本先决条件。我们提出了一种新的模块化语义,旨在顺利对齐与演绎验证和并发程序的形式规范中使用的程序逻辑。我们的语义分离的表达式和语句的本地评估在一个抽象的,符号化的环境,从他们的组合成全球性的计算,在这一点上,他们是具体化。这使得可以逐步增加新的语言概念,而不需要修改框架。的基础是一个概括的概念,一个程序跟踪作为一个序列的不断发展的状态,我们丰富的事件描述符和尾随延续标记。这允许将调度约束从局部评估的级别推迟到全局组合阶段,其中在事件结构上的格式良好性谓词声明性地描述了广泛的并发模型。我们还说明了如何一个健全的程序逻辑和演算可以定义这种语义。
2022-02-24 cs.PL
Lost in Abstraction: Monotonicity in Multi-Threaded Programs (Extended Technical Report)
并发系统中的单调性规定,在任何全局状态下,当新进程添加到该状态时,现存的系统操作仍然是可执行的。这个概念在多线程软件中不仅是自然和常见的,而且很有用:如果每个线程的内存是有限的,单调性通常保证安全属性验证的可判定性,即使在运行线程的数量未知的情况下。在本文中,我们表明,获得有限数据线程抽象的模型检验的行为可能与单调性不一致:谓词抽象某些广泛使用的单调软件的结果在非单调的多线程布尔程序的单调性是失去了抽象。其结果是,完善的健全和完整的安全检查算法变得不适用,事实上,安全检查原来是不可判定的无界线程布尔程序类。我们演示了如何将抽象程序修改为单调程序,而不影响非单调抽象的安全属性。这显着改进了早期通过过度逼近来强制单调性的方法。
2014-06-24 cs.PL
Gobra: Modular Specification and Verification of Go Programs (extended version)
Go是一种越来越流行的系统程序设计语言,特别是针对并发和分布式系统。Go语言与其他命令式语言的不同之处在于,它通过goroutine提供了结构化的子类型和轻量级的并发性以及消息传递通信。这些特性的组合为静态验证提出了有趣的挑战,最突出的是可变堆和高级并发原语的组合。我们提出Gobra,一个模块化的,演绎的程序验证器,证明内存安全,崩溃安全,数据竞争自由,和用户提供的规范。Gobra基于分离逻辑,支持Go语言的一个大子集。它的实现将带注释的Go程序转换为Viper中间验证语言,并使用现有的基于SMT的验证后端来计算和履行证明义务。
2021-05-28 cs.PL
Dynamic Structural Operational Semantics
我们引入动态SOS作为一个框架,用于描述语义的程序设计语言,包括动态软件升级,在运行时升级软件代码。动态SOS(DSOS)是建立在P.Mosses的模块化SOS之上的,具有潜在的范畴理论形式化。动态SOS的思想是指出动态升级结构和程序执行结构之间的本质区别。模块化SOS(MSOS)的重要特征,我们利用DSOS是尖锐的分离的程序执行代码从额外的(数据)结构需要在运行时。在DSOS中,我们的目标是为动态软件升级实现相同的模块化和解耦。这在一定程度上是出于长期目标,即为类型安全等一般结果提供可机器检查的证明。我们在两种支持动态软件升级的语言上支持动态SOS,即C类Proteus,它支持在特定程序点更新变量、函数、记录或类型,以及Creol,它支持在并发对象的设置中进行动态类升级。软件升级的现有类型分析也可以在DSOS之上完成,正如我们对Proteus的说明。作为一个附带的结果,我们定义了一个通用的封装结构模块SOS有用的情况下,需要一种形式的执行封装。我们使用封装在Creol设置的并发面向对象编程与活动对象和异步方法调用。
2018-07-20 cs.PL
Semantics, Specification, and Bounded Verification of Concurrent Libraries in Replicated Systems
本文针对地理复制系统中的弱一致性并发库,提出语义与规范,并开发静态分析框架以自动检测正确性违规,首次证明此类自动检查可行且实用。
2020-04-21 cs.PL
An Axiomatic Approach to Detect Information Leaks in Concurrent Programs
在并发环境中实现流安全性是极具挑战性的,主要是由于执行的不确定性。从安全角度来看,如果顺序线程通过公开可观察的语句(如print、sleep、delay等)披露控制位置,则会进一步加剧这种困难。受以前的作品,使用经典的霍尔风格的证明系统建立分布式(实时)程序的正确性的启发,在本文中,我们描述了一种方法,通过引入泄漏断言在可观察的程序点,发现并发程序中的信息泄漏。类似于经典的断言,我们演示了如何在并发上下文中检测到信息泄漏。据我们所知,这是第一个这样的工作,使不同的概念,不干涉功能和安全方面使用的整合。虽然这种方法在经典意义上是合理且相对完整的,但它允许使用算法技术,使程序员能够提出泄漏断言,从而检查敏感应用程序中的信息泄漏。
2021-03-03 cs.CR cs.PL
CRIL: A Concurrent Reversible Intermediate Language
提出CRIL,一种并发可逆中间语言,通过扩展RIL并引入多线程进程调用与P-V同步原语,实现了高级并发程序到低级并发语言的保持可逆性翻译,并证明了其操作语义的因果安全与活性。
2023-09-13 cs.PL cs.SE
StarMalloc: A Formally Verified, Concurrent, Performant, and Security-Oriented Memory Allocator
本文提出StarMalloc,一个经形式化验证的并发安全内存分配器,利用Steel框架高效验证,并开发可复用数据结构,经Firefox及10个分配器评估,性能具有竞争力。
2024-03-14 cs.CR cs.PL
Trillium: Higher-Order Concurrent and Distributed Separation Logic for Intensional Refinement
本文提出Trillium分离逻辑框架,通过内涵细化方法强化高阶并发与分布式分离逻辑,支持证明非平凡的安全性和活性属性,并分别实例化出Fairis和扩展Aneris以验证并发与分布式系统的活性及与TLA+模型的细化关系。
2024-08-22 cs.LO cs.PL
Optimal Stateless Model Checking under the Release-Acquire Semantics
我们提出了一个框架,有效地应用无状态模型检验(SMC)的并发程序下运行的释放-获取(RA)片段的C/C++11内存模型。我们的方法是基于探索可能的程序顺序,它定义了线程的指令被执行的顺序,和读取关系,它指定如何读取从写入获得它们的值。这与先前的方法相反,先前的方法也探索可能的相干顺序,即,冲突写入之间的排序。由于意外的测试结果,如程序崩溃或断言违规只依赖于从关系的读取,我们避免了潜在的重要来源的冗余。我们的框架是基于一种新的技术,用于确定是否一个特定的读取关系是可行的RA语义下。我们定义了一个SMC算法,这是可证明的最佳意义上说,它探讨了每个程序的顺序和读取从关系正好一次。这个最优性结果是严格强于以前类似的最优性结果,这也考虑到相干顺序。我们已经在工具Tracer中实现了我们的框架。实验表明,Tracer可以显着快于国家的最先进的工具,可以处理RA语义。
2018-09-10 cs.FL cs.LO cs.PL
A Graph-Based Semantics Workbench for Concurrent Asynchronous Programs
已经提出了许多新颖的程序设计语言和库,它们提供了比线程更易于使用的并发模型。然而,设计成功实现其抽象而不丧失性能或引入意外行为的执行模型是具有挑战性的。SCOOP是一种并发的面向对象的消息传递语言,在其发展过程中,已经提出并实现了多种语义。我们提出了一个“语义工作台”,完全和半自动工具SCOOP,可用于分析和比较程序相对于不同的执行模型。我们证明了它的使用在检查语义的一致性,通过将其应用到一组有代表性的程序,并突出了死锁相关的语言的主要执行模型之间的差异。我们的工作台是基于一个模块化的和参数化的图形转换语义中实现的GROOVE工具。我们将讨论如何利用图转换来原子地对复杂的语言抽象建模,以及如何使用模型的视觉和代数性质来确定合理性。
2016-03-01 cs.DC cs.LO cs.PL
Tailoring Stateless Model Checking for Event-Driven Multi-Threaded Programs
针对事件驱动多线程程序,提出Event-DPOR算法,通过扩展Optimal-DPOR并采用高效冗余检查,指数级提升SMC验证效率并避免不必要探索。
2023-07-29 cs.PL cs.SE
Guidelines for Producing Concise LNT Models, Illustrated with Formal Models of the Algorand Consensus Protocol
Univ. Grenoble Alpes, Inria , Cnrs , Grenoble Inp , Lig(格勒诺布尔阿尔卑斯大学、法国国家信息与自动化研究所、法国国家科学研究中心、格勒诺布尔理工学院、格勒诺布尔信息处理实验室)
本文探讨如何利用LNT语言的特性构建简洁易读的正式模型,以Algorand共识协议为例,展示通过变换将代码行数减少三分之一并提升可读性。
2026-04-06 cs.LO cs.PL cs.SE
A Semantics Comparison Workbench for a Concurrent, Asynchronous, Distributed Programming Language
已经提出了许多高级语言和库,它们为并发、异步和分布式编程提供了新颖且易于使用的抽象。然而,实现它们的执行模型经常会随着时间的推移而改变--无论是为了提高性能,还是为了将它们扩展到新的语言功能--这可能会影响现有程序的行为和安全属性。SCOOP是一种并发面向对象编程的消息传递方法,它已经提出并实现了多个更改,并对其核心抽象的惯用用法产生了明显的影响。我们提出了一个语义比较工作台SCOOP与全自动和半自动的工具,用于分析和比较不同的执行模型或语义的程序的状态空间。我们证明了它的使用,在检查整个语义的属性的一致性,通过将其应用到一组代表性的程序,并突出了死锁相关的差异之间的主要执行模型的SCOOP。此外,我们证明了工作台的可扩展性,通过概括的形式化的执行模型,以支持最近提出的扩展分布式编程。我们的工作台是基于一个模块化的和参数化的图形转换语义中实现的GROOVE工具。我们将讨论如何利用图转换来原子地对复杂的语言抽象建模,如何使用模型的视觉和代数性质来确定合理性,并强调该方法如何应用于类似的语言。
2017-10-11 cs.DC cs.LO cs.PL