[发明专利]面向异构平台的多层次存储结构内存检测方法有效
申请号: | 201910903842.0 | 申请日: | 2019-09-24 |
公开(公告)号: | CN112631893B | 公开(公告)日: | 2022-11-15 |
发明(设计)人: | 武文浩;沈莉;王飞;肖谦;管茂林;周文浩 | 申请(专利权)人: | 无锡江南计算技术研究所 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 苏州创元专利商标事务所有限公司 32103 | 代理人: | 王健 |
地址: | 214083 江苏*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 面向 平台 多层次 存储 结构 内存 检测 方法 | ||
1.一种面向异构平台的多层次存储结构内存检测方法,其特征在于:基于异构众核处理器的编译器和运行时库,包括以下步骤:
S1、实现自定义动态运行时库,提供接口函数,主核、从核通过接口函数,调用自定义动态运行时库,在该自定义动态运行时库中实现内存检测及相关工作,具体过程如下:
S11、在内存映射的过程中,建立阴影内存,阴影内存与主存之间的关系是:N=ChooseBlock(mem);shadow=((mem-membeg[N])3)+shadowbeg[N],即阴影内存与主存之间存在一一对应的映射关系;
S12、基于多层次存储结构,自定义动态运行时库按访问权限和功能特性,对主存和阴影内存的虚拟空间进行重新划分,把虚拟空间分为只读数据和共享数据段、动态空间段、私有空间段;
S13、毒化和去毒化阴影内存区,即定义阴影内存中每个字节存取一个数字k,k小于0表示该阴影内存对应的主存空间地址会发生非法内存访问错误;k等于0表示该阴影内存对应的8个字节内存可以访问;k大于0小于7表示该阴影内存对应的8个字节内存中前k个字节内存可以访问;
S14、使用自定义动态运行时库中的__asan_memset、__asan_memmove、__asan_memcpy、asan_malloc、asan_calloc、asan_realloc、asan_free接口分别替换标准c库中的memset、memmove、memcpy、malloc、calloc、realloc、free接口;
用户通过上述替换后的接口申请堆变量和释放堆变量;
当申请堆变量时,将堆变量的隔离区毒化,并使用数据结构,记录哪些堆变量可以分配、哪些堆变量不可以分配,形成trunk记录;
当释放堆变量时,将堆变量去毒化,并去除数据结构中对应的trunk记录;
释放掉的堆变量可以继续分配;
S15、根据毒化值及trunk记录,生成内存错误检测报告;
S2、在自定义动态运行时库中,当从核程序发生段为例异常或终止异常时,从核向主核发送异常中断信号,主核代理从核进行异常处理;
S3、主核、从核各自的编译器分别对源程序进行编译分析,将源程序处理为中间代码,并在中间代码上对需要插桩的位置进行插桩处理,具体过程如下:
S31、在程序头部插入S1中提供的内存初始化接口,在程序尾部插入S1中提供的释放阴影内存空间接口;
S32、编译分析源程序,根据访存指令,发现需要检测的变量数据,在访存指令前后对需要检测的变量数据进行插桩,所述需要检测的变量数据包括全局变量、栈变量和堆变量;
S33、编译器对全局变量进行插桩,对全局变量前后插入隔离区,将原全局变量与隔离区打包成新的结构体全局变量,并用新的结构体全局变量替换原全局变量,编译器判断所述新的结构体全局变量是否可访问,如果可以访问,将打包后的新的结构体全局变量对应的阴影内存去毒化,如果不可以访问,将打包后的新的结构体全局变量对应的阴影内存毒化,在全局变量读写操作时,将用于判定该全局变量是否可以访问的代码,分别插入主核、从核的访存指令前;
S34、对栈变量前后插入隔离区,在函数入口处,编译器判断该栈变量是否可访问,如果可以访问,将该栈变量和隔离区对应的阴影内存去毒化,如果不可以访问,将该栈变量和隔离区对应的阴影内存毒化,在栈变量读写操作时,将用于判定该栈变量空间是否可访问的代码,分别插入主核、从核的访存指令前,在函数返回前,编译器将该栈变量去毒化;
S35、编译器对堆变量进行去毒化,编译器将内存操作相关的标准库接口,替换为运行时库中对应的库接口,自定义动态运行时库中的库接口在实现标准库接口功能的同时,增加对阴影区内存值的设置与判定功能,从而实现对堆变量的内存访问检测;
S4、编译器将S3中处理过的中间代码,编译、汇编、链接,生成可执行代码,进而生成可执行文件并运行,运行时通过插桩的接口调用自定义运行时库中功能模块实现动态内存检测。
2.根据权利要求1所述的面向异构平台的多层次存储结构内存检测方法,其特征在于:所述全局变量空间由编译器一次性分配,所述栈变量是函数局部变量的内存空间,该内存空间由编译器进行动态分配和释放,所述堆变量必须通过标准库中内存操作函数进行分配空间和释放空间。
3.根据权利要求1所述的面向异构平台的多层次存储结构内存检测方法,其特征在于:在S11中,阴影内存与主存之间的映射关系,指主存和阴影内存的对应关系,根据主存地址计算出阴影内存相应的地址,给定主存地址shadow后,首先根据shadow值的范围确定其功能区N,然后将shadow值除以8,表示每8bit主存需要1bit阴影内存表示,然后将计算的结果与功能区对应的阴影内存首地址shadowbeg[N]相加,得到最终的阴影内存地址。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于无锡江南计算技术研究所,未经无锡江南计算技术研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910903842.0/1.html,转载请声明来源钻瓜专利网。