内存测试方法及装置与流程

文档序号:14860405发布日期:2018-07-04 06:55阅读:323来源:国知局
内存测试方法及装置与流程

本发明涉及计算机领域,具体而言,涉及一种内存测试方法及装置。



背景技术:

内存(memory)也被称为内存储器,是计算机中重要的部件之一,它是与cpu进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,内存的性能对计算机的影响非常大,因此,对内存的性能进行测试就显得非常重要。

现有的对内存进行测试的方法中,通常是在内存或者只读存储器(rom)中运行内存测试代码,实现对内存的性能测试。但是,若内存测试代码在rom中运行,测试速度低,增加了测试时间。若在内存中运行内存测试代码,需要至少两次测试才能完成对内存的完全测试,则需要至少启动两次计算机,仍然使测试时间加长。



技术实现要素:

有鉴于此,本发明实施例提供了一种内存测试方法及装置,通过在缓存中运行内存测试代码进行内存测试,提升了测试速度,从而有效缩短测试时间,以改善上述问题。

为了实现上述目的,本发明采用的技术方案如下:

一种内存测试方法,所述方法包括:加载内存测试代码到缓存;执行所述内存测试代码对内存进行内存测试。

优选的,上述方法中,所述加载内存测试代码到缓存之前,还包括:对所述内存测试代码进行编译,并且将所述内存测试代码编译到连续的存储地址中。

优选的,上述方法中,所述执行所述内存测试代码对内存进行内存测试之前,还包括:对内存进行初始化。

优选的,上述方法中,所述加载内存测试代码到缓存的步骤中,还包括:将所述内存测试代码锁定。

优选的,上述方法中,所述执行所述内存测试代码对内存进行内存测试之后,还包括:若所述内存的测试结果为正常,则将所述内存测试代码解锁。

优选的,上述方法中,所述加载内存测试代码到缓存之前,还包括:对串口进行初始化;所述执行所述内存测试代码对内存进行内存测试之后,还包括:通过所述串口打印输出所述内存测试的结果。

优选的,上述方法中,若所述内存测试的结果为存在异常,使系统进入死循环等待。

一种内存测试装置,包括:加载模块,用于加载内存测试代码到缓存;执行模块,用于执行所述内存测试代码对内存进行内存测试。

优选的,上述装置中,还包括:编译模块,用于对所述内存测试代码进行编译,并且将所述内存测试代码编译到连续的存储地址中。

优选的,上述装置中,还包括:锁定模块,用于将所述内存测试代码锁定;解锁模块,若所述内存的测试结果为正常,用于将所述内存测试代码解锁。

本发明实施例提供的内存测试方法及装置,将内存测试代码加载到缓存(cache)中后再执行该内存测试代码进行内存测试。由于缓存是进行高速数据交换的存储器,处理器读取数据时,首先从缓存中查找需要的数据,运行速率很快,于是,在执行内存测试代码对内存进行测试的过程中,速度快,测试时间短。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1示出了本发明第一实施例提供的内存测试方法的流程图;

图2示出了本发明第一实施例提供的一种存储空间示意图;

图3示出了本发明第二实施例提供的内存测试装置的功能模块图。

具体实施方式

下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

第一实施例

计算机在开机启动过程中通常需要进行内存测试,图1示出了本发明第一实施例提供的内存测试方法,请参见图1,该方法包括:

步骤s110:加载内存测试代码到缓存。

内存测试代码预先存储于非易失性存储器中,以便计算机在开机启动过程中通过该内存测试代码对内存进行测试。

当需要对内存进行测试时,处理器首先将内存测试代码加载到缓存中。并且,为了保证内存测试过程中缓存中的内存测试代码不会被替换,将该内存测试代码锁定于缓存中。

进一步的,在本步骤之前,还包括对内存测试代码进行编译。由于内存测试代码可能包括多个文件,编译时如果不进行控制,编译后的代码可能分布在代码空间的各个地址,碎片化,代码的每个段的大小无法确定,导致加载到缓存比较困难。而且将内存测试代码加载到缓存并锁定的时候,需要根据缓存行(cacheline)对齐,编译在一起保证需要使用的缓存最小。于是,在编译过程中,将内存测试代码编译到独立的段中,保证内存测试代码编译后集中放置,并且可以获取其存储地址,以使在将内存测试代码加载到缓存中时,可以根据缓存行将其对齐,使该内存测试代码占用的缓存空间最小。

