当前位置: 首页 > 专利查询>清华大学专利>正文

一种污染变量跟踪方法技术

技术编号:7514938 阅读:193 留言:0更新日期:2012-07-11 21:14
本发明专利技术公开了一种污染变量跟踪方法,涉及设备驱动领域。所述方法包括:找到第一污染变量,存入结果图中,将其所在的函数存入待处理函数队列;取出一个待处理函数,判断其中是否存在新的第二污染变量,如果是,将新的第二污染变量和相应的赋值关系存入结果图,并将待处理函数放回,执行步骤D;否则,直接执行步骤D;判断是否存在新的第三污染变量,如果是,将新的第三污染变量和相应的赋值关系存入结果图中,并将相应的函数放入待处理函数队列中,执行步骤E;否则,直接执行步骤E;判断待处理函数队列是否为空,如果是,输出结果图;否则,执行步骤C。所述方法可以提高设备驱动和硬件设备的可靠性。

【技术实现步骤摘要】

本专利技术涉及设备驱动
,特别涉及。
技术介绍
可靠性是操作系统的一个重要目标。Windows XP操作系统85%的失效是由设备驱动造成的。Linux操作系统设备驱动失效的频率是其它部分的3-7倍以上。研究表明,设备驱动失效是导致操作系统失效的主要原因。对Windows服务器的研究发现,8%的系统的存储设备或网络适配器会失效。9%的微软的服务器由于硬盘或网络适配器的失效被迫重新启动。因此,在设备驱动中检查设备的错误对提高操作系统的可靠性具有重要意义。硬件设备发生故障时会将错误的寄存器值提供给设备驱动,从而导致设备驱动工作异常。在异常情况下,人们将与硬件设备寄存器中读出的值有关的变量称之为污染变量。污染变量(Tainted Variable)是操作系统领域顶级会议SOSP的2009年的文章《Tolerating Hardware Device Failures in Software》中提出的一个概念,原文是指从硬件设备寄存器中读出的数据,以及和这些数据相关的变量(从硬件设备寄存器中读出的数据会保存到变量中,首先这些变量被称之为污染变量,通过将这些变量赋值给其它变量,使“其它变量”的值为从硬件设备寄存器中读出的数据,“其它变量”也是污染变量)。对污染变量的赋值关系进行跟踪对于提高设备驱动和硬件设备的可靠性具有重要意义。
技术实现思路
(一)要解决的技术问题本专利技术要解决的技术问题是如何提供,以便提高设备驱动和硬件设备的可靠性。( 二 )技术方案为解决上述技术问题,本专利技术提供,其包括步骤A 将直接读取目标设备寄存器数据的函数作为污染函数存储到污染函数库中,根据目标设备驱动源代码建立变量赋值关系图、函数调用关系图和函数被调用关系图,创建用于存放污染变量及相应赋值关系的结果图和用于存放待处理函数的待处理函数队列;B:根据所述污染函数库,找到直接被所述污染函数赋值的第一污染变量,将所述第一污染变量存入所述结果图中,将所述第一污染变量所在的函数存入所述待处理函数队列;C:从所述待处理函数队列中取出一个待处理函数,根据所述结果图中已有的污染变量和所述变量赋值关系图,判断所述待处理函数中是否存在新的第二污染变量,如果存在,将所述新的第二污染变量和相应的赋值关系存入所述结果图中,并将所述待处理函数重新放回所述待处理函数队列,然后执行步骤D ;否则,直接执行步骤D ;D 根据所述结果图中已有的污染变量、所述函数调用关系图和函数被调用关系图,判断是否存在由于函数调用或者被调用而产生的新的第三污染变量,如果存在,将所述新的第三污染变量和相应的赋值关系存入所述结果图中,并将发现所述新的第三污染变量的函数放入所述待处理函数队列中,然后执行步骤E ;否则,直接执行步骤E ;E 判断所述待处理函数队列是否为空队列,如果是,输出所述结果图;否则,执行所述步骤C。优选地,所述步骤A具体包括步骤Al 将直接读取目标设备寄存器数据的函数作为污染函数存储到污染函数库中;A2:分析目标设备驱动源代码,根据所述目标设备驱动源代码中的变量和函数信息,建立变量赋值关系图、函数调用关系图和函数被调用关系图;A3:创建用于存放污染变量及相应赋值关系的结果图和用于存放待处理函数的待处理函数队列。优选地,所述步骤D具体包括步骤Dl 根据所述结果图中已有的污染变量和所述函数调用关系图,判断是否存在第一实参变量被属于已有的污染变量的第一形参变量所污染,如果存在,将所述第一实参变量和相应的赋值关系存入所述结果图中,并将发现所述第一实参变量的函数放入所述待处理函数队列中,然后执行步骤D2 ;否则,直接执行步骤D2 ;D2:根据所述结果图中已有的污染变量和所述函数被调用关系图,判断是否存在第二形参变量被属于已有的污染变量的第二实参变量所污染,如果存在,将所述第二形参变量和相应的赋值关系存入所述结果图中,并将发现所述第二形参变量的函数放入所述待处理函数队列中,然后执行步骤E ;否则,直接执行步骤E。优选地,所述变量赋值关系图是以变量和代码行号为节点,以赋值关系为边的有向图。优选地,所述函数调用关系图是以函数为节点,以调用关系为边的有向图。优选地,所述函数被调用关系图是以函数为节点,以被调用关系为边的有向图。优选地,所述结果图是以污染变量加行号为节点,以赋值关系为边的有向图。优选地,所述待处理函数队列按照先进先出原则管理其中的待处理函数。(三)有益效果通过本专利技术实施例所述污染变量跟踪方法,可以获得污染变量的赋值路径,进而可以对设备驱动代码进行检查和修正,最终可以提高设备驱动和硬件设备的可靠性。附图说明图1是本专利技术实施例所述的污染变量跟踪方法流程图;图2是本实施例所述方法的驱动代码示意图;图3是对应图2中代码的变量赋值关系图;图4是对应图2中代码的函数调用关系图;图5是对应图2中代码的函数被调用关系图;图6是本专利技术实施例所述方法的另一段驱动代码示意图。具体实施例方式下面结合附图和实施例,对本专利技术的具体实施方式作进一步详细描述。以下实施例用于说明本专利技术,但不用来限制本专利技术的范围。图1是本专利技术实施例所述的污染变量跟踪方法流程图。如图1所示,所述方法包括步骤A 将直接读取目标设备寄存器数据的函数作为污染函数存储到污染函数库中,根据目标设备驱动源代码建立变量赋值关系图、函数调用关系图和函数被调用关系图,创建用于存放污染变量及相应赋值关系的结果图和用于存放待处理函数的待处理函数队列。所述步骤A具体包括步骤Al 将直接读取目标设备寄存器数据的函数作为污染函数存储到污染函数库中。 图2是本实施例所述方法的驱动代码示意图。如图2所示,其中第3行的函数readl (port) 直接读取目标设备寄存器数据,即属于污染函数,被赋值的变量a即为污染变量。A2:分析目标设备驱动源代码,根据所述目标设备驱动源代码中的变量和函数信息,建立变量赋值关系图、函数调用关系图和函数被调用关系图。图3是对应图2中代码的变量赋值关系图;图4是对应图2中代码的函数调用关系图;图5是对应图2中代码的函数被调用关系图。如图3所示,所述变量赋值关系图是以变量和代码行号为节点,以赋值关系为边的有向图。如图4所示,所述函数调用关系图是以函数为节点,以调用关系为边的有向图。如图5所示,所述函数被调用关系图是以函数为节点,以被调用关系为边的有向图。A3 创建用于存放污染变量及相应赋值关系的结果图和用于存放待处理函数的待处理函数队列。所述结果图是与所述赋值关系图基本相同的有向图,其不同之处仅在于是以污染变量加行号为节点。所述结果图在开始时不包含任何节点,后续随着污染变量被发现,逐渐被记录到所述结果图中,并最终作为污染变量跟踪结果输出。述待处理函数队列按照先进先出原则管理其中的待处理函数。B:根据所述污染函数库,找到直接被所述污染函数赋值的第一污染变量,将所述第一污染变量存入所述结果图中,将所述第一污染变量所在的函数存入所述待处理函数队列。本实施例中将所述污染变量分为三种第一污染变量、第二污染变量和第三污染变量。 其中,第一污染变量是被污染函数直接赋值产生的,如图2代码第3行的变量a。C:从所述待处理函数队列中取出位于队列最前端的一个待处理函数,根据所述结果图中已有的污染变量和所述变量赋值关系图,判断所述待处理函数中是否本文档来自技高网...

【技术保护点】

【技术特征摘要】

【专利技术属性】
技术研发人员:王瑀屏胡事民马超阎栋
申请(专利权)人:清华大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术