Linux系统下物理内存的测试方法技术方案

技术编号:2840969 阅读:939 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开一种Linux系统下物理内存的测试方法,是利用一个Linux操作系统下的字符设备驱动程序激活一个字符设备,用户只需通过Linux提供的档案作业函数,就可以实现在用户层对指定的物理内存进行读写操作。该方法对于内存分配的最小单位为页,页的大小视Linux系统核心(Kernel)的配置而定。除去系统自身保留的内存以及其它应用程序(包含测试程序本身)所占用的内存空间,利用本发明专利技术的测试方法可以直接访问到所有剩余的物理内存并进行读写测试,因此大大提高了内存测试的涵盖率和准确性。

【技术实现步骤摘要】

本专利技术涉及一种物理内存的测试方法,尤其涉及一种应用于Linux操作系统下的物理内存的测试方法。
技术介绍
在Linux系统(一种可免费使用的多用户的计算机操作系统)核心(Kernel)中,内存的最小单位是页,这有利于系统对内存的管理,用户所使用的内存地址是线性地址,它同物理地址之间的转换是通过两级或是三级页表的映像来实现的,这种多级页表的映像可以大大降低页表本身所占用的内存的大小。在Linux系统中,用户通常的使用内存的方法是调用系统提供的标准接口函数来分配和释放内存,但是通过这种方式返回的内存地址都是线性地址(或称为虚拟地址),并不是实际的物理地址,这种设计是同处理器本身的特性密不可分的。虽然每一个线性地址都对应着一个实际的物理地址,我们也可以通过线性地址转化为物理地址,而且对于此线性地址的读写就是对相应的物理内存的读写,但是这无法满足用户指定对某个物理地址进行读写操作的需求,因为Linux系统提供的内存分配函数只能满足用户在内存空间上的需求,而无法满足在内存位置上的需求。这就需要我们提供一种对指定物理内存进行读写操作的方法。 目前,我们所使用的计算机的物理内存通常只有几百兆字节(MB)的物理空间,例如256MB或512MB的物理内存空间,而在实际开发Linux系统应用程序时,每个开发进程都可以拥有自己的4GB的内存空间,这是为什么呢?这首先要从Linux系统核心(Kernel)所工作的内存模式说起,因为Linux系统核心(Kernel)工作于虚拟内存模式,即每一个虚拟页对应一个相应的系统内存的物理页,虚拟页和物理页之间的地址转换由硬件的页表来完成,对于一个特定的虚拟页,根据一条页表记录可以找到对应的物理页,或者是此页无法找到的提示(说明存在一个页错误)。 正是基于上述的″虚拟到物理″的页映像原理,Linux系统核心通过内存管理单元,将其虚拟内存映像到物理内存,并当系统所需的物理内存不足时,通过将暂时不用的物理内存中的数据资料交换到计算机硬盘上,当系统再次用到这些数据资料时再从计算机硬盘中交换回来,从而实现了扩展物理内存空间的目的。 但是上述这种″虚拟到物理″的页映像不总是一一对应的多个虚拟页(被不同的进程共享的页)有可能同时指向同一个物理页。在这种情况下,每个共享进程的页表记录将具有指向对应物理页的映像。如果有类似这样的情况,当系统核心想要释放特定的物理页时,事情会变得非常复杂,因为它必须遍历(遍历,英文名称Traversal,是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题。遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算的基础)所有的进程页表记录来查找指向这个物理页的引用,系统核心只能在引用数达到0(count=0)时才能释放这个物理页,因为它没有别的办法可以知道是不是还存在实际指向这个页的引用。这样当系统负载较高时会让虚拟内存变得非常慢。 当前,我们在生产线上使用内存测试工具测试内存的现有方法是在虚拟内存中分配尽可能多的虚空间,对其进行各种内存算法的测试,然而虚拟内存具体映像到的是真正的物理内存还是硬盘的交换分区,检测人员都不能清楚地知悉。 因此,现有的用于Linux系统平台下的物理内存的测试方法,虽然其测试程序实现起来非常简便,但是其测试方法的缺点在于由于使用系统提供的函数来分配内存,这些函数受到自身保护机制的限制,无法将系统中的空闲内存全部分配出来,因此其测试涵盖率低,根本无法对操作系统和测试程序本身所占用的系统物理内存进行检测;此外,也无法保障分配出来的内存在物理上是连续的;而且,经生产线使用发现,目前现有的内存测试方法很难测出物理内存的实际问题,即使发现问题,由于分配返回的内存地址是线性地址,检测人员也不知道内存真正出错或发生问题的实际物理位置。
技术实现思路
为了解决上述现有技术中的问题与缺陷,本专利技术的目的在于提供一种,利用一个Linux操作系统下的字符设备驱动程序激活一个字符设备,用户只需通过Linux提供的对档案的作业函数,就可以实现在用户层对指定物理内存的读写操作。该种方法对于内存分配的最小单位为页,页的大小视Linux系统核心(Kernel)的配置所定。除去系统自身保留的内存以及其它应用程序(包含测试程序本身)所占用的内存,可以直接访问到所有剩余的物理内存并进行测试,因此可以大大提高测试的涵盖率及准确性。 本专利技术所提供的一种,应用于Linux操作系统下的物理内存的检测过程中,此方法包含以下步骤激活一个字符设备驱动程序,以驱动一个字符设备对一个物理内存的物理页进行分配与释放;当字符设备成功激活后,以页为单位,按照物理内存的物理地址遍历整个物理内存;判断遍历是否完成,如果完成,则关闭字符设备,否则,通过Linux系统提供的档案作业函数设定所要访问的物理内存的物理地址;当成功设定所要访问的物理内存的物理地址后,通过Linux系统提供的档案作业函数将物理内存映像至用户空间;当物理内存被成功映像至用户空间后,通过内存检测算法对物理内存进行测试;通过Linux系统提供的档案作业函数解除物理内存与用户空间的映像关系;以及,通过Linux系统提供的档案作业函数释放字符设备中所储存的讯息,并继续以页为单位,按照物理内存的物理地址遍历整个物理内存,直至遍历完成。 综上所述,本专利技术的优点在于本专利技术提供了一种在Linux系统平台下,通过直接访问物理内存进行内存测试的方法。该方法借助于Linux系统核心(Kernel)的源代码对外开放的特性,并通过一个Linux操作系统下的字符设备驱动程序以及Linux系统提供的对档案的作业函数,便可深入到系统核心(Kernel)内部直接访问物理内存,并执行各种内存检测算法的测试。 因此,本专利技术的一种与现有技术相比,其优点在于本专利技术的内存测试方法的测试涵盖率高,除了系统核心及应用程序所占用的少量系统物理内存无法检测以外,本方法可对系统中其余的物理内存直接进行访问和检测,并可使测试人员清楚地知道所检测内存的确切物理位置,且按照此内存的物理地址进行测试,从而可方便准确地找到内存真正出错或发生问题的实际物理位置。此外,本专利技术的方法是在32/64位(bit)保护模式下实现的,因此检测效率较高。附图说明图1为本专利技术的一种的方法流程图;图2为本专利技术的测试方法中的字符设备对物理内存的物理页进行分配的方法流程图;图3为本专利技术的测试方法中的字符设备对物理内存的物理页进行释放的方法流程图;图4为本专利技术的测试方法中所测试的物理内存的页结构示意图;以及图5为本专利技术的测试方法中每个页区中的未被占用页依照伙伴算法链接而成的结构示意图。 其中,附图标记步骤100 激活字符设备驱动程序步骤101 判断字符设备是否成功激活步骤102 以页为单位按照物理内存的物理地址遍历整个物理内存步骤103 判断遍历是否完成步骤104 通过ioctl函数设定所要访问的物理内存的物理地址步骤105 判断设定是否成功步骤106 通过mmap函数将物理内存映像至用户空间步骤107 判断映像是否成功步骤108 通过内存检测算法对物理内存进行测试步骤109 通过munmap函数解除此映像关系步骤110 通过io本文档来自技高网
...

