CN1950802A - 存储器分配 - Google Patents

存储器分配 Download PDF

Info

Publication number
CN1950802A
CN1950802A CNA2005800111893A CN200580011189A CN1950802A CN 1950802 A CN1950802 A CN 1950802A CN A2005800111893 A CNA2005800111893 A CN A2005800111893A CN 200580011189 A CN200580011189 A CN 200580011189A CN 1950802 A CN1950802 A CN 1950802A
Authority
CN
China
Prior art keywords
mapping
size
section
level
memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CNA2005800111893A
Other languages
English (en)
Inventor
伊万·布勒
皮埃尔·勒贝
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Jaluna SA
Original Assignee
Jaluna SA
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Jaluna SA filed Critical Jaluna SA
Publication of CN1950802A publication Critical patent/CN1950802A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)

Abstract

本发明公开了存储器分配。提供了一种管理数据存储器以改进对存储器分配请求的处理的方法。将存储器段根据其大小与不同的等级相关联。为每个等级定义2的幂值形式的不同的粒度大小。该粒度大小限定了与各等级相关联的段大小的范围。提供了一种多级位映射,其指示哪个等级包含空闲段以及空闲段的大小。每次当释放或分配存储器段时,更新该位映射。从而,提供了确定性的“最佳适合”方法,该方法允许在任务级别和中断级别下进行存储器段的分配和释放,并且该方法减少了存储器碎片。

Description

存储器分配
技术领域
本发明涉及一种对分配数据存储器的存储器块的请求进行处理的方法,并且涉及一种管理数据存储器的方法。
背景技术
在收到来自应用的请求时,操作***使用存储器分配器来分配空闲存储器。在使用页存储器管理单元(PMMU)的硬件中,将存储器分为固定大小的存储器页。因此,分配存储器的一种简单方法是分配空闲的固定大小的存储器页。该方法的一个缺点是它不灵活,尤其是对于需要分配小存储器块和大存储器块的应用。结果,浪费了存储器。
通常,应对存储器分配的这一问题有多种不同方法。一种方法被称为“首次适合(First Fit)”。该方法快,但是浪费存储器。一个示例是分配这样的存储器段,所述段的大小是最接近于且大于所请求的大小的2倍的值。例如,为满足对2049字节的请求,将导致分配4096字节。因此,浪费了2047字节。这产生了存储器碎片。在几百次或几千次的存储器分配和释放之后,在整个存储器上散布着空闲段,并且因为空闲段小且不连续,所以虽然存在足够的存储器剩余,但是很难分配足够大的段。
另一种方法被称为“最佳适合(Best Fit)”。在该方法中,存储器浪费是有限的,但是段分配需要搜索所有空闲段,以选择其大小最接近于所请求的存储器块的大小的段。该方法着手解决碎片问题,但不是确定性的(deterministic)。
实时操作***需要存储器的快速分配和少的碎片。此外,应该可以在任务和中断级别下执行存储器分配和释放。在后一情况下,响应时间和确定性(determinism)都很关键。目前,传统的“首次适合”和“最佳适合”算法不满足这些要求。
因此,需要一种管理存储器分配请求的改进方法。本发明旨在解决这一需要。
发明内容
根据本发明的一方面,提供了一种对分配数据存储器的存储器块的请求进行处理的方法,其中将数据存储器的多个段根据其大小分配到不同的等级,所述方法包括以下步骤:(a)接收对存储器块进行分配的请求;(b)确定最低的所述等级,该等级包含有大小等于或大于所请求的存储器块的段;(c)在步骤(b)所确定的等级中确定大小等于或大于所请求的存储器块的空闲段的可用性;以及(d)根据步骤(c)的确定结果来分配空闲段。
根据本发明的另一方面,提供了一种管理数据存储器的方法,该方法包括以下步骤:定义所述数据存储器的多个等级;为每个等级定义不同的粒度大小(granule size);针对每个等级定义存储器段的多个不同大小的不同范围,其中每个存储器段的大小与相应等级的粒度大小相关,并且其中,可以通过对包含有大小等于或大于所请求的存储器块的段的等级进行确定,并且分配该等级中的大小等于或大于所请求的存储器块的空闲段,来处理对存储器块进行分配的请求。
根据本发明的另一方面,提供了一种管理数据存储器的方法,所述数据存储器包括用于响应于存储器分配请求而进行分配的具有不同大小的存储器段,所述方法包括以下步骤:与大小和状态(空闲、已分配)无关地创建连续的存储器段的第一双链表;以及创建具有相同大小的空闲存储器段的第二双链表。
根据本发明的另一方面,提供了一种管理数据存储器的方法,该方法包括以下步骤:将数据存储器的多个空闲段根据其大小分配到不同的等级(level);以及提供包括不同级的位映射,其中一个级(stage)的位指示所述等级中的空闲段的可用性,另一级的位指示空闲段的状态和/或大小和/或位置。具体地,该位映射的最后一级直接指示段的状态以及空闲段的大小和位置。
根据本发明的另一方面,提供了一种管理数据存储器的方法,所述管理包括释放和分配所述数据存储器的段,所述方法包括,当释放存储器段时:确定与要释放的存储器段相邻的存储器段的状态;以及将要释放的存储器段与空闲的相邻存储器段进行合并。
根据本发明的另一方面,提供了一种计算机的操作***,该操作***适于执行上述方法中的任一方法。
根据本发明的另一方面,提供了一种在计算机上运行时适于执行上述方法中的任一方法的计算机程序。
根据本发明的另一方面,提供了一种其上存储有一组指令的存储介质,该组指令在被计算机执行时执行上述方法中的任一方法。
根据本发明的另一方面,提供了一种被编程为执行上述方法中的任一方法的计算机***。
根据本发明的另一方面,提供了一种被安排用来执行上述方法中的任一方法的处理器。
根据本发明实施例的算法提供了一种用于在任务级别和中断级别上分配并释放存储器段的确定性的“最佳适合”方法,从而减少了存储器碎片并提高了管理存储器的效率。特别地,该算法去掉了在存储器中扫描空闲段的循环,从而提供了确定性和可预测性。可以使用任何处理器来实现该算法。此外,可以使用硬件或软件来实现该算法。本发明旨在使浪费的内存最少。对于大于640字节的请求大小,浪费的存储器的百分比小于5%。
附图说明
下面参照附图描述本发明的示例性实施例,在附图中:
图1示出了数据存储器的第一等级的段大小的范围;
图2示出了指示存储器段的状态的三级位映射;
图3示出了确定性的“最佳适合”存储器段分配算法;
图4示出了用于确定位映射索引的算法;
图5示出了用于寻找位映射中指示空闲段的设置位的算法;
图6示出了在“最佳适合”存储器分配算法中所使用的数据结构;
图7示出了确定性的“最佳适合”存储器段分配算法;
图8示出了链接存储器段的第一双链表;以及
图9分别示出了链接存储器段的第一双链表以及链接具有相同大小的空闲存储器段的第二双链表。
具体实施方式
根据本发明的实施例,提供了一种算法,该算法的特征在于:根据存储器段的大小按不同的等级分配存储器段,针对各个等级使用不同的粒度大小(2的幂),并且使用多级(multiple-stage)位映射来提高对存储器块进行分配的请求进行处理时的速度。
更具体地,根据存储器段的大小按七个等级来分配存储器段。针对各个等级定义可接受的段大小的范围。具体地,针对各个等级定义粒度大小,并且将255个固定的不同的段大小定义为粒度大小的倍数。给定等级所支持的最大段大小为
maxSegSize=2N=256×G
其中,G是等级的粒度大小。
每一等级都表示包含有多个指针的表,所述指针指向具有为该等级定义的大小的空闲存储器段的列表。因此,每个表中有多达255个指针。
图1示出了为等级0定义的存储器段的大小。等级0具有32字节的粒度大小。等级0的段大小的范围是从<64字节到<8192字节。存在255个不同的段大小。
表1表示各等级的粒度大小和存储器段大小的范围:
  粒度大小  存储器段大小的范围   等级
  32字节  1字节至8191字节的段大小   0
  128字节  8K字节至64K-1字节的段大小   1
  1K字节  64K字节至256K-1字节的段大小   2
  8K字节  256K字节至2M-1字节的段大小   3
  64K字节   2M字节至16M-1字节的段大小   4
  512K字节   16M字节至128M-1字节的段大小   5
  4M字节   128M字节至1G-1字节的段大小   6
