并发性:竞争条件和死锁

为什么并发性很重要?

工程师们越来越多地将多核架构和处理器用于各种高完整性嵌入式应用,如军事航空电子设备或汽车系统,而不仅仅是传统的嵌入式应用,如网络和通信系统。这一趋势在一定程度上是由ADAS和V2V通信等应用程序的性能要求不断提高所推动的。为了利用这种体系结构,您需要考虑多线程。这带来了一系列新的复杂的设计和验证挑战,特别是在确保此类系统的健壮性和安全性时。其中一些挑战甚至存在于仅利用单核进行多任务处理的系统中。

有哪些挑战?

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

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

竞态条件的一个经典示例是两个客户机同时修改服务器上的同一资源的场景,就像银行同时取款的情况一样。请参阅并发计算wiki部分要阅读更多关于此示例的信息。

Polyspace静态分析解决方案

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

死锁

简单的例子说明了Polyspace Bug Finder检测到的死锁和导致死锁的事件跟踪。

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

Polyspace Green -没有竞争条件

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

Polyspace Code Prover™是一个可靠的静态分析工具,可以帮助解决这种复杂的不确定性运行时故障,因为它详尽地验证了所有可能的交织。它还通过考虑最坏的情况来突出潜在的竞争条件。更重要的是,它验证共享资源是否受到临界区的适当保护(用绿色突出显示)。

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

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

死锁img 2

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

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

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

阿莱尼亚·马基公司

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