在本实施例中,可以通过编译脚本将内存测试代码编译到连续的存储地址中。如图2示出了编译后的内存测试代码存放的存储空间,其中内存测试代码在text_memtest_start到text_memtest_end之间的连续的存储空间。

步骤s120:执行所述内存测试代码对内存进行内存测试。

处理器执行加载到缓存中的内存测试代码,以实现对内存的测试。由于在对内存的测试过程中,需要对内存进行读写,而若要通过软件对内存进行读写,需先对内存进行初始化。于是,在本步骤之前,还包括对内存进行初始化,处理器执行内存测试代码对内存进行测试在内存初始化完成后进行。

对内存进行测试的一种具体的过程可以是,首先通过内存控制寄存器获取内存的大小。由于处理器(cpu)的类型不同,其内存空间分布不同,于是再根据处理器的类型以及内存的大小确定内存的开始地址以及结束地址,最后根据内存的开始地址以及结束地址进行内存测试。当然,在本实施例中,内存的大小也可以在内存初始化过程中获得。

若内存测试的结果为异常,如,内存测试代码测试过程中向内存中写入的数据与从内存中读出的数据不一致,则内存测试失败,使系统进入死循环等待。具体的,可以是在内存测试异常的地址进行死循环运行。

若内存的测试结果为正常,测试通过,将内存测试代码从缓存中解锁。同时,控制被测试的计算机继续启动。

进一步的,在本实施例中,在加载内存测试代码到缓存之前,还可以包括对被测试的计算机的基础硬件进行初始化,其中包括串口初始化,使串口可以进行打印输出。在测试完成后,还可以通过串口打印输出内存测试的测试结果。该测试完成包括得到正常的测试结果或者异常的测试结果。

若得到异常的测试结果,可以打印输出出错地址,以根据出错地址确定出错内存条、出错行以及出错位(bit)。另外,也可以打印出错数据以及期望值,该期望值为内存测试中写入内存的值,出错数据为与写入的期望值不一致的读出的数据。

若得到正常的测试结果,直接输出代表测试结果正常的预定值。如,打印输出“ok”。

本发明实施例提供的内存测试方法,将内存测试代码加载到缓存中后再执行该内存测试代码进行内存测试,相对于在只读存储器、内存等存储设备中执行内存测试代码进行内存测试,测试速度更高,测试时间更短。

第二实施例

本实施例提供了一种内存测试装置,请参见图3,该装置200包括:加载模块210,用于加载内存测试代码到缓存(cache);执行模块220,用于执行所述内存测试代码对内存进行内存测试。

进一步的,由于在加载内存测试代码之前,需要将存储于非易失存储器中的内存代码进行编译,并且,由于编译前的内存测试代码可能包括多个文件,若将其编译到了不同的代码空间,对于加载到缓存中会产生困难,且会占用加大的缓存空间,所以,在本实施例提供的装置200中,还包括:编译模块230,用于对所述内存测试代码进行编译,并且将所述内存测试代码编译到连续的存储地址中。

进一步的,为避免加载到缓存中的内存测试代码被替换,装置200还包括锁定模块240,用于将所述内存测试代码锁定。并且,若内存测试结果正常,还需要对测试代码进行解锁,以释放相应的缓存空间,于是,本实施例提供的内存测试装置200还包括解锁模块250,若所述内存的测试结果为正常,用于将所述内存测试代码解锁。

另外,本实施例中,内存测试装置200还可以包括初始化模块260,用于对内存进行初始化,以使内存测试过程中可以对内存进行读写。

进一步的,若内存测试结果为异常,则内存不可正常使用,系统不能正常启动,于是,在本实施例中,还包括,死循环模块,若所述内存测试的结果为存在异常,用于使系统进入死循环等待。

进一步的,本实施例中,初始化模块260还用于对串口进行初始化,使该串口能够进行打印输出。在对内存进行测试后,还可以包括对测试结果进行打印输出。具体的,该装置200可以包括打印模块,用于通过串口打印输出所述内存测试的结果,其中,对应不同的测试结果,打印输出不同的值。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1