表1:根据等级的粒度大小和存储器段大小的范围
碎片与粒度大小直接相关。粒度大小越小,碎片就越少。另一方面,粒度大小越小,最大可管理的存储器段大小就越小。因此,需要在粒度大小和最大可管理的存储器段大小之间进行均衡。因此,根据要分配的存储器块的大小来选择粒度大小。例如,如果所请求的存储器块的大小不超过4K字节,则用于等级0的16字节的粒度允许支持范围为从1字节到4K字节的255个段大小。这显著地提高了存储器的使用效率。
如上所述,每个等级都与具有多达255个指针的表相关联。然而,不是扫描一等级的指针表,而是使用三级位映射,来分配空闲存储器段。从而提供了存储器分配算法的确定性的行为。该方法还显著地加速了对具有合适大小的空闲存储器段的识别。
图2示出了在本发明实施例中所使用的示例性三级位映射。该位映射包括根位映射1(第一级)、第二级位映射2和第三级位映射3。根位映射1是一个8位的字,它的每一位控制第二级位映射2的一个相关联的8位的字。如果该第二级位映射2的相关联的8位的字中的一位或更多位被设置为1,则将对应的根位映射的位也设置为1。类似地,第二级位映射2的每一位与第三级位映射3的32位相关联。如果设置了该第三级位映射3的32位的字中的一位或更多位,则将相关联的第二级位映射2的对应位也设置为1。因此,根位映射1的每一位表示第三级位映射3的256位。因此,第三级位映射3包括多个256位的串,每个串包括8个32位的字。
第三级位映射3的每一位与指针表中的一条目相关联。如将在下面进一步详细描述的,通过使用三级位映射,可以通过仅仅检查根位映射的一位来执行对空闲存储器段的256位的阵列(即针对一个等级的指针表)的扫描。从而,显著地简化并加速了扫描操作。
在本实施例中,根位映射1和第二级位映射2由8位的字构成。然而,在用于不同应用的另选实施例中,根位映射和第二级位映射可以包括32位的字,由此,根位映射的每一位表示1024位的第三级位映射。
本实施例的算法响应于存储器分配请求,分配最佳适合的存储器段。图3示出了该算法。如图4所示,所请求的存储器块的大小包含在32位的字10中。将所请求的存储器块的大小上舍入到最低粒度大小的最接近的因子,即,在本实施例中为32字节。
使用一组七个32位的字掩码(mask)11以及包含31个条目的查找表12来在单个操作中将合适的等级和对应的索引确定为相关联的位映射(根、第二和第三级位映射)。掩码11是预先确定的,每个掩码与多个等级之一相关联。
在初始化时计算查找表12的内容。在如上所述地根据最小粒度大小舍入了所请求的存储器块大小之后,从最高有效位开始确定32位字10的最高设置位。最高设置位表示对查找表12的一条目的索引,所述条目包含有与所请求的存储器块的大小相对应的等级。最高设置位还索引掩码11中的与该等级相关联的一个掩码。
这样确定的等级索引根位映射1的一关联位。如果该位被设置为1,则计算第二级位映射2的第三级位映射3的索引。通过将32位字10的内容与由查找表所索引的掩码进行逻辑组合而计算出第二级位映射2的第三级位映射3的索引。该逻辑组合是与/移位(AND/SHIFT)运算。
如果第三级位映射3的被索引位设置为1,则找到了所请求大小的空闲存储器段。否则,必须找到并分配更大的空闲段。如图5所示,搜索更大的段包括以下步骤:
-在第三级位映射3的当前32位字中寻找下一设置位;
-如果在该当前第三级32位字中没有对其他的位进行设置,则在第二级位映射2的当前8位字中寻找下一设置位;
-如果在当前第二级8位字中没有对其他的位进行设置,则在根位映射1中寻找下一设置位。
如果在根位映射1中没有对其他位进行设置,则没有可以满足该存储器分配请求的空闲存储器段,并返回空指针。
第一示例
在第一示例中,总存储器是1G字节,该存储器全部为空闲的。接到了分配400字节的请求。
在第一步骤中,根据最小粒度大小(即32字节(等级0的粒度大小))对所请求的存储器的大小进行舍入。这导致416字节的舍入大小,对应于二进制数110100000。该二进制数包含在32位字10(图4)中。
随后,确定该32位字10的最高设置位。这是第8位,对应于查找表12的第8个条目的索引。查找表12的该第八条目指示了与所请求的存储器块的大小相对应的等级,在本示例中为等级0。在下一步骤中,确定根位映射1的与等级0相关联的位的内容。在本示例中,当整个存储器空闲并且仅存在一个1G字节的空闲段时(即,根位映射1的除了最高有效位之外的所有位都为0),根位映射1的等级0的位为0。由于此结果,所以不执行与/移位运算来计算第二和第三级位映射的索引。
当等级0的位为0时,确定根位映射1的下一设置位。如以上说明的,这是根位映射1的最高位,即,与等级6相关联的位。
然后,确定第二级位映射2的最低设置位。这是第七位,即,第二级位映射2的最高有效位。类似地,确定与第二级位映射2的第七位相关联的第三级位映射3的32位字的最低设置位。这是该32位字的最高有效位,即,第31位。该位与指示要分配的空闲存储器段的物理存储器地址的指针相关联。
在本示例中,空闲存储器段的大小是1G-1字节(比较表1),而仅请求了416字节。因此,将空闲段分成两个段,即,一个大小<448(见图1)的已分配段和一个1G-(448+1)字节的新空闲段。相应地更新位映射。
第二示例
在第二示例中,总的存储器大小也是1G字节。除了等级0中的一个段(例如<1024字节)和等级1中的一个段(例如<32,768字节)之外,所有的存储器被分配。接收到对18,0303字节的请求。
在第一步骤中,将该请求舍入到18,048字节。这对应于二进制数100011010000000。因此,32位字10的最高设置位是第15位。
在下一步骤中,确定查找表12的第15个条目。根据所请求的存储器的大小,这是等级1的索引。
随后,确定根位映射1的等级1的位的状态。当在等级1中存在空闲存储器段时,该位被设置为1。
然而,对与存储器请求的大小相对应的二进制数(100011010000000)和掩码11的等级1条目(111111110000000,对应于7F80)执行与/移位运算。该运算的结果为10001101。
该运算结果对第二和第三级位映射的与最适合存储器的段大小相关联的那些位进行索引。在此示例中,这是第二级位映射2的第四位以及与该第二级位映射2的第四位相关联的第三级位映射3的32位字的第13位。这对应于第141(=运算结果)个指针,它指示作为最适合大小的<18,176字节的段的物理存储器地址。具体地,所述运算结果的三个最高有效位(100)对应于第二级位映射2的第4位,而所述运算结果的五个最低有效位对应于第三级位映射3的第13位。
然而,因为没有该大小的空闲存储段,所以第三级位映射的第13位为0。因此,如上所述,搜索第三和第二级位映射,直到找到第三级位映射3中的设置位为止。在本示例中,这是与等级1的第二级位映射2的最高有效位相关联的第三级位映射3的32位字的最高有效位,其对应于大小<32,768(第256个指针)的空闲存储器段。
随后,将该空闲存储器段分成两个段,即,一个大小<18,176字节的已分配段和一个大小为32,768-(18,176+1)字节的新空闲段。相应地更新位映射。
如这些示例所指出的,最初空闲存储器包含单个空闲段,在根位映射1、第二级位映射2和第三级位映射3的每一个中仅有一个位被设置。
第三级位映射3与指示空闲存储器段的地址的指针表相关联。根据第三级映射来更新该指针表。
当一空闲存储器段要被分配并且该段大于所请求的存储器时,根据所请求的大小将所述段分成两个子段。如果空闲子段要被分配但是还是太大,则可以将其再次分割等等。
算法的响应时间仅仅取决于位映射扫描操作。根位映射1使得能够在单个操作中确定每个等级中的空闲段的可用性。
当存储器的分配和释放操作不依赖于空闲或已分配段的数量或者所请求的存储器的大小时,这两个操作是确定性的和对称性的。这两个操作都不超过最大时间并且是完全可预测的。
参照图6,描述了在本发明的实施例中使用的数据结构。图6示出了七个等级中的每一等级中的根位映射1、第二级位映射2和第三级位映射3,以及与各等级的第三级位映射3相关联的指针表15。
存储器16包括空闲和已分配的存储器段。使用第一双链表17和第二双链表18来链接存储器段。第一双链表17与状态(空闲、已分配)无关地链接所有的存储器段。第二双链表18链接相同大小的空闲存储器段。
在第一双链表17中,段的顺序与其物理存储器地址一致。第二双链表18包括许多列表(list),每个列表链接具有相同大小的空闲段。将这些列表中的每一个都组织为LIFO(后进先出)列表。
每次当(如上所述地)分割空闲段或者(如下所述地)合并空闲段时,更新第一双链表17。每次当释放或分配存储器段时,还有当分割空闲段或合并空闲段时,更新第二双链表。当释放段时,将新空闲段添加到与该空闲段的大小相对应的LIFO列表。当分配空闲段时,将该空闲段从与其大小相对应的LIFO列表中去除。当将一空闲段分为两个子段时,从其LIFO列表中去除该空闲段,并将新的空闲子段根据其大小添加到另一LIFO列表。当合并多个空闲段时,将该空闲段从其各自的LIFO列表中去除,并将新的合并后的空闲段根据其大小添加到另一LIFO列表。在每种情况下,相应地更新位映射。
在图6中,第二双链表18包括分别与等级0、1和6相关联的三个列表19、20和21。
如上所述,当释放存储器段时,将其与相邻的空闲段合并以形成更大的空闲段。图7示出了所基于的算法。当释放段时,确定相邻段的状态。如果两个相邻段都是空闲的,则将所有这三个段合并。如果相邻段中仅有一个是空闲的,则将这两个空闲段合并。如果没有相邻段是空闲的,则不执行合并操作。结果,决不会有任何相邻的空闲段,这是因为在释放多个段中的一个时就将这些空闲段进行了合并。
使用第一双链表来确定相邻段的状态。图8示出了第一双链表17的结构。每个存储段具有头部25,头部25包括与段的状态(空闲、已分配)、段的大小有关的信息、以及指向前一段(prev-segment)的指针。具体地,由指针的最低有效位指示段的状态。不需要指向随后段的指针,因为可以根据所述段大小来确定随后段的地址。
图9示出了包括第一双链表17和第二双链表18的数据结构。具体地,图9示出了第一双链表链接了所有段,而第二双链表18仅链接了具有相同大小的空闲段。因此,空闲段的头部25包括指向具有相同大小的下一和前一空闲段的额外指针。如果仅存在具有任意给定大小的单个空闲段,则这些指针形成一个环并且指向该单个段的头部25。
对于已分配段,头部25由8个字节组成,而对于空闲段,头部25由12个字节组成;在后一情况下,额外的字节包含与具有相同大小的其他空闲段有关的信息,从而如上所述地形成第二双链表18。
要注意的是,在对分配最佳合适的存储器段进行的以上描述中,为了简单起见,不考虑为了形成头部25而另外所需的存储器。
表2示出了假设在每一等级的粒度是根据表1而选定的情况下,针对不同的存储器池大小,在本存储器分配算法中所使用的位映射和指针表所耗用的存储器。
  存储器池大小   指针表   位映射   合计
  32K字节   2K字节   67字节   2115字节
  256K字节   3K字节   100字节   3172字节
  2M字节   4K字节   133字节   4229字节
  16M字节   5K字节   166字节   5286字节
  128M字节   6K字节   199字节   6343字节
  1G字节   7K字节   232字节   7400字节
