理论计算机科学电子笔记174(2007)113-116www.elsevier.com/locate/entcs自动化技术生存(否则)致命的软件错误马丁·里纳德麻省理工学院电子工程与计算机科学系Cambridge,MArinard@csail.mit.edu摘要我们提出了一套自动化技术,使软件系统能够生存,否则致命的错误,如内存泄漏,无限循环,和寻址错误。保留字:面向可接受性计算,失效不经意计算,生存性1致命软件错误软件系统中的许多错误直到系统部署到生产使用中才显现出来。在这种情况下,致命错误可能会产生特别严重的后果,因为它们可能会完全拒绝用户提供程序设计提供的任何服务。处理错误的标准方法是将问题通知产生系统的组织,开发人员调查该问题以发现并纠正错误,然后发布修正了错误的补丁或新版本。一系列问题使得这种方法不是最佳的:• 错误通知:在许多情况下,软件可能是自主执行的,与生产它的组织没有联系;在其他情况下,软件的用户可能不愿意将错误通知生产软件的组织(例如,因为通知组织错误可能会泄露用户更喜欢保密的信息)。在这些情况下,以及其他情况下,生产软件的组织甚至可能永远不会意识到错误。• 错误纠正延迟:任何涉及开发人员维护软件的过程都会导致不可避免的延迟,因为开发人员会调查错误,纠正错误。1571-0661 © 2007 Elsevier B. V.在CC BY-NC-ND许可下开放访问。doi:10.1016/j.entcs.2006.12.033114米Rinard/Electronic Notes in Theoretical Computer Science 174(2007)113包含错误的代码,并验证更正。在此期间,系统的用户必须等待维护过程完成。例如,在控制不稳定物理现象的实时系统中以及在不能容忍大量停机时间的商业应用中,这些延迟可能是特别不能容忍的• 分发困难:一旦错误得到纠正,必须将纠正后的版本分发给其用户。在无法连接到纠正错误的组织的嵌入式系统中,或者在部署新版本涉及大量系统管理活动的情况下,这种分发可能特别成问题。• 错误再现:错误可能只在某些操作环境中表现出来,这使得调查错误的开发人员很难再现错误。• 新的错误或异常:尝试纠正错误可能会引入新的错误或改变软件的行为,从而禁用系统的其他部分或系统的其他用途总之,所有这些问题提供了一个强大的动力,开发和部署技术,使系统能够继续执行,否则致命的错误。在许多情况下,这种激励足够强大,使用户愿意承担功能受损甚至不可接受的执行的风险,以换取可以满足其需求的继续执行的确定性。2存活(否则)致命软件错误我们开发了几种技术,共同消除了某些致命错误的可能性:• 强制循环终止:无限循环是致命错误的一个来源--它们可以阻止控制流通过循环执行程序的其他关键部分我们的无限循环消除技术简单地通过观察成功的执行来学习每个循环可能执行的迭代次数的合理界限,然后如果每个循环的迭代次数大大超过其合理的迭代界限,则退出每个循环这种技术的潜在缺点是它可能会过早地退出循环;优点是它完全消除了无限循环的可能性。• 强制递归终止:无限递归是致命错误的另一个潜在来源,因为它们会耗尽堆栈空间。我们的无限递归消除技术简单地限制堆栈的大小,然后立即返回任何试图超过此界限的过程调用。潜在的缺点是它可能会过早地终止递归;优点是它可以消除其他致命的无限递归。• 死锁消除:我们的死锁消除技术只是释放锁,直到任何死锁被消除。潜在的缺点是M. Rinard/Electronic Notes in Theoretical Computer Science 174(2007)113-116115由于对共享数据的非同步访问而引入竞争条件;优点是消除死锁。• 内存泄漏消除:内存泄漏可能会导致程序失败,因为它耗尽了它的地址空间。我们的内存泄漏消除算法只是为可能泄漏已分配内存的分配站点分配一个固定大小的缓冲器。然后,它从该缓冲器中循环分配数据。潜在的缺点是该技术可能会覆盖实时数据;优点是消除了该站点上的任何内存泄漏。• 资源泄漏消除:内存只是系统成功执行所需系统可能还需要文件句柄、互斥锁、条件变量和其他资源。我们的资源泄漏消除算法应用了我们的内存泄漏消除思想的一般化潜在的策略包括最近最少使用的重新分配和尝试估计重要性并以相反的重要性顺序重新分配资源的策略。• 无效寻址消除:越界写入可能导致致命的地址空间损坏;越界读取可能导致程序尝试访问地址空间的无效部分我们的无效寻址消除技术(也称为故障无关计算)执行边界检查,以丢弃越界写入并为越界读取制造任意值。潜在的缺点是程序可能没有准备好使用制造的读取值进行操作;优点是消除了作为致命错误的直接原因的越界访问。由于所有这些技术都以潜在的不可预测的方式改变程序的执行,因此似乎经验调查是探索它们可能对执行产生的潜在影响的唯一有效方法。我们已经对其中几种技术进行了这样的调查。我们的研究结果表明,软件系统通常容忍这些技术可以引入的扰动。总体结果通常是可接受的执行,在某些情况下,服务质量相对较好。引用[1] H. Nguyen和M.里纳德使用循环内存分配来消除内存泄漏。技术报告MIT-LCS-TR-1008,MIT计算机科学实验室,2005年10月。[2] M.里纳德 面向可接受 性的计算。 2003 年ACM SIGPLAN面向对 象编程系统 、语言和 应用程序会议指南(OOPSLA '03Companion)。2003年10月在加利福尼亚州阿纳海姆举行的会议。[3] M.里纳德角卡达尔湾Dumitran,D. Roy和T. Leu.一种动态技术,用于消除缓冲器溢出漏洞(和其他内存错误)。2004年计算机安全应用年会论文集,图森,亚利桑那州,2004年12月。[4] M.里纳德角卡达尔湾Dumitran,D.罗伊,T. Leu和Jr. W. 毕比 通过故障无关计算增强服务器可用性和安全性。第六届操作系统设计与实现研讨会论文集,旧金山,加利福尼亚州,2004年12月。116米Rinard/Electronic Notes in Theoretical Computer Science 174(2007)113[5] M.里纳德角Cadar和H.阮。探索可接受性信封。2005年ACM SIGPLAN面向对象编程系统、语言和应用程序会议指南(OOPSLA '05 Companion)。2005年10月在加利福尼亚州圣地亚哥举行的会议。