一种内存诊断方法和装置制造方法及图纸

技术编号:19903190 阅读:30 留言:0更新日期:2018-12-26 02:50
本发明专利技术提供一种内存诊断方法和装置,包括预先将内存区划分为可变内存区和不可变内存区,并进一步在可变内存区中划出第一区域作为第一栈区,划出第二区域作为第二栈区,两个栈区交替使用,即一个栈区在执行内存诊断时,另一个栈区作为系统正常运行时的堆栈区。对于不可变内存区,本发明专利技术计算不可变内存区中数据的实际校验码,将实际校验码与源校验码进行比较来实现对不可变内存区的诊断;对于可变内存区,如果当前待诊断的内存区是堆栈区,则在将堆栈区成功切换到另一栈区后,调用预设的内存诊断算法对当前待诊断的内存区进行诊断,否则,直接调用预设的内存诊断算法对当前待诊断的内存区进行诊断。本发明专利技术实现了对系统内的所有内存区的诊断测试。

【技术实现步骤摘要】
一种内存诊断方法和装置
本专利技术涉及安全计算机系统
,尤其涉及一种内存诊断方法和装置。
技术介绍
安全关键系统是指对组成系统的软件、硬件安全性级别要求极高的系统,安全关键系统的运行直接关系着人员生命和财产的安全。自诊断是指系统通过设置诊断功能对故障或失效事件进行自我检测并处理的技术,是提高系统安全性和可靠性的重要手段。数据段是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。代码段是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读。栈(stack)又称堆栈,由操作系统自动分配释放,用于存放函数的参数值、局部变量、返回值等数据的内存空间。由于栈的先进先出特点,栈被用来保存/恢复调用现场。内存是计算机中重要的部件之一,计算机中所有程序的运行都是在内存中进行的,其对于计算机的性能、安全性有至关重要的影响。其中,不可变内存是指系统运行时,数据内容不可以修改的内存区域,如代码段。可变内存是指系统运行时,数据内容可以被动态修改的内存区域,如数据段、栈等。因此在安全关键系统中,对内存进行重点诊断必不可少。目前存在的内存诊断方法包括通过硬件实现和通过软件实现两种技术手段。其中,采用硬件实现的内存诊断方法中,系统内建自测试(Built-inSelfTest,BIST)技术是在芯片电路内部建立测试控制结构,通过硬件功能对计算机存储器进行全面的检测。虽然内建自测试技术可以简化测试步骤,但却增加了芯片的设计复杂度,且该方法大多为固定程序,只能检测存储器件本身读写能力,不能根据实际应用测试只读区域是否被修改。其分为离线和在线两种方式,通常离线测试比较多,需要系统停止运行,这限制了应用场景。总体上应用于嵌入式计算机
,不适用于PC((personalcomputer,个人计算机)和服务器设备。因此随着计算机性能的不断提升,采用软件实现的内存诊断方法越来越受到广泛应用。采用软件实现的内存诊断方法通常是在应用程序中插装检测诊断模块,在系统运行时,操作系统调用该检测诊断模块,通过预先设置的算法,如March-C、March-TB等,检测被测内存是否存在错误。具体的,采用软件实现的内存诊断方法大致包括以下三种:1、方法一,设计支持旁路模式的模块。在旁路模式下,根据预定的提取规则从即将输入内存的数据中提取第一数据,并通过预定位数的CRC(CyclicRedundancyCheck,循环冗余校验码)校验算法对提取的第一数据进行计算,得到第一校验码;根据预定的提取规则从即将输出内存的数据中提取第二数据,并通过预定位数的CRC校验算法对提取的数据进行计算,得到第二校验码;将第一校验码和第二校验码进行对比,根据对比结果确定内存的工作情况。方法一通过在旁路模式下对内存进行实时检测,避免了内存检测过程中对主干线上的数据处理造成的影响。然而方法一只能对物理性质的内存区进行诊断,对于代码区和配置数据这些一旦写入则不可修改的不可变内存区则无法诊断,即方法一不能实现对所有内存区的诊断测试,存在诊断盲区。2、方法二,采用特征分析的方法。例如应用程序进行静态分析,完成对其的内存错误特征建模;运行所述应用程序,利用内存错误特征模型,创建并动态维护所述应用程序的合法地址库;应用程序每次访问内存地址前,计算出即将访问的内存地址并与合法地址库中的记录进行匹配,若无法匹配上或程序运行结束前合法地址库中仍有由内存分配函数创建的记录,均说明该应用程序存在内存错误。方法二虽然能够检测出计算机应用程序中越界访问、内存错误释放等错误,但其更多针对的是软件行为进行检测,不能诊断物理器件的失效。且方法二仍然只能实现对可变内存区的诊断,不可变内存区无法实现诊断,即方法二也不能实现对所有内存区的诊断测试,存在诊断盲区。3、方法三,典型如《一种提高安全计算机可靠性的内存检测设计》中提到的实现方式。方法三在系统停止执行安全功能的前提下,采用硬件方式(HBIST)检测整个内存区。在系统运行期间,采用软件方式(SBIST)对不可变内存区的代码段以及可变内存区的数据段进行自诊断。其中,对于HBIST部分,采用CPLD(ComplexProgrammableLogicDevice,复杂可编程逻辑器件)实现March-TB算法,测试的周期为24h,当夜间实时安全设备处于空闲状态时,启动硬件BIST测试。软件在白天计算机运行期间,由操作系统调用,具体采用计算MD5(MessageDigestAlgorithm5,信息-摘要算法5)值检测代码段内存区,采用March-TB算法实现数据内存区检测。其中对于不可变内存区的检测方法如下:(1)软件编译后,生成目标执行程序文件,解析并计算出代码段的MD5值;(2)将目标执行程序及MD5值分别存储到硬盘或FLASH上;(3)启动后,通过装载程序将程序代码加载到指定内存地址处,该区域即为内存不可变区;(4)操作系统适时调用自诊断模块,计算指定不可变内存区的代码段MD5值,并与硬盘或FLASH上的MD5值对比,如不一致则表示被恶意修改。以及利用March-TB算法实现数据内存区检测。然而对于方法三,其软件检测方案受操作系统特性的限制,不能实现对所有内存区的诊断,其中系统堆栈就无法实现诊断。且其只能实现对不可变内存中的代码段进行诊断,对于其它运行期间不能修改的数据区(如重要的配置信息)也不能实现诊断。另外该方案不适用24小时不停运行系统。那些系统通常需要不停周期运行,不允许专门留出一大段时间用于诊断内存。因此方法三也不能实现对所有内存区的诊断测试,存在诊断盲区。因此,目前现有的内存诊断方法都不能实现对所有内存区的诊断测试,存在诊断盲区。
技术实现思路
有鉴于此,本专利技术提供一种内存诊断方法和装置,以解决现有的内存诊断方法都无法实现对所有内存区的诊断测试,存在诊断盲区的问题。技术方案如下:基于本专利技术的一方面,本专利技术提供一种内存诊断方法,预先将内存区划分为可变内存区和不可变内存区,并将所述可变内存区中的第一区域作为第一栈区,第二区域作为第二栈区,其中当一个栈区在执行内存诊断时,另一个栈区作为系统正常运行时的堆栈区;所述方法包括:对于所述不可变内存区,通过计算所述不可变内存区中数据的实际校验码,将所述实际校验码与源校验码进行比较来实现对所述不可变内存区的诊断;其中,所述源校验码为初始化不可变内存区后,计算初始化不可变内存区中的数据时得到的校验码;对于所述可变内存区,判断当前待诊断的内存区是否是堆栈区,如果是,将所述堆栈区切换到另一栈区,并在将所述堆栈区成功切换到另一栈区后,调用预设的内存诊断算法对所述当前待诊断的内存区进行诊断;如果否,直接调用预设的内存诊断算法对所述当前待诊断的内存区进行诊断。可选地,所述第一区域和所述第二区域大小相等。可选地,所述将所述堆栈区切换到另一栈区包括:将所述堆栈区中存储的堆栈数据备份到另一栈区;其中,当所述堆栈区为所述第一栈区时,所述另一栈区为所述第二栈区;当所述堆栈区为所述第二栈区时,所述另一栈区为所述第一栈区。可选地,所述方法还包括:预先将所述可变内存区按可配置的容量划分为第一数量个第一内存块,当对所述可变内存区进行诊断时,每周期以所述第一内存块为单位本文档来自技高网
...

【技术保护点】
1.一种内存诊断方法,其特征在于,预先将内存区划分为可变内存区和不可变内存区,并将所述可变内存区中的第一区域作为第一栈区,第二区域作为第二栈区,其中当一个栈区在执行内存诊断时,另一个栈区作为系统正常运行时的堆栈区;所述方法包括:对于所述不可变内存区,通过计算所述不可变内存区中数据的实际校验码,将所述实际校验码与源校验码进行比较来实现对所述不可变内存区的诊断;其中,所述源校验码为初始化不可变内存区后,计算初始化不可变内存区中的数据时得到的校验码;对于所述可变内存区,判断当前待诊断的内存区是否是堆栈区,如果是,将所述堆栈区切换到另一栈区,并在将所述堆栈区成功切换到另一栈区后,调用预设的内存诊断算法对所述当前待诊断的内存区进行诊断;如果否,直接调用预设的内存诊断算法对所述当前待诊断的内存区进行诊断。

【技术特征摘要】
1.一种内存诊断方法,其特征在于,预先将内存区划分为可变内存区和不可变内存区,并将所述可变内存区中的第一区域作为第一栈区,第二区域作为第二栈区,其中当一个栈区在执行内存诊断时,另一个栈区作为系统正常运行时的堆栈区;所述方法包括:对于所述不可变内存区,通过计算所述不可变内存区中数据的实际校验码,将所述实际校验码与源校验码进行比较来实现对所述不可变内存区的诊断;其中,所述源校验码为初始化不可变内存区后,计算初始化不可变内存区中的数据时得到的校验码;对于所述可变内存区,判断当前待诊断的内存区是否是堆栈区,如果是,将所述堆栈区切换到另一栈区,并在将所述堆栈区成功切换到另一栈区后,调用预设的内存诊断算法对所述当前待诊断的内存区进行诊断;如果否,直接调用预设的内存诊断算法对所述当前待诊断的内存区进行诊断。2.根据权利要求1所述的方法,其特征在于,所述第一区域和所述第二区域大小相等。3.根据权利要求1所述的方法,其特征在于,所述将所述堆栈区切换到另一栈区包括:将所述堆栈区中存储的堆栈数据备份到另一栈区;其中,当所述堆栈区为所述第一栈区时,所述另一栈区为所述第二栈区;当所述堆栈区为所述第二栈区时,所述另一栈区为所述第一栈区。4.根据权利要求1-3任一项所述的方法,其特征在于,所述方法还包括:预先将所述可变内存区按可配置的容量划分为第一数量个第一内存块,当对所述可变内存区进行诊断时,每周期以所述第一内存块为单位依次进行诊断;预先将所述不可变内存区按可配置的容量划分为第二数量个第二内存块,且分别计算每个所述第二内存块的源校验码,并将每个所述第二内存块的源校验码存储于所述不可变内存区;当对所述不可变内存区进行诊断时,每周期以所述第二内存块为单位依次进行诊断。5.根据权利要求4所述的方法,其特征在于,所述方法还包括:建立全内存管理表,所述全内存管理表用于保存所述可变内存区中各个第一内存块、所述不可变内存区中各个第二内存块及其源校验码,分别与系统实际的内存分配区之间的对应关系。6.根据权利要求1所述的方法,其特征在于,所述通过计算所述不可变内存区中数据的实际校验码,将所述实际校验码与源校验码进行比较来实现对所述不可变内存区的诊断包括:计算所述不可变内存区中数据的实际校验码;将所述实际校验码与源校验码进行比较;当所述实际校验码与源校验码不一致时,确定所述不可变内存区出错。7.根据权利要求1-3任一项所述的方法,其特征在于,所述计算所述不可变内存区中数据的实际校验码包括:采用32位循环冗余校验算法计算所述不可变内存区中数据的实际校验码;所述预设的内存诊断算法包括:March-C算法。8.根据权利要求7所述的方法,其特征在于,调用所述March-C算法进行诊断包括:从安全的可变内存区中选出一部分可变内存区作为备份可变内存区;将待诊断的可变内存区中的数据备份至所述备份可变内存区;当所述待诊断的可变内存区诊断结束后,将所述备份可变内存区中的数据写入所述待诊断的可变内存区中。9.一种内存诊断装置,其特征在于,所述装置包括:...

【专利技术属性】
技术研发人员:吕晓昱姚琥张虎
申请(专利权)人:中国农业银行股份有限公司
类型:发明
国别省市:北京,11

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

1