表2:指针表和位映射所耗用的存储器
此外,需要两个256字节的表来执行计算,以分别确定从最低有效位以及从最高有效位开始的第一个设置位。因此,需要另外的512字节。此外,双链表17、18对于每个已分配段耗用8字节,对于每个空闲段耗用12字节。
表3表示当执行分配和释放操作时本算法在不同处理器上的响应时间(以纳秒为单位):
  Intel i48633MHz   Pentium300MHz   PowerPC300MHz
 时钟精度   +/-838   +/-3   +/-60
 分配
 分配确切匹配   7000   390   240
 分配SCBM   15,000   865   540
 分配SUBM   17,000   1,074   554
 分配SRBM   17,000   1,144   600
 释放
 空闲,无合并   6,000   307   224
 空闲,合并1个相邻段   10,000   349   420
 空闲,合并2个相邻段   14,000   795   600
表3:在不同处理器上的响应时间
如表3所示,存在用于分配段的三个指令路径:
-SCBM(扫描第三级位映射的当前32位字)。在此情况下,在第三级位映射3的当前32位字中找到了空闲段(比较图5)。
-SUBM(扫描位映射的上级)。在此情况下,在第三级位映射3的当前32位字中没有空闲段,扫描当前的第二级位映射2以寻找空闲段(也参见图5)。
-SRBM(扫描根位映射)。在此情况下,在第三级位映射3的当前32位字中没有空闲段,当前的第二级位映射2也没有空闲段。通过扫描根位映射1而找到了空闲段。
还存在用于释放段(或使之空闲)的三个指令路径:
-在两个相邻段都已被分配时释放段。不执行合并操作。因此这是最快的路径。
-在有一个空闲相邻段时释放段。执行一个合并操作。
-在两个相邻段都空闲时释放段。执行两个合并操作。因此这是最慢的路径。
表3的各个响应时间是1000次操作的平均值。最差的情况比各1自的最佳情况(即,当分配段时确切匹配;当释放段时没有合并)慢大约两到三倍。然而,对于总量不超过1G字节的存储器,与空闲或已分配段的数量或者所请求的存储器的大小无关地,响应时间在33MHz的i486处理器上决不会超过17,000纳秒(ns),在300MHz的Pentium处理器上决不会超过1,144ns,在300MHz的PowerPC处理器上决不会超过600ns。因此,本算法是确定性的并且是可预测的。
应该注意的是,本发明不限于上述示例性实施例,对于本领域的技术人员显而易见的是,在根据权利要求所确定的保护范围内可以进行各种修改。

