Linux内核访存错误动态检测工具UniPro的设计与实现

来源 :北京大学 | 被引量 : 0次 | 上传用户:fr20899
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
访存错误是一种危害严重却又难以定位的软件错误,对软件的可靠性构成严峻挑战,而在操作系统内核中,由于权限和内存划分问题,导致访存错误的发现和定位更加困难。由于设备驱动与操作系统内核共享内核地址空间,具有对内核地址空间的读、写和执行权限,使得设备驱动的设计和实现漏洞很容易造成对内核其它数据结构的错误访问或篡改,从而导致操作系统出错甚至崩溃。因此,快速定位和解决设备驱动中的访存错误对提高操作系统可靠性具有重要意义。  本文从设备驱动开发和调试的实际需求出发,在调研多种访存错误检测工具的基础上,面向UniCore64体系结构和PKUnity-4D系统芯片,设计并实现了一种Linux内核访存错误动态检测工具UniPro,用来检测设备驱动在运行过程中访问不属于自己的内存的错误。UniPro的设计思想是将驱动使用的地址空间与内核使用的地址空间进行隔离,在不影响驱动和内核正常运行的前提下,利用分离的页表机制和缺页异常机制对两者之间的控制流和数据流进行实时监控,捕获可能产生错误的访存行为。其主要工作包括:一、确定驱动使用的所有地址空间,并为其专门维护一套与内核页表具有相同虚实地址转换关系的页表,通过配置页表项中的权限位使驱动不能对内核地址空间进行直接访问;二、利用缺页异常捕获并记录驱动访问内核地址空间的行为,同时通过切换页表保证控制流在驱动和内核之间的正常传递,通过修改页表权限保证数据在异常处理结束后可被正确访问;三、分析被捕获的访存行为的发生地点和发生原因,根据驱动的运行状态和实际访存需求,判断该访存行为是否存在错误。  本文基于UniCore-3处理器FPGA原型验证系统对UniPro进行了功能验证和实际应用。实验表明,UniPro在不影响内核和驱动正常运行前提下,成功检测到了人工注入的访存错误。在对DE2显卡驱动的检测和分析中,UniPro成功定位并解决了DE2显卡驱动访问其它地址空间的访存错误,为调试人员定位和解决设备驱动中的访存错误提供了强有力的支持。  
其他文献
近年来,为了提供更丰富的互联网交互功能,Web应用程序广泛使用JavaScript作为客户端编程语言,JavaScript程序的的执行性能变得日趋重要,JavaScript引擎的性能优化成为当今浏览器
引文是任何论文以及书籍必不可少的组成部分,是作者阐述已有知识时对原作的一种尊重,同时方便读者追本溯源,了解知识的来龙去脉。然而,随着科研的深入,科研工作者数量的增加,论文的
当前,随着Internet应用的不断广泛,企业B2B、B2C业务的不断发展,使得企业迫切需要一种能够良好支撑企业种类繁多的应用系统集成的软件平台.工作流管理系统作为一种支持企业过
该文工作的主要背景是中国科学院"十五"信息化建设重大项目一一科学数据库及其应用系统.科学数据库经过近二十年的发展,数据资源的规模和深度不断扩展,在数据规范和管理等方
Java语言在工业级应用开发中被广泛使用,使用该语言编写的程序主要通过Java虚拟机执行。虚拟机在运行时动态生成二进制代码,因而能够更好地发掘代码的动态信息,有效地在运行性能
该文在研究借鉴国内外的信任机制的典型解决方法的基础上,给出了一套包括Peer行为评价,信任信息共享、信任策略三部分的信任机制解决方案.并在Linux下完成了原型系统的开发,
该论文第一章是绪论.介绍了课题的来源,目的和意义.以及课题的主要内容和章节安排.第二章介绍了Java系统跨平台实现的相关领域.对Java语言、Java虚拟机、Linux操作系统、Java
通过对需求工程的研究,人们提出了很多种需求工程方法和工具,一些方法和工具已经比较成熟,尽管如此,现有的需求工程工具离实际应用还有较大的差距.人们使用需求管理工具来管
MVC体系结构是一种非常优秀的设计模式之一。它降低了处理和显示数据的对象间的偶合性,将逻辑与非逻辑功能部分隔离开,并且这一概念在基于WEB方式的多层应用程序领域中得以广泛
近年来,以Internet为代表的信息技术迅速席卷全球,在计算、通信、商务等领域都引发了引人注目的变革.从电话拨号到ISDN,从DDN到ADSL,从WAP到GPRS,网络正以各种各样的方式进入