并发:种族条件和死锁

为什么并发很重要?

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

有什么挑战?

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

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

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

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

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

死锁img.“title=

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

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

Polyspace绿色-没有竞争条件

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

Polyspace Code Prover™是一个很好的静态分析工具,可以帮助解决这种复杂的不确定性运行时故障,因为它会彻底地验证所有可能的交错。它还通过考虑最坏的情况来强调潜在的竞争条件。更重要的是,它验证共享资源何时被临界区适当地保护(用绿色高亮显示它们)。

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

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

死锁img 2“width=

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

使用PolySpace产品,您可下载188bet金宝搏以检测和调试并发缺陷,并还验证多任务操作的可靠性,以确保软件是否稳健。这一示例正在分析共享全局变量使用情况,其中PolySpace产品可以为您提供详细的洞察力,并生成有助于为多任务应用程序的开发和验证活动提供帮助的文物。下载188bet金宝搏

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

Alenia Aermacchi.

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

阿莱尼亚用户故事“src=