Claims (47)

1、一种对分配数据存储器的存储器块的请求进行处理的方法,其中将数据存储器的多个段根据其大小分配到不同的等级,该方法包括以下步骤:
(a)接收分配存储器块的请求;
(b)确定所述多个等级中的包含大小等于或大于所请求的存储器块的段的最低等级;
(c)在步骤(b)所确定的等级中确定大小等于或大于所请求的存储器块的空闲段的可用性;以及
(d)根据步骤(c)的确定结果来分配空闲段。
2、根据权利要求1所述的方法,所述方法还包括以下步骤:
(e)如果在步骤(c)中没有找到大小等于或大于所请求的存储器块的空闲段,则对下一更高等级重复步骤(c)和(d);以及
(f)重复步骤(e),直到分配了空闲段或者没有下一等级为止。
3、根据权利要求1或2所述的方法,其中将每一等级与2的幂值形式的不同的粒度大小相关联,并且分配给一等级的存储器段的大小与该相应等级的粒度大小相关。
4、根据权利要求3所述的方法,其中与一等级相关联的粒度大小限定了分配给该等级的存储器段之间的大小的差。
5、根据权利要求4所述的方法,其中所述步骤(a)还包括:在执行步骤(b)到(d)之前,将所请求的存储器块舍入到最小粒度大小。
6、根据任一前述权利要求所述的方法,其中每一等级与多个指针的表相关联,所述指针指示具有分配给相应等级的大小的空闲存储器段的存储器地址。
7、根据任一前述权利要求所述的方法,其中所述步骤(d)包括:返回指向已分配空闲段的指针。
8、根据任一前述权利要求所述的方法,其中所述步骤(d)包括:如果没有分配空闲段,则返回空指针。
9、根据任一前述权利要求所述的方法,其中,位映射指示存储器段的状态(空闲、已分配),所述位映射包括根位映射,根位映射的每一位指示所述多个等级中相关联的一个等级是否包含至少一个空闲段,并且其中所述步骤(b)还包括:根据所述根位映射,对包含大小等于或大于所请求的存储器块的段的所述最低等级进行确定。
10、根据任一前述权利要求所述的方法,其中,所述步骤(a)包括:接收指示所请求的存储器块的大小的二进制数据集,其中所述二进制数据集的每一位与查找表的关联于所述多个等级中的一个的一条目相关联;并且所述步骤(b)包括:确定所述二进制数据集的最高有效设置位,并且根据所述查找表的与所述最高有效设置位相关联的条目,对所述多个等级中的包含大小等于或大于所请求的存储器块的段的所述最低等级进行确定。
11、根据权利要求9和10所述的方法,其中,一组预定掩码中的每个掩码都与所述多个等级中的一个相关联,并且所述步骤(c)还包括:对与在所述步骤(b)中确定的所述最低等级相关联的掩码和所述二进制数据集执行逻辑运算,其中该运算结果是对所述位映射中指示大小等于或大于所请求的存储器块的段的状态的多个位的索引。
12、根据权利要求11所述的方法,其中,所述位映射包括多个第二级位映射和第三级位映射,所述根位映射的每一位指示所述多个第二级位映射中相关联的一个的位的状态,所述第二级位映射的每一位指示所述多个第三级位映射中的一个第三级位映射的相关联的预定数量个位的状态,所述第三级位映射的每一位指示相关联的段是否空闲,并且其中,所述运算结果是对第二级位映射的一个位以及第三级位映射的所述预定数量个位中的与第二级位映射的所述一个位相关联的一个位的索引,第三级位映射的所述一个位指示大小等于或大于所请求的存储器块的段的状态。
13、根据权利要求12所述的方法,其中,所述步骤(c)还包括:如果没有找到空闲段,则重复对第三级位映射的所述预定数量个位中的下一较高有效位的确定,直到找到空闲段或者在第三级位映射的所述预定数量个位中没有较高有效位为止。
14、根据权利要求13所述的方法,其中,所述步骤(c)还包括:如果没有找到空闲段,则重复对与第二级位映射的下一较高有效设置位相关联的第三级位映射的预定数量个位的确定,直到找到空闲段或者在所述一个第二级位映射中没有较高有效位为止。
15、根据权利要求14所述的方法,其中,所述步骤(c)还包括:如果没有找到空闲段,则重复对与根位映射的下一较高有效设置位相关联的第二级位映射的确定,直到找到空闲段或者根位映射中没有较高有效位为止。
16、根据权利要求12和15所述的方法,其中,第三级位映射的每一位与指示空闲存储器段的存储器地址的多个指针的表中的一条目相关联。
17、一种管理数据存储器的方法,该方法包括以下步骤:
定义所述数据存储器的多个等级;
针对每个等级定义不同的粒度大小;
针对每个等级定义存储器段的多个不同大小的不同范围,其中每个存储器段的大小与相应等级的粒度大小相关,并且其中,通过对包含大小等于或大于所请求的存储器块的段的等级进行确定,并且分配该等级中的大小等于或大于所请求的存储器块的空闲段,可以对分配存储器块的请求进行处理。
18、根据权利要求17所述的方法,其中,所述粒度大小限定了各等级中的存储器段之间的大小的差。
19、根据权利要求17或18所述的方法,该方法还包括:
生成指示每个段的状态(空闲、已分配)并且指示一等级是否包含至少一个空闲段的位映射。
20、根据权利要求19所述的方法,其中,所述位映射包括根位映射,每一等级与根位映射的一位相关联,并且多个第二级位映射和第三级位映射与所述段相关联,所述根位映射中的每一位指示所述多个第二级位映射中相关联的一个第二级位映射的多个位的状态,并且所述第二级位映射中的每一位指示所述多个第三级位映射中的一个的相关联的预定数量个位的状态。
21、根据权利要求19或20所述的方法,该方法还包括:
当分配段时,更新所述位映射。
22、根据权利要求19、20或21所述的方法,该方法还包括:
当释放段时,更新所述位映射。
23、根据权利要求17至22中任一项所述的方法,该方法还包括:针对每一等级生成多个指针的表,所述指针指示具有与相应等级相关联的大小的空闲存储器段的存储器地址。
24、根据从属于权利要求19至22中任一项的权利要求23所述的方法,其中,第三级位映射的每一位与所述指针表中的一条目相关联。
25、根据权利要求17至24中任一项所述的方法,该方法还包括:
生成查找表,其中,所述查找表的每个条目与指示所请求的存储器块的大小并且指示所述多个等级中的一个的二进制数据集中的一位相关联。
26、根据权利要求17至25中任一项所述的方法,该方法还包括:
生成一组掩码,其中该组掩码中的每一个与所述多个等级中的一个相关联,并且其中,对指示所请求的存储器块的大小的二进制数据集和与包含大小等于或大于所请求的存储器块的段的等级相关联的掩码进行逻辑运算,得出对该等级中的大小等于或大于所请求的存储器块的段的索引。
27、一种管理数据存储器的方法,所述数据存储器包括用于响应于存储器分配请求而进行分配的具有不同大小的存储器段,所述方法包括以下步骤:
与大小和状态(空闲、已分配)无关地创建连续的存储器段的第一双链表;以及
创建具有相同大小的空闲存储器段的第二双链表。
28、根据权利要求27所述的方法,其中,按照关联的存储器地址的顺序来排列第一双链表中的存储器段。
29、根据权利要求27或28所述的方法,该方法还包括以下步骤,当释放存储器段时:
使用第一双链表来确定与要释放的存储器段相邻的存储器段的状态;
将要释放的存储器段与空闲的相邻存储器段进行合并;以及
相应地更新第一和第二双链表。
30、根据权利要求27至29中任一项所述的方法,其中,各第二双链表是后进先出列表。
31、根据权利要求27至30中任一项所述的方法,该方法包括:在响应于请求而分配存储器段时,更新第二双链表。
32、根据权利要求27至31中任一项所述的方法,该方法还包括以下步骤,如果所确定的用于响应于请求进行分配的段大于所请求的存储器块,则:
分配所确定的段中的大得足以满足所述请求的一部分;
将剩余部分提供为新的空闲存储器段;以及
相应地更新第一和第二双链表。
33、根据权利要求27至32中任一项所述的方法,其中,每个段与一头部相关联,从而形成第一双链表,每个头部包括指示相关联的段的大小的信息、指示相关联的段的状态(空闲、已分配)的信息、以及指示前一段的存储器地址的指针。
34、根据权利要求30和33所述的方法,其中,取决于具有相同大小的前一和/或后一空闲段的可用性,并且根据所述后进先出列表中的具有相同大小的空闲段的顺序,与具有给定大小的每个空闲段相关联的头部还包括指示具有相同大小的前一和/或后一空闲段的存储器地址的指针。
35、一种管理数据存储器的方法,该方法包括以下步骤:
将所述数据存储器的多个空闲段根据其大小分配到不同的等级;以及
提供包括不同级的位映射,其中一个级的多个位指示所述等级中的空闲段的可用性,另一级的多个位指示各个段的状态和/或大小和/或位置。
36、根据权利要求35所述的方法,其中,所述一个级的多个位与指示空闲段的存储器地址的指针相关联。
37、根据权利要求35或36所述的方法,该方法还包括:
更新所述位映射,以反映存储器段的分配或释放。
38、一种管理数据存储器的方法,所述管理包括释放和分配所述数据存储器的段,所述方法包括以下步骤,当释放存储器段时:
确定与要释放的存储器段相邻的存储器段的状态;以及
将要释放的存储器段与空闲的相邻存储器段进行合并。
39、一种管理数据存储器的方法,该方法包括如权利要求17至26和/或权利要求27至34和/或权利要求35至37和/或权利要求38中任一项所述的方法。
40、一种计算机的操作***,所述操作***适于执行如任一前述权利要求所述的方法。
41、根据权利要求40所述的操作***,其中,所述操作***是实时操作***。
42、根据权利要求40或41所述的操作***,所述操作***适于在任务级别下执行如权利要求1至39中任一项所述的方法。
43、根据权利要求40至42中任一项所述的操作***,所述操作***适于在中断级别下执行如权利要求1至39中任一项所述的方法。
44、一种计算机程序,该计算机程序适于当在计算机上运行时执行如权利要求1至39中的任一项所述的方法。
45、一种其上存储有一组指令的存储介质,该组指令在由计算机执行时执行如权利要求1至39中任一项所述的方法。
46、一种被编程为执行如权利要求1至39中任一项所述的方法的计算机***。
47、一种被设置用来执行如权利要求1至39中任一项所述的方法的处理器。
CNA2005800111893A 2004-02-13 2005-02-14 存储器分配 Pending CN1950802A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
EP04290405A EP1619584A1 (en) 2004-02-13 2004-02-13 Memory allocation
EP04290405.1 2004-02-13

