并发性:竞争条件和死锁

为什么并发很重要?

除了传统的嵌入式应用(如网络和通信系统),工程师们越来越多地将多核架构和处理器用于各种高完整性的嵌入式应用(如军用航空电子设备或汽车系统)。这一趋势的部分原因是ADAS和V2V通信等应用程序的性能需求不断上升。要利用这种体系结构,您需要考虑多线程。这给设计和验证带来了一系列新的复杂挑战,尤其是在确保此类系统的健壮性和安全性方面。甚至在只使用单个核心进行多任务处理的系统中,也存在一些这样的挑战。

有哪些挑战?

并发编程最复杂的挑战之一是并发线程之间交互的不可预测性。这是因为线程交错是不确定的。测试任何这样的系统都会导致测试用例数量的组合爆炸。这导致了另一个关键挑战:发现bug的测试用例,但无法重现问题,因为没有方法确定和重复事件的确切序列。这使得跟踪控制和数据流以识别根本原因变得困难,并且调试并发问题变得昂贵和耗时。因此,在现实生活中,软件验证和测试错过了并发错误。

即使在单线程嵌入式应用程序中,您也可以看到这些复杂性以中断的形式在与外部感官输入的异步交互中发挥作用。当多个任务访问共享资源(如全局变量)时,您会看到一类新的错误,如竞争条件、数据竞争和死锁。

竞态条件的一个经典示例是这样的场景:两个客户端同时修改服务器上的相同资源,就像同时进行银行提款一样。指的是并发计算维基部分阅读更多关于这个例子的信息。

多元空间静态分析解决方案

Polyspace®工具利用形式化方法和抽象解释技术进行语义分析。Polyspace引擎可以静态地检测并发问题并跟踪控制和数据流,以帮助调试问题的根源。在下面的示例中,当两个任务(bug_deadlock_task1和bug_deadlock_task2)等待另一个任务进入相同的临界区(acquire_sensor())时,会出现死锁。事件跟踪突出显示导致死锁的指令顺序。

简单的示例演示了由Polyspace Bug Finder检测到的死锁以及导致死锁的事件跟踪。

指的是完整的列表Polyspace Bug Finder™可以检测到的缺陷。关于并发错误的另一个新出现的问题是它们对嵌入式系统安全性的影响。诸如CERT C和CWE之类的安全准则对并发缺陷(如竞争条件)给予较高的优先级。

多空间绿色-没有竞争条件

在并发缺陷中,竞争条件可能是最有害的。多年来,竞态条件导致了一些严重的运行时错误故障,比如Therac-25放射治疗机。研究人员发表了一份详细的运行时错误失败调查报告,该错误导致了几名患者的死亡。

Polyspace Code Prover™是一个可靠的静态分析工具,它可以帮助处理如此复杂的非确定性运行时故障,因为它全面地验证了所有可能的交错。它还通过考虑最坏的情况突出了潜在的竞争条件。更重要的是,它验证共享资源何时被关键部分适当地保护(通过用绿色突出显示它们)。

例如,如果您共享了多个线程使用的全局变量,Polyspace Code Prover不仅调用潜在的竞争条件场景(用橙色突出显示它们),而且还以事件跟踪的形式提供特定的事件序列(交错)。

在下面的示例中,全局变量PowerLevel以橙色突出显示,因为它不受多个任务(server1、server2和regulation)的并发访问的保护。变量的读和写操作序列以及与事件跟踪相结合的对数据范围的相应更改在调试这种竞争条件时很有价值。Polyspace Code Prover还以并发访问图的形式提供了详细的控制流,突出显示如下所示的任务和函数调用序列。

变量访问为您提供了全局变量的详细数据范围。

调用图形高亮显示竞争条件。

使用Polyspace产品,您可下载188bet金宝搏以检测和调试并发缺陷,还可以验证多任务操作的可靠性,以确保您的软件是健壮的。这方面的一个例子是分析共享全局变量的使用情况,Polyspace产品可以为您提供详细的见解,并生成有助于多任务应用程序开发和验证活动的工件。下载188bet金宝搏

了解有关Polyspace产品的更多信息。下载188bet金宝搏

阿莱尼亚·马基公司

“对我们来说,基于模型的设计的一个关键优势是能够专注于设计和开发,而不是低级的编码、验证和认证任务。其结果是更高的质量,通过DO-178B认证的软件,以及更快的迭代。”

阿莱尼亚用户故事