论文部分内容阅读
实时系统中的软件安全不仅与软件的功能是否达到预期有关,同时还取决于软件的运行能否满足截止时间要求。随着软件在实时系统中发挥的作用越来越关键,程序的规模和结构也随之变得更加庞大和复杂,致使超时风险及超时损失的严重程度都不断增加。由于在软件开发初期对有失效倾向的模块进行预测,既可以大幅提高软件的质量,又可以降低缺陷的修复成本。因此,应该在系统开发初期便对程序的最坏情况执行时间(Worst-Case Execution Time,WCET)进行快速估计,而后立即将估值反馈至源码以定位性能瓶颈,进而通过源码优化消除瓶颈,实现以较低成本防控超时风险的目的。然而,现有WCET的静态分析方法虽然可以保证估值安全但效率普遍较低,为了避免等待或者频繁切换界面,程序员往往将WCET估计推迟到系统开发后期才进行。加之估值取自目标代码因而难以映射到源码层次,以及基于目标代码的传统性能优化不能有效降低WCET等问题,给早期超时风险的预警及防控造成了极大困难。为此,本文开展面向软件开发初期的WCET快速估计与优化方法研究,对于超时风险的早期预警与防控,降低实时系统的开发成本、增强系统可靠性以及保障软件安全,具有重要的理论意义和应用价值。针对现有方法无法实时给出程序的WCET估值,因而难以与开发进程同步并对超时风险进行实时预警的问题,研究并提出一种基于指令剖面的WCET快速估计方法。将程序的模拟执行时间、动态指令类型数与其目标代码的模糊哈希值相结合,设计了面向WCET非线性估计的程序特征模型。在此基础上,开发了静态相似度与动态相似度相结合的训练样本优选算法。当基于IPET的WCET分析方法(以下简称“IPET方法”)可用时,提取程序的静态和动态特征,与其WCET估值一并存入样本库。若IPET方法在预定时间内没能给出分析结果,则依据静态相似度与动态相似度从样本库中优选训练样本,并采用最小二乘支持向量机进行学习与非线性预测。实验结果表明,本文方法的平均效率高,能够伴随编译过程快速估计程序整体的WCET,且对估计精度的影响较小,适用于软件开发初期的超时风险实时预警。针对现有方法不支持在源码层次显示函数或语句的WCET以及存在过高估计,因而难以快速定位代码性能瓶颈的问题,研究并提出一种层次化的WCET快速估计方法。使用控制流树计算函数或语句的WCET,并利用字节码保留的层次结构信息将WCET反馈至源码。分析了现有方法存在过高估计的原因。在此基础上,提出了不合理高估的判定条件,并与基于控制流树的WCET估计算法融合,在快速估计WCET的同时统计高估风险数据。设计了WCET反馈与超时风险预警机制,依据时间预算判定代码是否超时,一旦发现超时便触发相应警示。实验结果表明,本文方法不仅能够快速估计函数或语句的WCET并在源码层次予以显示,而且能够自动判定不合理的高估,进而减少确认时效缺陷的时间开销,提高代码性能瓶颈的定位效率。针对现有方法没有考虑复杂程序中非正交嵌套循环的局部最大迭代次数在转换为内外层循环的相对约束关系时出现的不可整除情况,因而导致WCET被过高估计进而误导程序员盲目优化程序代码的问题,研究并提出一种基于局部相对约束的WCET高估值修正方法。从处理器行为分析和控制流分析两个方面剖析了现有方法出现过高估计的原因。在此基础上,给出判定含非正交嵌套循环程序存在WCET过高估计的必要条件。针对此类特殊高估,设计了基于局部相对约束的WCET过高估值修正算法,由内至外逐层修正最坏情况执行路径上非分支部分中非正交嵌套循环的相对约束关系。实验结果表明,本文方法能够在确保WCET安全估计的前提下,有效降低在含非正交嵌套循环程序上出现的WCET过高估计,避免不必要的代码优化代价。针对现有方法优化WCET对代码后期的可维护性影响大且可移植性差,不能以较小代价有效防控超时风险的问题,研究并提出一种基于不变路径的源码重构WCET优化方法。该方法利用标注反馈技术在源码上识别WCEP及不变路径。而后,依据不变路径以及循环对WCET优化的影响程度,对程序源码进行了优化热点区域的划分。同时,针对WCET优化可能产生克隆代码以致影响软件后期维护的问题,通过克隆元素的数量与克隆代码之间的距离计算维护代价,并据此设计了WCET源码重构优化策略。实验结果表明,本文方法能够以较小的可维护性代价降低程序的WCET,进而防控软件的超时风险,且优化结果具有可移植性。综上所述,本文的研究为解决如何在软件开发初期快速估计及优化WCET,进而检测代码中的超时风险并对其进行有效防控,确保软件满足执行时间约束等科学问题提供了新的思路与方法。有利于实时系统开发过程中的软硬件协同设计,有益于降低实时系统的开发成本并提高系统的软件安全性。