Publications (1)

Publication Number Publication Date
CN1950802A true CN1950802A (zh) 2007-04-18

Family

ID=34878325

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA2005800111893A Pending CN1950802A (zh) 2004-02-13 2005-02-14 存储器分配

Country Status (7)

Country Link
US (1) US20070156997A1 (zh)
EP (1) EP1619584A1 (zh)
JP (1) JP2007523412A (zh)
KR (1) KR20070015521A (zh)
CN (1) CN1950802A (zh)
CA (1) CA2556083A1 (zh)
WO (1) WO2005081113A2 (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102186216A (zh) * 2011-05-09 2011-09-14 北京傲天动联技术有限公司 在无线网络中提升站点漫游速度的方法
CN102253897A (zh) * 2011-07-26 2011-11-23 大唐移动通信设备有限公司 一种内存池管理方法及装置
CN102567522A (zh) * 2011-12-28 2012-07-11 北京握奇数据***有限公司 一种智能卡文件***的管理方法及设备
CN102934094A (zh) * 2010-06-16 2013-02-13 微软公司 用于文件***存储设备的分层分配
CN103488685A (zh) * 2013-09-02 2014-01-01 上海网达软件股份有限公司 一种基于分布式存储***的碎片文件存储方法
CN107077422A (zh) * 2015-02-18 2017-08-18 国际商业机器公司 确定存储器外部碎片的原因
CN107636610A (zh) * 2016-03-31 2018-01-26 慧与发展有限责任合伙企业 基于重要性水平将数据分配给电阻性存储器阵列
CN107783910A (zh) * 2016-08-25 2018-03-09 东芝存储器株式会社 存储器***以及处理器***

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7546588B2 (en) * 2004-09-09 2009-06-09 International Business Machines Corporation Self-optimizable code with code path selection and efficient memory allocation
GB2444746A (en) * 2006-12-15 2008-06-18 Symbian Software Ltd Allocating memory sectors for a data block by finding a contiguous area which starts with a sector with unused memory at least at much as the overlap
JP5224498B2 (ja) * 2007-02-28 2013-07-03 学校法人早稲田大学 メモリ管理方法、情報処理装置、プログラムの作成方法及びプログラム
US8015385B2 (en) * 2007-06-05 2011-09-06 International Business Machines Corporation Arrangements for memory allocation
EP2372530A4 (en) * 2008-11-28 2012-12-19 Shanghai Xinhao Micro Electronics Co Ltd METHOD AND DEVICE FOR DATA PROCESSING
JP5420972B2 (ja) * 2009-05-25 2014-02-19 株式会社東芝 メモリ管理装置
US9104517B2 (en) 2010-01-27 2015-08-11 Code Systems Corporation System for downloading and executing a virtual application
US9229748B2 (en) 2010-01-29 2016-01-05 Code Systems Corporation Method and system for improving startup performance and interoperability of a virtual application
US8763009B2 (en) 2010-04-17 2014-06-24 Code Systems Corporation Method of hosting a first application in a second application
US8782106B2 (en) 2010-07-02 2014-07-15 Code Systems Corporation Method and system for managing execution of virtual applications
US8806158B2 (en) 2010-09-22 2014-08-12 International Business Machines Corporation Intelligent computer memory management
CN102096722B (zh) * 2011-03-21 2013-03-27 华为数字技术(成都)有限公司 文件存储方法和装置
US8671261B2 (en) 2011-04-14 2014-03-11 Microsoft Corporation Lightweight random memory allocation
US8656133B2 (en) * 2011-05-05 2014-02-18 International Business Machines Corporation Managing storage extents and the obtaining of storage blocks within the extents
US8683169B2 (en) 2011-05-05 2014-03-25 International Business Machines Corporation Selecting an auxiliary storage medium for writing data of real storage pages
US8793444B2 (en) 2011-05-05 2014-07-29 International Business Machines Corporation Managing large page memory pools
US8799611B2 (en) 2011-05-05 2014-08-05 International Business Machines Corporation Managing allocation of memory pages
US9009392B2 (en) 2012-04-25 2015-04-14 International Business Machines Corporation Leveraging a hybrid infrastructure for dynamic memory allocation and persistent file storage
US10831728B2 (en) * 2012-05-29 2020-11-10 International Business Machines Corporation Application-controlled sub-LUN level data migration
US10831727B2 (en) * 2012-05-29 2020-11-10 International Business Machines Corporation Application-controlled sub-LUN level data migration
US10817202B2 (en) * 2012-05-29 2020-10-27 International Business Machines Corporation Application-controlled sub-LUN level data migration
FR3004611B1 (fr) * 2013-04-16 2015-05-15 Morpho Procede de gestion des ressources memoire d'un dispositif de securite, tel qu'une carte a puce, et dispositif de securite mettant en œuvre ledit procede.
US9195406B2 (en) * 2013-06-28 2015-11-24 Micron Technology, Inc. Operation management in a memory device
US9898197B1 (en) * 2015-03-26 2018-02-20 EMC IP Holding Company LLC Lock-free memory management
US9965382B2 (en) * 2016-04-04 2018-05-08 Omni Ai, Inc. Data composite for efficient memory transfer in a behavioral recognition system
US10628296B1 (en) 2016-04-04 2020-04-21 Omni Ai, Inc. Data composite for efficient memory transfer in a behavorial recognition system
US10073723B2 (en) * 2016-06-08 2018-09-11 Oracle International Corporation Dynamic range-based messaging
US20180113810A1 (en) 2016-10-20 2018-04-26 Avago Technologies General Ip (Singapore) Pte. Ltd. Method and system for efficient hashing optimized for hardware accelerated caching
US10162531B2 (en) 2017-01-21 2018-12-25 International Business Machines Corporation Physical allocation unit optimization
CN110633141A (zh) * 2019-06-25 2019-12-31 北京无限光场科技有限公司 一种应用程序的内存管理方法、装置、终端设备及介质

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0392941A (ja) * 1989-09-06 1991-04-18 Hitachi Ltd 領域管理方式
JPH05108462A (ja) * 1991-10-21 1993-04-30 Hokuriku Nippon Denki Software Kk 表形式エデイタにおける動的メモリの中間制御方式
JP3183719B2 (ja) * 1992-08-26 2001-07-09 三菱電機株式会社 アレイ型記録装置
US5490274A (en) * 1993-06-30 1996-02-06 Microsoft Corporation Modified buddy system for managing disk space
US5802599A (en) * 1994-02-08 1998-09-01 International Business Machines Corporation System and method for allocating storage in a fragmented storage space
US7146479B2 (en) * 2001-07-18 2006-12-05 City U Research Limited Method and apparatus of storage allocation/de-allocation in object-oriented programming environment
US5784699A (en) * 1996-05-24 1998-07-21 Oracle Corporation Dynamic memory allocation in a computer using a bit map index
US6182089B1 (en) * 1997-09-23 2001-01-30 Silicon Graphics, Inc. Method, system and computer program product for dynamically allocating large memory pages of different sizes
US6175900B1 (en) * 1998-02-09 2001-01-16 Microsoft Corporation Hierarchical bitmap-based memory manager
US6412053B2 (en) * 1998-08-26 2002-06-25 Compaq Computer Corporation System method and apparatus for providing linearly scalable dynamic memory management in a multiprocessing system
AUPP638698A0 (en) * 1998-10-06 1998-10-29 Canon Kabushiki Kaisha Efficient memory allocator utilising a dual free-list structure
US6324631B1 (en) * 1999-06-17 2001-11-27 International Business Machines Corporation Method and system for detecting and coalescing free areas during garbage collection
JP2001236249A (ja) * 2000-02-24 2001-08-31 Nec Corp メモリ管理装置およびメモリ管理方法
US6510505B1 (en) * 2001-05-09 2003-01-21 International Business Machines Corporation System and method for allocating storage space using bit-parallel search of bitmap
KR100474357B1 (ko) * 2001-12-26 2005-03-08 한국전자통신연구원 다단계 분할을 이용한 기억소자 할당방법
US6845427B1 (en) * 2002-10-25 2005-01-18 Western Digital Technologies, Inc. Disk drive allocating cache segments by mapping bits of a command size into corresponding segment pools

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102934094B (zh) * 2010-06-16 2014-12-03 微软公司 用于文件***存储设备的分层分配
US9575678B2 (en) 2010-06-16 2017-02-21 Microsoft Technology Licensing, Llc Hierarchical allocation for file system storage device
US9218135B2 (en) 2010-06-16 2015-12-22 Microsoft Technology Licensing, Llc Hierarchical allocation for file system storage device
CN102934094A (zh) * 2010-06-16 2013-02-13 微软公司 用于文件***存储设备的分层分配
CN102186216A (zh) * 2011-05-09 2011-09-14 北京傲天动联技术有限公司 在无线网络中提升站点漫游速度的方法
CN102253897B (zh) * 2011-07-26 2013-09-11 大唐移动通信设备有限公司 一种内存池管理方法及装置
CN102253897A (zh) * 2011-07-26 2011-11-23 大唐移动通信设备有限公司 一种内存池管理方法及装置
CN102567522B (zh) * 2011-12-28 2014-07-30 北京握奇数据***有限公司 一种智能卡文件***的管理方法及设备
CN102567522A (zh) * 2011-12-28 2012-07-11 北京握奇数据***有限公司 一种智能卡文件***的管理方法及设备
CN103488685A (zh) * 2013-09-02 2014-01-01 上海网达软件股份有限公司 一种基于分布式存储***的碎片文件存储方法
CN103488685B (zh) * 2013-09-02 2017-02-01 上海网达软件股份有限公司 一种基于分布式存储***的碎片文件存储方法
CN107077422A (zh) * 2015-02-18 2017-08-18 国际商业机器公司 确定存储器外部碎片的原因
CN107636610A (zh) * 2016-03-31 2018-01-26 慧与发展有限责任合伙企业 基于重要性水平将数据分配给电阻性存储器阵列
US10754582B2 (en) 2016-03-31 2020-08-25 Hewlett Packard Enterprise Development Lp Assigning data to a resistive memory array based on a significance level
CN107636610B (zh) * 2016-03-31 2021-01-26 慧与发展有限责任合伙企业 用于数据分配的方法和处理装置以及机器可读介质
CN107783910A (zh) * 2016-08-25 2018-03-09 东芝存储器株式会社 存储器***以及处理器***
CN107783910B (zh) * 2016-08-25 2021-05-28 东芝存储器株式会社 存储器***以及处理器***

Also Published As

Publication number Publication date
WO2005081113A8 (en) 2007-03-29
US20070156997A1 (en) 2007-07-05
KR20070015521A (ko) 2007-02-05
WO2005081113A3 (en) 2005-12-08
JP2007523412A (ja) 2007-08-16
CA2556083A1 (en) 2005-09-01
EP1619584A1 (en) 2006-01-25
WO2005081113A2 (en) 2005-09-01

Similar Documents

Publication Publication Date Title
CN1950802A (zh) 存储器分配
TW457427B (en) Method and system for dynamically partitioning a shared cache
CN1205549C (zh) 用于多-线程虚拟机的存储器分配的方法和装置
CN1289419A (zh) 压缩存储自由空间管理
US8850158B2 (en) Apparatus for processing remote page fault and method thereof
CN101063957A (zh) 管理锁定的高速缓冲存储器中的组替换的***和方法
CN1522405A (zh) 数据处理设备和同步数据处理设备中的第一与第二处理装置的方法
CN1940891A (zh) 多节点计算机中存储器分配的方法和装置
US8225065B2 (en) Hierarchical scalable memory allocator
CN108959113B (zh) 用于闪存感知堆存储器管理的方法和***
CN1234901A (zh) 半导体电路及其控制方法
CN1604055A (zh) 利用永久历史页表数据预取数据到高速缓存的装置和方法
WO1995029446A1 (en) Method for allocation of address space in a virtual memory system
WO2020174428A2 (en) Cache management of logical-physical translation metadata
CN1652092A (zh) 不同高速缓存级上具有关联集重叠同余组的多级高速缓存
CN1632765A (zh) 一种闪存文件***管理方法
CN1719422A (zh) 一种存储器文件数据虚拟存取方法
CN101046774A (zh) 使用替代页池管理dma写入页错误的计算机实现方法和装置
CN1940890A (zh) 多节点计算机中存储器分配的方法和装置
CN1975656A (zh) 备用设备管理的方法和***
CN1381797A (zh) 高速信息检索***
CN1898653A (zh) 用于互连网络上高效的有序储存的方法和装置
CN1866218A (zh) 软件***的资源管理方法
CN1920796A (zh) 用于将文件的数据存储在存储块中的高速缓存方法及***
US20060075006A1 (en) Storage model for large object columns

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
AD01 Patent right deemed abandoned
C20 Patent right or utility model deemed to be abandoned or is abandoned