Correct concurrent behaviour is important in understanding how components will act within certain conditions. In this work. we analyse the behaviour of shared communicating channels within a coorporatively scheduled runtime. We use the refinement checking and modelling tool FDR to develop both specifications of how such shared channels should behave and models of the implementations of these channels in the cooperatively scheduled language ProcessJ. Our results demonstrate that although we can certainly implement the correct behaviour of such channels, the outcome is dependant on having adequate resources available to execute all processes involved. We conclude that modelling the runtime environment of concurrent components is necessary to ensure components behave as specified in the real world.
论文ID : 2510.11751标题 : Verifying Correctness of Shared Channels in a Cooperatively Scheduled Process-Oriented Language作者 : Jan Pedersen (University of Nevada Las Vegas), Kevin Chalmers (Ravensbourne University)分类 : cs.PL (Programming Languages)发表时间 : 2025年10月12日 (arXiv preprint)论文链接 : https://arxiv.org/abs/2510.11751 本文分析了协作调度运行时环境中共享通信通道的行为。研究使用形式化验证工具FDR开发了共享通道行为规范和ProcessJ语言中通道实现的模型。结果表明,虽然可以实现通道的正确行为,但结果依赖于有足够的资源来执行所有相关进程。研究得出结论:建模并发组件的运行时环境对于确保组件在现实世界中按规范行为是必要的。
并发软件正确性的重要性 :并发系统的正确行为对于理解组件在特定条件下如何运行至关重要。传统的测试方法虽然被广泛使用,但可能无法发现所有潜在的并发错误。形式化验证的必要性 :作者以火星探测器软件为例,说明了一个简单的死锁错误可能需要等待800万秒(超过90天)才有50%的概率被测试发现,而使用CSP和FDR进行形式化验证可以立即发现此类错误。运行时系统验证的挑战 :由于大量程序构建在编程语言的运行时系统之上,确保运行时系统无错误且按规范行为变得至关重要。忽略执行环境 :传统的基于通道系统验证方法没有建模运行时系统、执行系统、硬件等因素,假设就绪事件会保持可用直到被调度。资源稀缺性假设 :标准建模方法假设事件可以立即发生,意味着执行事件时资源是可用的,但这种极端假设在现实中并不成立。调度环境的影响 :进程在就绪队列末尾必须等待被调度,其事件不会立即可用,但传统方法未考虑这种情况。ProcessJ是一个基于CSP语义的进程导向编程语言,采用协作调度并运行在JVM上。本文旨在验证ProcessJ运行时中共享通道实现的正确性,特别关注调度环境对通道行为的影响。
验证了ProcessJ共享通道实现的正确性 :证明了使用现有协作调度器的ProcessJ共享通道实现是正确的,通过CSP翻译和通用共享通道模型的细化检查验证了其按预期行为。开发了共享通道规范的扩展代数证明 :提供了共享通道规范确实表现为CSP共享通道的形式化证明。进一步证明了资源与活跃进程的关系 :再次展示了可用资源和活跃进程数量对满足规范的关系,证明要在两个方向上获得规范与模型之间的细化,可用调度器数量必须等于或大于系统中的进程数量。本文的核心任务是验证ProcessJ语言中共享通道实现的正确性。具体包括:
输入 :ProcessJ共享通道的Java实现代码和CSP规范输出 :验证结果,证明实现是否符合规范约束条件 :考虑协作调度环境下的资源限制使用Communicating Sequential Processes (CSP)作为形式化建模语言:
进程 :抽象组件,由其执行的事件定义事件 :原子的、同步的、瞬时的通信操作通道 :进程间通信的媒介SCHEDULER =
rqdequeue?p → -- 出队一个进程
run.p → -- 运行它
yield.p → -- 等待让出
SCHEDULER -- 递归
SCHEDULE_MANAGER =
schedule?pid → -- 等待调度事件
rqenqueue!pid → -- 将进程放入运行队列
SCHEDULE_MANAGER -- 递归
每个进程需要监视器、运行标志和就绪标志:
PROCESS(p) =
VARIABLE(ready.p, true)
||| VARIABLE(running.p, false)
||| MONITOR(claim_process.p, release_process.p)
Many-to-One通道 :多个写进程,一个读进程One-to-Many通道 :一个写进程,多个读进程Many-to-Many通道 :多个写进程,多个读进程与传统方法不同,本文在验证过程中显式建模了协作调度器,这使得能够发现仅在特定调度条件下才出现的问题。
通过变化调度器数量,研究了不同资源配置下系统行为的变化,发现了资源充足性与正确性的关系。
ProcessJ代码 → Java代码 → CSP模型 建立了完整的翻译链,确保验证结果的可靠性 FDR (Failures-Divergences Refinement) :CSP细化检查工具CSPM :机器可读的CSP版本使用三种语义模型进行分析:
Traces模型 :基于外部观察行为Stable Failures模型 :处理进程可能拒绝的事件Failures-Divergences模型 :处理潜在的活锁场景进程配置 :1-2个写进程,1-3个读进程的各种组合调度器数量 :1到4个调度器通道类型 :一对多、多对一、多对多共享通道| 通道类型 | 进程配置 | 总进程数 | 调度器数量 |||||
|----------|----------|----------|--|--|--|--|
| | | | 1| 2| 3| 4|
| 一对多 | 1写-2读 | 3 | T| T| F| F|
| 一对多 | 1写-3读 | 4 | T| T| T| F|
| 多对一 | 2写-1读 | 3 | T| T| F| F|
| 多对一 | 3写-1读 | 4 | T| T| T| F|
| 多对多 | 2写-2读 | 4 | T| T| T| F|
符号说明 :
T = 通过traces细化检查 F = 通过failures细化检查 ✗ = 细化检查失败 资源充足性定理 :当调度器数量等于或大于进程总数时,可以在failures模型的两个方向上实现细化。资源不足的影响 :调度器不足时,只能获得traces细化而非failures细化 这不意味着系统会死锁,而是某些traces不再可实现 调度队列的影响 :运行队列对进程施加自然顺序,当调度器不足时,某些进程的接受集不会包含在系统整体接受集中。CSO和JCSP验证 :之前的工作验证了其他系统的运行时,但忽略了执行环境SPIN模型检查 :其他系统使用类似的验证方法,但通常假设抢占式调度occam-π调度器 :ProcessJ调度器类似于occam-π的多处理器协作调度器异步/等待模式 :协作多任务在JavaScript、Python、C++和Rust中越来越受欢迎首次考虑调度环境 :在验证中显式建模协作调度器发现调度相关问题 :能够检测仅在特定调度条件下出现的活锁等问题资源感知验证 :量化了资源需求与正确性的关系实现正确性 :ProcessJ的共享通道实现在有足够调度器的情况下是正确的。资源依赖性 :正确行为依赖于有足够的调度资源来执行所有相关进程。建模必要性 :建模运行时环境对确保组件在现实世界中按规范行为是必要的。锁的使用 :当前实现大量使用锁/监视器,可能影响并发性和性能。调度器需求 :需要与进程数量相等的调度器数量可能在实际应用中不现实。验证复杂性 :随着进程数量增加,验证的状态空间会快速增长。无锁实现 :使用原子变量替代锁 实现无等待队列结构 开发支持比较交换操作的CSP模型 简化规范 :开发轻量级的CSP模型构建方法 研究在不同调度条件下ProcessJ的行为 调度器优化 :研究是否可以用少于进程数量的调度器实现failures细化 分析不同程序的调度器需求 方法创新性 :首次在形式化验证中考虑协作调度环境 建立了完整的从实现到规范的验证链 理论贡献 :提供了共享通道规范的严格代数证明 量化了资源需求与正确性的关系 实用价值 :验证了实际运行时系统的正确性 为其他协作调度系统提供了验证方法 实验充分性 :测试了多种通道配置和调度器数量 使用了严格的CSP/FDR验证方法 可扩展性问题 :验证复杂度随进程数量指数增长 需要大量调度器可能限制实际应用 性能考虑不足 :适用范围限制 :主要针对ProcessJ语言 对其他协作调度系统的适用性需要进一步验证 学术贡献 :为程序语言和形式化方法领域提供了新的验证思路 推动了考虑执行环境的验证方法发展 实用价值 :提高了ProcessJ运行时的可靠性 为其他语言运行时验证提供了参考 可复现性 :提供了完整的CSP代码和测试脚本 验证过程和结果可以被独立复现 进程导向编程语言 :特别适用于基于CSP语义的语言运行时验证协作调度系统 :可应用于其他使用协作调度的并发系统关键系统开发 :适用于对正确性要求极高的并发系统开发本文引用了51篇相关文献,主要包括:
CSP基础理论 :Hoare的经典CSP著作和相关理论形式化验证工具 :FDR工具和相关验证方法并发编程语言 :JCSP、occam-π、Go、Erlang等语言的相关研究调度算法 :互斥算法和并发算法的相关工作作者前期工作 :关于ProcessJ运行时验证的系列研究总结 :本文在形式化验证领域做出了重要贡献,特别是在考虑执行环境的并发系统验证方面。虽然存在一些局限性,但其方法和发现对于提高并发系统的可靠性具有重要价值。