一种内存检测方法和装置与流程

文档序号:21626940发布日期:2020-07-29 02:33阅读:262来源:国知局
一种内存检测方法和装置与流程
本发明涉及内存检测
技术领域
,尤其涉及一种内存检测方法和装置。
背景技术
:对于稳定性要求高的用户来说,内存错误可能会引起致命性的问题,内存错误对于系统的正常运行起到了阻碍作用。内存错误主要是内存单元的读写问题,或者是在执行相关内存操作时所出现的一系列错误,这是导致绝大多数软件发生紊乱的根本原因。因此需要用内存检测技术对内存错误进行检测,尤其在嵌入式领域,安全可靠性是至关重要的。常见的奇偶校验、ecc校验的实现都是从内存硬件方面进行的改进,这种方法固然简便可靠,但对硬件有了更高的要求;同时对内存的容错要求不同,硬件构造就会不同,成本就会提升。通常,针对某些内存错误,会采用专业的内存测试工具,一般需要在测试工具环境下进行程序的编译、调试和运行进行动态测试,这些测试工具会自动给出内存泄漏的测试结果,甚至可以定位产生内存泄漏的代码位置。另外,还可以使用操作系统的性能监视器实时监视内存的使用情况,通过查看内存的使用数据来判断内存的问题。而从数据存取时,对内存中数据的完整性如果有一个初步检测方式,那么之后在应用过程中,在一定程度上可以避免造成内存发生错误的情况。在航空航天领域,嵌入式系统的可靠性需要内存检测技术的支持,针对数据包的完整性校验,传统的通用技术已经无法满足对内存的差异化需求。技术实现要素:鉴于上述的分析,本发明实施例旨在提供一种内存检测方法和装置,用以解决现有技术无法满足数据包的完整性校验的问题。一方面,本发明实施例提供了一种内存检测方法,包括:根据数据库中的区域标号与数据头和数据尾的一一对应关系,对每个内存区域中的待测数据分别进行封装;根据所述区域标号对所述待测数据进行排序;当检测到缺失内存区域时,增加空内存块,其中,所述空内存块包括空数据、数据头和数据尾;将相邻的数据尾与数据头进行比较;以及当所述相邻的数据尾与数据头相同时,确定所述待测数据为完整数据。上述技术方案的有益效果如下:通过将相邻的数据尾与数据头进行比较,能够确定待测数据为完整数据。因此,能够减少了对硬件平台的依赖性,保证数据存取的完整性,并且保证了程序的稳定性和可靠性。基于上述方法的进一步改进,在分别对每个内存区域中的待测数据进行封装之前,对内存空间进行分区分块,其中,所述分区分块包括:将所述内存空间划分为多个内存区域;以及将所述多个内存区域中的每个内存区域划分为一个或多个内存块。基于上述方法的进一步改进,根据数据库中的区域标号与数据头和数据尾的一一对应关系,分别对每个内存区域中的待测数据进行封装进一步包括:对所述多个内存区域依次进行标号,使得每个内存区域中的内存块数据具有对应的区域标号;以及根据数据库中的区域标号与数据头和数据尾的一一对应关系,对所述内存块数据增加与所述区域标号相对应的数据头和数据尾。基于上述方法的进一步改进,根据所述区域标号对所述待测数据进行排序进一步包括:根据封装后的待测数据的所述区域标号从小到大对所述待测数据进行排序。基于上述方法的进一步改进,当检测到缺失内存区域时,增加空内存块进一步包括:将与排序后的待测数据的区域标号进行检查,以确定是否存在缺失内存区域;以及当存在所述缺失内存区域时,增加与所述缺失内存区域相对应的空内存块。基于上述方法的进一步改进,将相邻的数据尾与数据头进行比较进一步包括:将第n个内存区域中的任一个内存块的数据尾与第(n+1)个内存区域中的任一个内存块的数据头进行比较,其中,n大于等于1。基于上述方法的进一步改进,当所述相邻的数据尾与数据头相同时,所述待测数据为完整数据进一步包括:当第n个内存区域中的任一内存块的数据尾与第(n+1)个内存区域中的任一内存块的数据头都相同时,确定形成完整的数据链条而没有丢失数据;否则没有形成完整的数据链条,确定丢失数据。另一方面,本发明实施例提供了一种内存检测装置,包括:封装模块,用于根据数据库中的区域标号与数据头和数据尾的一一对应关系,分别对每个内存区域中的待测数据进行封装;排序模块,用于根据所述区域标号对所述待测数据进行排序;检测和增加模块,用于当检测到缺失内存区域时,增加空内存块,其中,所述空内存块包括空数据、数据头和数据尾;比较模块,将相邻的数据尾与数据头进行比较;以及完整性确定模块,当所述相邻的数据尾与数据头相同时,所述待测数据为完整数据。基于上述装置的进一步改进,所述封装模块还用于:对所述多个内存区域依次进行标号,使得每个内存区域中的内存块数据具有对应的区域标号;以及根据数据库中的区域标号与数据头和数据尾的一一对应关系,对所述内存块数据增加与所述区域标号相对应的数据头和数据尾。基于上述装置的进一步改进,所述排序模块还用于根据封装后的数据的所述区域标号从小到大对待测数据进行排序;以及检测和增加模块还用于将与排序后的待测数据的区域标号进行检查,以确定是否存在缺失内存区域;以及当存在所述缺失内存区域时,增加与所述缺失内存区域相对应的空内存块。与现有技术相比,本发明至少可实现如下有益效果之一:1、通过将相邻的数据尾与数据头进行比较能够确定所述待测数据为完整数据;2、基于操作系统实现数据在内存中存取的完整可靠性,在操作系统本身加入内存检测模块,更好地满足了实时操作系统高可靠性和高实时性的要求;3、与应用程序开发人员无关,不需开发人员考虑数据存取完整性,提高了开发效率;以及4、忽略了存储器的硬件构造,完全从软件层面为内存检测提供了一个较为合适的方法,一定程度上可保证程序的稳定和可靠运行。本发明中,上述各技术方案之间还可以相互组合,以实现更多的优选组合方案。本发明的其他特征和优点将在随后的说明书中阐述,并且,部分优点可从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过说明书以及附图中所特别指出的内容中来实现和获得。附图说明附图仅用于示出具体实施例的目的,而并不认为是对本发明的限制,在整个附图中,相同的参考符号表示相同的部件。图1根据本发明实施例中的内存检测方法的流程图;图2为根据本发明实施例中的运行平台组成图;图3为根据本发明实施例中内存区域分区示意图;图4为根据本发明实施例中每个内存区域的内存块划分示意图;图5为根据本发明实施例中操作系统视角下的数据格式示意图;图6为根据本发明实施例中的内存检测方法的流程图;以及图7为根据本发明实施例中的内存检测装置的框图。附图标记:202-嵌入式操作系统;204-嵌入式硬件平台;206-cpu;208-内存;210-外存;702-封装模块;704-排序模块;706-检测和增加模块;708-比较模块;以及710-完整性确定模块具体实施方式下面结合附图来具体描述本发明的优选实施例,其中,附图构成本申请一部分,并与本发明的实施例一起用于阐释本发明的原理,并非用于限定本发明的范围。本发明的一个具体实施例,公开了一种内存检测方法,如图1所示。内存检测方法包括:步骤s102,根据数据库中的区域标号与数据头和数据尾的一一对应关系,对每个内存区域中的待测数据分别进行封装;步骤s104,根据区域标号对待测数据进行排序;步骤s106,当检测到缺失内存区域时,增加空内存块,其中,空内存块包括空数据、数据头和数据尾;步骤s108,将相邻的数据尾与数据头进行比较;以及步骤s110,当相邻的数据尾与数据头相同时,确定待测数据为完整数据。与现有技术相比,本实施例提供的内存检测方法,通过将相邻的数据尾与数据头进行比较,能够确定待测数据为完整数据。因此,能够减少了对硬件平台的依赖性,保证数据存取的完整性,并且保证了程序的稳定性和可靠性。下文中,将参照图1至图5对内存检测方法进行详细描述。内存检测方法包括步骤s102,根据数据库中的区域标号与数据头和数据尾的一一对应关系,对每个内存区域中的待测数据分别进行封装。具体地,根据数据库中的区域标号与数据头和数据尾的一一对应关系,分别对每个内存区域中的待测数据进行封装进一步包括:对多个内存区域依次进行标号,使得每个内存区域中的内存块数据具有对应的区域标号;以及根据数据库中的区域标号与数据头和数据尾的一一对应关系,对内存块数据增加与区域标号相对应的数据头和数据尾。在对每个内存区域中的待测数据进行封装之前,对内存空间进行分区分块,其中,分区分块包括:将内存空间划分为多个内存区域,这些内存区域是相邻有序的,参考图3,示例性地,多个内存区域可以包括区域1、区域2和区域3;以及将多个内存区域中的每个内存区域划分为一个或多个内存块,同一内存区域中的每一内存块的大小是相同的,不同内存区域中内存块的大小是不同的;例如,区域1包括6个大小相同的内存块,区域2包括8个大小相同的内存块,以及区域3包括6个大小相同的内存块。在对每个内存区域中的待测数据分别进行封装之后,进入步骤s104,根据区域标号对待测数据进行排序。具体地,根据区域标号对待测数据进行排序进一步包括:根据封装后的待测数据的区域标号从小到大对待测数据进行排序。在对待测数据进行排序之后,进入步骤s106,当检测到缺失内存区域时,增加空内存块,其中,空内存块包括空数据、数据头和数据尾。具体地,当检测到缺失内存区域时,增加空内存块进一步包括:将与排序后的待测数据的区域标号进行检查,以确定是否存在缺失内存区域;以及当存在缺失内存区域时,增加与缺失内存区域相对应的一个空内存块,并为该内存块中的空数据利用缺失内存区域标号对应的数据头和数据尾进行封装。在增加空内存块之后,进入步骤s108,将相邻的数据尾与数据头进行比较。具体地,将相邻的数据尾与数据头进行比较进一步包括:将第n个内存区域中的任一个内存块的数据尾分别与第(n+1)个内存区域中的任一个内存块的数据头进行比较,其中,n大于等于1。在将相邻的数据尾与数据头进行比较之后,进入步骤s110,当相邻的数据尾与数据头相同时,确定待测数据为完整数据。具体地,当相邻的数据尾与数据头相同时,待测数据为完整数据进一步包括:当第n个内存区域中的任一内存块的数据尾与第(n+1)个内存区域中的任一内存块的数据头都相同时,确定形成完整的数据链条而没有丢失数据;否则没有形成完整的数据链条,确定丢失数据,此时,需要重新进行数据存取。下文中,以具体实例的方式,参考图2以及图4至图6,对内存检测方法进行详细描述。本实施例一种基于操作系统(例如,海鹰翼辉操作系统)的内存检测方法,该内存检测方法是在操作系统内存管理的机制下,对数据包存取的完整性进行校验。该方法的实现基于如图2所示的嵌入式平台,包括嵌入式操作系统202(软件平台)和嵌入式硬件平台204,其中,嵌入式硬件平台204包括cpu206、内存208和外存210。内存检测方法的实施流程如图6所示,包括以下步骤:步骤s1:依据内存区域,对数据进行封装。对内存空间划分的每个内存区域依次进行标号,从1开始直到最后一块区域,这样每个内存块区域对应的数据都会有对应的标号,作为其中一个校验选项。对数据进行封装,按照数据库中区域标号与数据头尾的一一对应关系,对所有数据进行封装,增加相应的数据头和数据尾。数据封装后的示意图如图4所示。具体地,为了保证校验最大程度的可靠性,数据头和数据尾必须两两不同。数据库中包含了区域标号与数据头尾的一一对应关系,具体地,标号和对应的数据头和尾两者之间可以不存在任何逻辑上的关系,完全独立。增加数据头尾均通过查表操作实现。具体的对应关系表如以下表1所示,第n个内存区域里数据的尾是第n+1个内存区域里数据的头,进一步的,为了保证数据内容的正确性,数据校验位除了增加数据头和数据尾外,可以增加数据纠错位,这个依据硬件或编码规则来确定。其中数据库要预先嵌入到操作系统中,便于调用。表1对应关系表区域标号数据头数据尾10x00010x000220x00020x000330x00030x0004……步骤s2:数据校验。数据校验是指对存取数据的过程及完整性校验。具体地,步骤s2的实现具体包括以下步骤:步骤s2-1:对存取的数据进行排序;对存取的数据进行排序,其实是按照数据封装后的区域标号从小到大的顺序排列。数据写入内存时,操作系统会进行封装。从内存读数据时,先将数据取出,然后操作系统根据标识区域标号的数据位大小进行排序,具体排序方式不限,不同的排序算法所占用的处理器资源不同,依实际情况而定,本实施例中选择冒泡排序。具体地,这些数据中有些标号是相同的,即来自同一区域,将这些数据看成一个整体,然后与其他数据排序。步骤s2-2:检测缺失的内存区域,增加相应的数据头和尾;检测缺失的内存区域是经过排序后的数据中,标号从小到大的范围里缺失的数字所代表的内存区域。通过在表中搜索相应的标号,将相应的数据头和尾插入到排序的数组中,实际它是一个“空数据”。步骤s2-3:比较相邻区域的数据头尾。具体地,参考图5,将第1区域的数据尾与第2区域的数据头相比较,将第2区域的数据尾与第3区域的数据头相比较;以及将第3区域的数据尾与第4区域的数据头相比较。具体地,先对相同标号的数据组成的整体进行比较,将这些数据的数据头和数据尾分别与标号在表1中对应的数据头尾进行比较;然后再对排序且增加缺失位的数据即相邻区域的数据头尾进行比较,若可以形成一个“链条”,即头尾相同,则判定数据未有丢失包,数据完整,内存控制器释放正确的数据;若无法形成一个“链条”,则数据有丢失,回到步骤2,重新进行存取操作。本申请公开了一种基于操作系统的内存检测技术,在海鹰翼辉操作系统内存管理的机制下,每个内存区域都有相应的数据头和数据尾,内存块中的数据存取时会对其数据格式进行封装;在内存中对存取的数据按照数据所在区域的顺序进行排序;检测缺失的数据区域,增加相应区域对应的校验数据头尾;对相邻区域的数据头尾两两进行比较,若相同,则证明数据存取成功,否则将重新存取。操作系统的内存管理主要是将内存分为若干个区域,这些区域是相邻有序的,每个区域又分割成若干个内存块,这些内存块的大小是相同的;不同内存区域中内存块的大小是不同的;利用这种“分区分块”机制,使得内存申请/释放的时间固定下来;申请空间时,可以在不同的区域得到不同大小的内存块,特定的内存块在释放时,必须归还到它所属的内存区域。具体地,所述内存分为若干个区域是采用lw_mem结构体进行表述的,数据结构如下:typedefstruct{pvoidlw_startaddress;//内存分区的起始地址pvoidlw_memfreelist;//内存分区中空闲内存块的起始地址uint32lw_memblksize;//内存块的大小uint32lw_memblkcounter;//内存块的个数uint32lw_memfreecounter;//空闲内存块的个数charlw_memname[lw_cfg_object_name_size];//内存块的名称}lw_mem;具体的函数实现如下:内存管理器初始化lw_meminit()函数初始化多个内存区域管理结构体lw_mem初始化内存分区中的内存控制块lw_memcreate()函数将内存区域中的内存块使用单向链表连接起来;该函数建立并初始化一个用于动态内存分配的区域,该内存区域包含指定数目、大小确定的内存块。应用可以动态申请这些内存块并在用完后将其释放回这个内存区域。该函数的返回值就是指向这个内存区域控制块的指针,并作为lw_memget(),lw_memput(),lw_memquery()等相关调用的参数。申请内存块lw_memget()函数从指定的内存区域中获取内存块;该函数用于从内存区域分配一个内存块。用户程序须知道所建立的内存块大小,并必须在使用完内存块后释放它。可以多次调用此函数,它的返回值就是指向所分配内存块的指针,并作为lw_memput()函数的参数。释放内存块lw_memput函数将指定内存块释放到所属的内存区域中;该函数用于释放一个内存块,内存块必须释放回它原先所在的内存区域,否则会造成系统错误。在上述内存管理的机制下,在申请内存时,要根据所需的内存大小找到对应的内存块,然后进而寻找相应的内存区域。具体地,内存块中的数据存取时会对其数据格式进行封装是指在数据的首尾增加数据所在区域所对应的数据头和数据尾。内存空间被划分为n个内存区域,这些区域连续且依序形成标号,每个内存区域又有不同的内存块,每个数据具有自己所在位置的区域标号n。每个内存块里的数据都有一样的数据头和数据尾,这n个内存块相邻之间可以形成“关系链”,即第n个内存块里数据的尾是第n+1个内存块里数据的头,且头和尾不能相同。不同内存块有不同的数据头和数据尾,两两不同。具体的,一个n对应一种数据头、尾,这种一一对应的关系可以预先保存到数据库中。具体地,所述对存取的数据按照数据所在区域的顺序进行排序:是指按照数据的区域标号从小到大进行排序。若标号出现相同的情况,即有数据在同一内存块中,则将这些横坐标相同的数据组成一个整体“半相同内存块”,这个整体“半相同内存块”与其他数据进行排序。具体地,所述检测缺失的数据区域:是指所有参加排序的数据中,标号从小到大的范围内没有涵盖的数字位。进一步地,将缺失标号对应的数据头和数据尾组成空数据加进去。具体地,所述对数据头尾进行比较:是指将相邻的数据头尾两两进行比较,若两两比较一致,则拼接成功。若比较出现不一致,则说明数据存取不完整,重新进行存取。以上所述操作均由嵌入式操作系统完成,相当于在操作系统中加入一个内存检测模块。1、在操作系统的内存管理机制下,增加内存检测模块,从软件层面为内存检测提供了一个较为合适的方法。2、内存空间的“分区分块”为数据封装提供了可依据性,相邻区域间的数据头和数据尾是一致的,实现了数据完整性校验。本发明的另一个具体实施例,公开了一种内存检测装置,如图7所示。内存检测装置包括:封装模块702,用于根据数据库中的区域标号与数据头和数据尾的一一对应关系,分别对每个内存区域中的待测数据进行封装;排序模块704,用于根据区域标号对待测数据进行排序;检测和增加模块706,用于当检测到缺失内存区域时,增加空内存块,其中,空内存块包括空数据、数据头和数据尾;比较模块708,将相邻的数据尾与数据头进行比较;以及完整性确定模块710,当相邻的数据尾与数据头相同时,待测数据为完整数据。封装模块702还用于对多个内存区域依次进行标号,使得每个内存区域中的内存块数据具有对应的区域标号;以及根据数据库中的区域标号与数据头和数据尾的一一对应关系,对内存块数据增加与区域标号相对应的数据头和数据尾。排序模块704还用于根据封装后的数据的区域标号从小到大对待测数据进行排序;以及检测和增加模块还用于将与排序后的待测数据的区域标号进行检查,以确定是否存在缺失内存区域;以及当存在缺失内存区域时,增加与缺失内存区域相对应的空内存块。内存检测装置还包括多个其他模块。内存检测装置与内存检测方法相对应,为了避免赘述,省略了多个其他模块的详细描述。与现有技术相比,本发明至少可实现如下有益效果之一:1、通过将相邻的数据尾与数据头进行比较能够确定所述待测数据为完整数据;2、基于操作系统实现数据在内存中存取的完整可靠性,在操作系统本身加入内存检测模块,更好地满足了实时操作系统高可靠性和高实时性的要求;3、与应用程序开发人员无关,不需开发人员考虑数据存取完整性,提高了开发效率;以及4、忽略了存储器的硬件构造,完全从软件层面为内存检测提供了一个较为合适的方法,一定程度上可保证程序的稳定和可靠运行。本领域技术人员可以理解,实现上述实施例方法的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于计算机可读存储介质中。其中,所述计算机可读存储介质为磁盘、光盘、只读存储记忆体或随机存储记忆体等。以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本
技术领域
的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1