Linux系统平台上指定地址范围分配物理内存的方法技术方案

技术编号:2911805 阅读:999 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种Linux系统平台上指定地址范围分配物理内存之方法,系应用于Linux操作系统下的物理内存的测试进程中,本方法可根据所要分配内存的指定地址范围及大小,对系统中大量的物理内存进行指定地址范围的分配,而后将分配出来的内存块之信息传送出去,以用于对内存进行映像、检测和释放,进而为Linux操作系统下的物理内存的测试提供了有效的支持。

【技术实现步骤摘要】

本专利技术涉及一种内存分配方法,尤其涉及一种Linux系统平台上指定地址范围分配物理内存的方法
技术介绍
目前,内存测试是硬件诊断方案中一项非常重要的功能,其流程主要由两部分组成:内存分配和测试算法。其中,测试算法规定了读写内存的规则,不同的测试算法会针对不同的内存错误类型进行检测,现有技术的测试算法的相关内容在一些内存测试算法的文献中都有专门的介绍,在此不再赘述。内存分配,是进行内存读写测试的重要前提,它将直接关系到测试效果能否达成,例如:能否测试到真正的物理内存或者是否会重复测试同一块内存等。然而,不同的操作系统平台管理物理内存的方式有所不同,并没有统一的规则,因此内存分配是相对比较复杂的,需要针对不同的操作系统平台分别加以考虑。在Linux操作系统(一种可免费使用的多用户的计算机作业系统)平台上,由于用户态没有提供分配物理内存的方法,所以现有技术的做法只能通过驱动程序,在内核(Kernel)中实现分配物理内存的功能,然后对外提供接口。然而要使分配出的物理内存可以在用户态随意读写,还需要把分配到的物理内存映像到用户态的虚拟地址空间里,在这一点上现有技术中所使用的原理和方法都是相似的,在此不再赘述。而其中,主要的不同就在于分配物理内存的方法。目前现有技术的分配物理内存的方法有:方法一:一种分配指定物理内存页的方法。这种方法可以指定地址范围分配物理内存,此方法对于内存分配的最小单位为页,页的大小视Linux系统内核(Kernel)的配置所定。但是此方法每次只能分配一个内存页,效率太低,而且可能会占用相邻的其它内存页,造成不必要的资源浪费。因此,这种方法局限性较大,不适用于对大量物理内存的测试。方法二:直接调用Linux系统内核(Kernel)提供的分配成块的连续物理-->内存的接口。这种方法可以分配大量的物理内存,适用于对大量物理内存的测试,但此方法的主要缺点是无法指定地址范围进行物理内存的分配(这是由于Linux系统内核中组织物理内存的数据结构的限制,使其不便于指定地址范围进行物理内存的分配),因而也就无法用于针对特定的内存单元或者指定插槽上的内存进行测试。
技术实现思路
本专利技术所要解决的技术问题在于提供一种Linux系统平台上指定地址范围分配物理内存的方法,应用于Linux操作系统下的物理内存的测试进程中,此方法可根据所要分配内存的指定地址范围及大小,对系统中大量的物理内存进行指定地址范围的分配,进而为Linux操作系统下的物理内存的测试提供了有效的支持。位实现上述目的,本专利技术所提供的一种Linux系统平台上指定地址范围分配物理内存的方法,包含以下步骤:获得所要分配内存的指定地址范围及大小;针对系统中每一个节点(Node),查看其包含的内存的地址范围是否与指定地址范围有交集;如果有交集,则对各节点中的每一个页区(Zone),查看其包含的内存的地址范围是否与指定地址范围有交集;如果仍有交集,则在各页区的每中央处理器页框高速缓存(Per-CPU Page Frame Cache)和伙伴系统(Buddy System)中的内存块链表中,查找符合上述大小及指定地址范围要求的内存块;将查找到的内存块从内存块链表中经拆分后取出;以及在各页区中重复查找符合上述大小及指定地址范围要求的内存块并将其拆分后取出,直至分配满足了所要求的大小、或者各页区中已没有符合指定地址范围的内存块、或者各页区的空闲内存已减少至系统内核安全的下限后,传送所有分配出来的内存块的信息,以用于对内存进行映像、检测和释放。综上所述,本专利技术的优点在于:本专利技术所提供的一种Linux系统平台上指定地址范围分配物理内存的方法,可实现指定地址范围的、大量的物理内存的分配,其通过改进整体分配流程,提供了一次可分配多个内存页/块的功能接口,并利用内核中的数据结构,改进查找方法,加快查找速度,同时,通过拆分内存块的方法,避免了对多余-->内存页的占用。因此,不仅结合了现有技术中两种分配物理内存的方法的优点,同时也克服了它们所具有的缺陷,进而为Linux操作系统下的物理内存的测试提供了有效的支持。其主要的优点包含:分配到的是实际的物理内存;可以指定地址范围进行分配;可以一次分配大量的内存;不会占用相邻的其它内存页,因而避免了现有技术中可能造成不必要的资源浪费的问题;可以用于针对特定的内存单元或者指定插槽上的内存进行测试。以下结合附图和具体实施例对本专利技术进行详细描述,但不作为对本专利技术的限定。附图说明图1为本专利技术的伙伴系统中的内存块的结构图;图2为本专利技术的一种Linux系统平台上指定地址范围分配物理内存的方法的方法流程图;图3为本专利技术中的内存块按照指定的地址范围的要求分为三种情况的示意图;图4为本专利技术中部分内存页在指定地址范围内的内存块及其拆分进程的示意图;以及图5为本专利技术的方法的一实施例的示意图,图中表示了本专利技术的伙伴系统中的内存块在分配前和分配后的情况。其中,附图标记:10:内存块20:内存页101:小内存块10’,10”:拆分后余下的内存块具体实施方式以下,将结合附图部份对本专利技术的较佳实施方式作详细说明。在Linux系统中,内核(Kernel)包含了内存管理机制,内存是以页的形式在系统中存在的,每一个页代表了唯一的一块物理内存,系统通过一个数据结构来描述这个页的信息,并以阵列的形式按照页在物理内存的位置将页结构-->存放在一起,并通过一个全局的页结构指针指向阵列的首地址,因此说获得了阵列首地址,就可以得到内存中的任何一个页结构。当然我们并不能任意的操作内存中的每一个页,既然Linux系统有它自己的内存管理机制,我们就要在不损害系统规则的基础上来实现本专利技术的目标。下面就进一步说明本专利技术是如何实现的。在Linux系统启动以后,内核(Kernel)会把物理内存分配成多个页,并将每个页标为已被占用和未被占用(空闲)两种状态,被标为已被占用的页是被系统内核或是其它硬件及应用程序所占用的,用户是不允许使用的,因为对它的操作可能会导致整个系统的崩溃,因此我们的分配方法也不允许分配这一部分的内存,通常这一部分仅占整个内存的一小部分,大约有几十兆,如果这一部分的内存有问题,通常系统都无法启动,更不用说要对其进行分配及测试了。在Linux系统中,每个节点(Node)的物理内存被划分为多个块,称为页区(Zone),它表示内存中的一段区域。页区是用zone结构体描述的,它跟踪页框使用、空闲区域和锁等信息,页区的类型主要有:直接内仔仔取贝区(DMAZone)、普通页区(NORMAL Zone)和高端页区(HIGHMEM Zone)三种,页区可以使页面分配更有目的性,有利于减少内存碎片。直接内存存取页区(DMAZone)位于低端的内存空间,用于某些旧的工业标准结构(ISA)设备。普通页区(NORMAL Zone)的内存直接映像到Linux系统内核(Kernel)线性地址空间的高端部分,许多内核(Kernel)操作只能在普通页区(NORMAL Zone)中进行。每个页区(Zone)中的未被占用(空闲)页,依照伙伴(Buddy)算法[每个页区的页分配使用一种伙伴(Buddy)算法,此伙伴算法核心的页分配器引入了页区结构,一个页区就是一大块连续的物理页面,伙伴算法将整个页区划分为本文档来自技高网
...

【技术保护点】
一种Linux系统平台上指定地址范围分配物理内存的方法,应用于Linux操作系统下的物理内存的测试进程中,其特征在于,该方法包含以下步骤: 获得所要分配内存的指定地址范围及大小; 针对系统中每一个节点,查看其包含的内存的地址范围是否与该指定地址范围有交集; 如果有交集,则对所述各节点中的每一个页区,查看其包含的内存的地址范围是否与该指定地址范围有交集; 如果仍有交集,则在所述各页区的每中央处理器页框高速缓存和伙伴系统中的内存块链表中,查找符合所述大小及指定地址范围要求的内存块; 将查找到的内存块从该内存块链表中经拆分后取出;以及 在所述各页区中重复查找符合所述大小及指定地址范围要求的内存块并将其拆分后取出,直至分配满足了所要求的大小、或者所述各页区中已没有符合该指定地址范围的内存块、或者所述各页区的空闲内存已减少至系统内核安全的下限后,传送所有分配出来的内存块的信息,以用于对内存进行映像、检测和释放。

【技术特征摘要】
1、一种Linux系统平台上指定地址范围分配物理内存的方法,应用于Linux操作系统下的物理内存的测试进程中,其特征在于,该方法包含以下步骤:获得所要分配内存的指定地址范围及大小;针对系统中每一个节点,查看其包含的内存的地址范围是否与该指定地址范围有交集;如果有交集,则对所述各节点中的每一个页区,查看其包含的内存的地址范围是否与该指定地址范围有交集;如果仍有交集,则在所述各页区的每中央处理器页框高速缓存和伙伴系统中的内存块链表中,查找符合所述大小及指定地址范围要求的内存块;将查找到的内存块从该内存块链表中经拆分后取出;以及在所述各页区中重复查找符合所述大小及指定地址范围要求的内存块并将其拆分后取出,直至分配满足了所要求的大小、或者所述各页区中已没有符合该指定地址范围的内存块、或者所述各页区的空闲内存已减少至系统内核安全的下限后,传送所有分配出来的内存块的信息,以用于对内存进行映像、检测和释放。2、根据权利要求1所述的Linux系统平台上指定地址范围分配物理内存的方法,其特征在于,符合指定地址范围要求的内存块包含:内存块中的全部内存页都在该指定地址范围内的内存块;以及内存块中的部分内存页在该指定地址范围内的内存块。3、根据权利要求1所述的Linux系统平台上指定地址范围分配物理内存的方法,其特征在于,查找符合所要分配内存的大小要求的内存块系包含如下步骤:先在与所要求的大小相同的内存块链表中查找;以及当无法找到时,再在相比于所要求的大小更为大的内存块链表中查找。4、根据权利要求3所述的Linux系统平台上指定地址范围分配物理内存的方法,其特征在于,该查找方法包含:遍历内存块链表以及利...

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

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

1