并发:种族条件和死锁

为什么并发很重要?

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

有什么挑战?

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

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

竞争条件的一个经典示例是两个客户端同时修改服务器上相同资源的场景,如同时助行的情况下。参考并发计算维基部分阅读有关此示例的更多信息。

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

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

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

参考完整的列表PolySpace Bug Finder™可以检测的缺陷。另一个关于并发错误的新出现问题是它们对嵌入式系统安全的影响。证书C和CWE等安全指南均优先考调并发缺陷,例如竞争条件。

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

在并发缺陷中,种族条件可能是最有害的。比赛条件一直负责多年来的一些严重的运行时错误故障,例如Therac-25放射治疗机。研究人员公布了对负责几名患者死亡的运行时错误失败的详细调查。

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

例如,如果您已共享多个线程使用的全局变量,则PolySpace代码普罗文不仅调用了潜在的竞争条件方案(突出显示橙色),但它还以事件的形式提供特定的事件序列(交织)痕迹。

在以下示例中,全局变量PowerLevel以橙色突出显示,因为它不会受到多个任务(Server1,Server2和Tregulate)的并发访问。变量上的读写操作的序列和与事件迹线连交的数据范围的相应变化在调试此类竞赛条件时是有价值的。PolySpace代码先驱进一步提供了并发访问图形式的详细控制流程,突出显示了如下所示的任务和函数调用的序列。

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

呼叫图突出了竞争条件。

使用PolySpace产品,您可s manbetx 845以检测和调试并发缺陷,并验证多任务操作的可靠性,以确保您的软件是强大的。这是一个例子正在分析共享全局变量使用情况,其中PolySpace产品可以为您提供详细的洞察力,并生成有助于为多任务应用程序的开发和验证活动提供帮助的文物。s manbetx 845

了解有关PolySpace产品的更多信息。s manbetx 845

Alenia Aermacchi.

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

阿莱尼亚用户故事“src=