【技术保护点】
一种Linux系统下物理内存的测试方法,应用于Linux操作系统下的物理内存的检测过程中,该方法包含以下步骤:(a)、激活一字符设备驱动程序,以驱动一字符设备对一物理内存的物理页进行分配与释放;(b)、当所述字符设备成功激活 后,以页为单位,按照所述物理内存的物理地址遍历整个物理内存;(c)、判断遍历是否完成,如果完成,则关闭所述字符设备,否则,通过Linux系统提供的档案作业函数设定所要访问的所述物理内存的物理地址;(d)、当成功设定所要访问的 物理内存的物理地址后,通过Linux系统提供的档案作业函数将所述物理内存映像至用户空间;(e)、当所述物理内存被成功映像至用户空间后,通过内存检测算法对所述物理内存进行测试;(f)、通过Linux系统提供的档案作业函数解除该 物理内存与用户空间的映像关系;以及(g)、通过所述Linux系统提供的档案作业函数释放该字符设备中所储存的讯息,并继续以页为单位,按照该物理内存的物理地址遍历该整个物理内存,直至遍历完成。

【技术特征摘要】
所揭示的本发明的范围和精神的情况下,所作出的变化与修改,均属本发明的专利保护范围之内。关于本发明所界定的保护范围请参考所附的权利要求。权利要求1.一种Linux系统下物理内存的测试方法,应用于Linux操作系统下的物理内存的检测过程中,该方法包含以下步骤(a)、激活一字符设备驱动程序,以驱动一字符设备对一物理内存的物理页进行分配与释放;(b)、当所述字符设备成功激活后,以页为单位,按照所述物理内存的物理地址遍历整个物理内存;(c)、判断遍历是否完成,如果完成,则关闭所述字符设备,否则,通过Linux系统提供的档案作业函数设定所要访问的所述物理内存的物理地址;(d)、当成功设定所要访问的物理内存的物理地址后,通过Linux系统提供的档案作业函数将所述物理内存映像至用户空间;(e)、当所述物理内存被成功映像至用户空间后,通过内存检测算法对所述物理内存进行测试;(f)、通过Linux系统提供的档案作业函数解除该物理内存与用户空间的映像关系;以及(g)、通过所述Linux系统提供的档案作业函数释放该字符设备中所储存的讯息,并继续以页为单位,按照该物理内存的物理地址遍历该整个物理内存,直至遍历完成。2.如权利要求1所述的Linux系统下物理内存的测试方法,其特征在于,所述字符设备对所述物理内存的物理页进行分配还包含如下步骤获得所要分配的物理内存的物理地址;将所述物理地址转换为其所存在的页结构;判断该页是否被系统核心或其它硬件及应用程序占用,如果被占用则返回出错讯息并终止分配进程,如果未被占用则获取该页所在的页区结构;判断该页是否存在于该页区的伙伴算法结构中,如果该页不存在于该页区的伙伴算法...

【专利技术属性】
技术研发人员:陈怡陈玄同刘文涵
申请(专利权)人:英业达股份有限公司
类型:发明
国别省市:71[中国|台湾]

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

1
相关领域技术
  • 暂无相关专利