并发性:竞争条件和死锁

为什么并发很重要?

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

有哪些挑战?

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

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

竞争条件的一个经典示例是,两个客户机同时修改服务器上的同一资源,就像同时取款的情况一样。指的是并发计算Wiki部分了解更多关于这个例子的信息。

PolySpace静态分析解决方案

波尔盖斯®工具利用正式方法抽象解释的语义分析。PolySpace引擎可以静态地检测并发问题并跟踪控件和数据流以帮助调试问题的根本原因。在以下示例中,您最终将死锁为两个任务(Bug_deadlock_Task1和Bug_Deadlock_Task2)等待另一个,进入相同的关键部分(获取_Sensor())。事件跟踪突出显示导致死锁的指令顺序。

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

指的是完整列表Polyspace Bug Finder™可以检测到的缺陷。与并发性bug有关的另一个新出现的问题是它们对嵌入式系统安全性的影响。安全指南,如CERT C和CWE,对并发缺陷给予了高度优先级,如种族条件

波尔纹绿色 - 没有种族条件

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

PolySpace Code Prover™是一个声音静态分析工具,可以帮助解决此类复杂的非季度运行时间故障,因为它令人遗憾地验证所有可能的交织。它还通过考虑最糟糕的情况来突出潜在的竞争条件。更重要的是,它验证共享资源是否受关键部分的适当保护(通过以绿色突出显示它们)。

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

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

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

调用图突出显示竞争条件。

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

以了解更多Polyspace产品。下载188bet金宝搏

阿莱尼亚·马基公司

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

艾琳尼亚用户故事