【技术实现步骤摘要】
驱动程序中数据竞争检测方法及装置
本专利技术实施例属于计算机操作装置与程序分析
,更具体地,涉及一种驱动程序中数据竞争检测方法及装置。
技术介绍
现代操作装置普遍采用并发编程来最大化多核机器的利用率,提高装置程序的性能。驱动程序也大量使用这种并发性来高效地进行计算机装置内核和硬件的通信。但是,程序的并发执行会带来大量的不确定性,因此驱动程序中也存在一些难以发现的调试和修复的并发问题,如数据竞争。数据竞争发生在多个线程没有采用同步操作的条件下,同时访问同一个内存地址,并且其中至少有一个线程是执行写操作时。数据竞争会导致程序的数据和执行顺序变得不确定,进而导致严重的问题,如空指针解引用、释放后重用等。现有的一些用于检测内核态驱动程序中数据竞争的方法主要分为两类,即一类是静态检测方法,另一类是动态检测方法。其中,静态检测方法由于缺少驱动真实的运行信息通常具有较高的误报率。动态检测方法主要基于采样或锁集合来实现的。基于采样方法的效果严重依赖于采样的频率,如果采样频率过高,则性能开销大;如果采样频率过低,则容易漏掉许多真实的数据竞争。传统的基于锁集合的方法假设所有的共 ...
【技术保护点】
1.一种驱动程序中数据竞争检测方法,其特征在于,包括:当待检测驱动程序运行时,获取所述待检测驱动程序中的共享变量访问和并发执行的函数调用路径组合;从所述共享变量访问中获取至少含有一个锁的共享变量访问,将至少含有一个锁的所述共享变量访问作为潜在竞争访问;将任一所述潜在竞争访问的调用栈和所有所述共享变量访问中任一共享变量访问的调用栈进行组合,判断调用栈组合在所述函数调用路径组合中是否存在,根据判断结果确定所述待检测驱动程序是否存在数据竞争。
【技术特征摘要】
1.一种驱动程序中数据竞争检测方法,其特征在于,包括:当待检测驱动程序运行时,获取所述待检测驱动程序中的共享变量访问和并发执行的函数调用路径组合;从所述共享变量访问中获取至少含有一个锁的共享变量访问,将至少含有一个锁的所述共享变量访问作为潜在竞争访问;将任一所述潜在竞争访问的调用栈和所有所述共享变量访问中任一共享变量访问的调用栈进行组合,判断调用栈组合在所述函数调用路径组合中是否存在,根据判断结果确定所述待检测驱动程序是否存在数据竞争。2.根据权利要求1所述的方法,其特征在于,当待检测驱动程序运行时,获取所述待检测驱动程序中共享变量访问和并发执行的函数调用路径组合的步骤之前还包括:使用Clang编译器对所述待检测驱动程序的源代码进行编译,获取所述待检测驱动程序的中间字节码文件;使用LLVM工具链在所述中间字节码文件中插入外部函数调用;使用所述Clang编译器将插入外部函数调用后的所述中间字节码文件编译为汇编文件;使用GCC编译器将所述汇编文件和所述外部函数调用的定义文件进行编译,获取所述待检测驱动程序的可执行文件;相应地,当待检测驱动程序运行时,获取所述待检测驱动程序中共享变量访问的上下文信息和并发执行的函数调用路径组合的步骤具体包括:加载并运行所述可执行文件,并运行所述待检测驱动程序的工作负载;在所述可执行文件和所述工作负载运行的过程中,通过所述外部函数调用,获取所述待检测驱动程序中的共享变量访问和并发执行的函数调用路径组合。3.根据权利要求2所述的方法,其特征在于,在所述中间字节码文件中插入外部函数调用的步骤具体包括:在所述中间字节码文件中的加锁函数、解锁函数、共享变量读写、函数入口和函数出口位置插入外部函数调用。4.根据权利要求1所述的方法,其特征在于,获取所述待检测驱动程序中的共享变量访问和并发执行的函数调用路径组合的步骤还包括:使用独立的线程记录所述共享变量访问和并发执行的函数调用路径组合;使用写文件缓存机制将所述共享变量访问和并发执行的函数调用路径组合写入日志文件中;使用哈希表对所述日志文件中共享变量访问和并发执行的函数调用路径组合进行去重。5.根据权利要求1-4任一所述的方法,其特征在于,获取所述待检测驱动程序中共享变量访问的步骤具体包括:将所述待检测驱动程序的各函数...
【专利技术属性】
技术研发人员:胡事民,陈秋良,白家驹,
申请(专利权)人:清华大学,
类型:发明
国别省市:北京,11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。