《面向实时系统的内存算法.pdf》由会员分享,可在线阅读,更多相关《面向实时系统的内存算法.pdf(9页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 102880555 A (43)申请公布日 2013.01.16 C N 1 0 2 8 8 0 5 5 5 A *CN102880555A* (21)申请号 201210263549.0 (22)申请日 2012.07.28 G06F 12/06(2006.01) (71)申请人福州大学 地址 350108 福建省福州市闽侯县上街镇大 学城学园路2号福州大学新区 (72)发明人吴英杰 王一蕾 夏李波 唐文斌 许孝盛 (74)专利代理机构福州元创专利商标代理有限 公司 35100 代理人蔡学俊 (54) 发明名称 面向实时系统的内存算法 (57) 摘要 本发明涉及一种。
2、面向实时系统的内存算法, 采用红黑树数据结构用于快速查找所需的内存 块;该算法定义占用红黑树、空闲红黑树数组、向 后合并红黑树、向前合并红黑树,当有内存申请 时,从空闲红黑树中获取满足需求的空闲内存块, 判断空闲内存块是否需要分割,并作相应处理,然 后将空闲内存块加入占用红黑树,分配内存,并维 护相关红黑树;当有内存块需要释放时,根据释 放内存块首尾地址查询向前、向后合并红黑树,判 断是否需要向前、向后合并,并作相应处理,然后 将释放内存块加入空闲红黑树,释放内存,并更新 相关红黑树。该算法有利于提高内存分配时间效 率。 (51)Int.Cl. 权利要求书2页 说明书5页 附图1页 (19)中。
3、华人民共和国国家知识产权局 (12)发明专利申请 权利要求书 2 页 说明书 5 页 附图 1 页 1/2页 2 1.一种面向实时系统的内存算法,其特征在于:采用红黑树数据结构用于快速查找所 需的内存块;该算法定义以下四类红黑树: 占用红黑树 :用 于存放被占用的内存块信息,同时将该内存块的内存ID作为比较规则,当程序释放内存时 迅速根据内存ID定位到该内存块,释放内存; 空闲红黑树数组:定义到共18棵 红黑树,分别对应内存大小标记为1,2,3,4,6,512单位的内存块,每组 红黑树以地址为比较规则,存放大小大于等于该组标记但小于下一组标记的内存块信息; 向后合并红黑树:用于在内存回收过程中。
4、快速查找到能与释放 内存块向后合并的内存块;当有内存释放时,将与释放内存块相邻的下一内存块的首地址 作为比较规则,迅速查找出可合并块,并定位到空闲红黑树数组的相应位 置进行相关内存合并操作; 向前合并红黑树:用于在内存回收过程中快速查找到能与释放 内存块向前合并的内存块;当有内存释放时,将与释放内存块相邻的上一内存块的尾地址 作为比较规则,迅速查找出可合并块,并定位到空闲红黑树数组的相应位 置进行相关内存合并操作; 当有一个大小为d的内存申请时,按如下方法进行内存分配: 步骤1.1:通过查询的大小域,定位到第一个满足需求d的组 ,即;从k链表开始,为后面的每一个链表的统计 值加1,表明从k链表。
5、开始的所有后续链表里的内存块都有能力提供需求为d的内存;由于 及后面各组红黑树内的任意一个内存块均大于等于d,可选取该列表中的 第一块内存;如果的链表为空,则该内存区间不存在空闲的内存块,继续 向后面的红黑树寻找直至找到存在空闲块的组,获取该组的第一块;如果后续组别中均不 存在空闲块,返回第一个满足需求d的组的前一个组,该组里的内存块大 小在区间内,可能存在满足需求的块; 步骤1.2:获取满足需求的空闲内存块,如果的大小刚好满足 需求d,即,该块将被完全占用;如果的大小超出需求d,则 判断是否需要分割,如果被分割,将产生大小为 的剩余块,判断剩余块大小是否小于限定值,是则将 直接完全分配而不做。
6、分割,否则将分割,插入相应的 空闲组中; 步骤1.3:维护相关红黑树:将满足需求的空闲内存块从 、中删除,并加入;如果有剩 权 利 要 求 书CN 102880555 A 2/2页 3 余块产生,根据剩余块的大小,加入相应的 组内,同时以的首尾地址为比较规则,分别加入和 ; 当有一个ID为id、大小为d的内存块需要释放时,按如下方法进行内 存释放: 步骤2.1:在中查询ID为id的内存块,根据该块的首 地址和末尾地址查询和,判断是否存在可与 合并的向前合并块、向后合并块或其中之一,如果 存在,将合并为新的大内存块,然后插入相关红黑树,如果不存在,则直接将 插入相关红黑树; 步骤2.2:更新红黑。
7、树:将从中删除;如果存在 和或其中之一,将、或其中之一从相应 、中删除,并将合并后的新的 大内存块加入相应的、,如 果不存在,则直接将加入相应的、 。 权 利 要 求 书CN 102880555 A 1/5页 4 面向实时系统的内存算法 技术领域 0001 本发明涉及一种面向实时系统的内存算法。 背景技术 0002 在实时操作系统中,关于动态内存分配算法与回收算法,研究热点主要 集中在如何提高算法的可预测性、提高内存利用率及减少内存碎片方面。传统的 按需分配算法使用链表搜索使内存达到了较高的利用率,但是由于其时间效率 ,时间上存在着不可预测性。伙伴算法是一种“分而治之”的分配算法。伙伴概念的提。
8、 出使系统的内存分配时间效率达到了,完全符合可预测性的要求,但是由于伙伴的存 在导致了内存利用率并不高。 0003 一般而言,分配算法的基本策略可分为: 1、按序分配(Sequential Fit)。也称顺序查找法,包括最先匹配,最佳匹配,最差匹配 等。 0004 2、分段空闲链表(Segregated Free Lists)。包括简单分段存储和分段匹配。 0005 3、伙伴系统(Buddy System)。包括最常见的二分伙伴系统(Bianry Buddies),还 有weighted,Fibonacci buddies和Double buddies。 0006 4、索引匹配(Indexed。
9、 Fit)。它使用结构索引来执行一个想要的匹配策略。 0007 5、位图匹配(Bitmap Fit)。一个特殊的索引匹配。 发明内容 0008 本发明的目的在于提供一种面向实时系统的内存算法,该算法有利于提高内存分 配时间效率。 0009 本发明采用的技术方案是:一种面向实时系统的内存算法,采用红黑树数据结构 用于快速查找所需的内存块;该算法定义以下四类红黑树: 占用红黑树:用于存放被占用的内存块信息,同时将该内存块的内存ID 作为比较规则,当程序释放内存时迅速根据内存ID定位到该内存块,释放内存; 空闲红黑树数组:定义到共18棵 红黑树,分别对应内存大小标记为1,2,3,4,6,512单位的。
10、内存块,每组 红黑树以地址为比较规则,存放大小大于等于该组标记但小于下一组标记的内存块信息; 向后合并红黑树:用于在内存回收过程中快速查找到能与释放 内存块向后合并的内存块;当有内存释放时,将与释放内存块相邻的下一内存块的首地址 作为比较规则,迅速查找出可合并块,并定位到空闲红黑树数组的相应位 置进行相关内存合并操作; 向前合并红黑树:用于在内存回收过程中快速查找到能与释放 说 明 书CN 102880555 A 2/5页 5 内存块向前合并的内存块;当有内存释放时,将与释放内存块相邻的上一内存块的尾地址 作为比较规则,迅速查找出可合并块,并定位到空闲红黑树数组的相应位 置进行相关内存合并操作。
11、; 当有一个大小为d的内存申请时,按如下方法进行内存分配: 步骤1.1:通过查询的大小域,定位到第一个满足需求d的组 ,即;从k链表开始,为后面的每一个链表的统计 值加1,表明从k链表开始的所有后续链表里的内存块都有能力提供需求为d的内存;由于 及后面各组红黑树内的任意一个内存块均大于等于d,可选取该列表中的 第一块内存;如果的链表为空,则该内存区间不存在空闲的内存块,继续 向后面的红黑树寻找直至找到存在空闲块的组,获取该组的第一块;如果后续组别中均不 存在空闲块,返回第一个满足需求d的组的前一个组,该组里的内存块大 小在区间内,可能存在满足需求的块; 步骤1.2:获取满足需求的空闲内存块,如。
12、果的大小刚好满足 需求d,即,该块将被完全占用;如果的大小超出需求d,则 判断是否需要分割,如果被分割,将产生大小为 的剩余块,判断剩余块大小是否小于限定值,是则将 直接完全分配而不做分割,否则将分割,插入相应的 空闲组中; 步骤1.3:维护相关红黑树:将满足需求的空闲内存块从 、中删除,并加入;如果有剩 余块产生,根据剩余块的大小,加入相应的 组内,同时以的首尾地址为比较规则,分别加入和 ; 当有一个ID为id、大小为d的内存块需要释放时,按如下方法进行内 存释放: 步骤2.1:在中查询ID为id的内存块,根据该块的首 地址和末尾地址查询和,判断是否存在可与 合并的向前合并块、向后合并块或其。
13、中之一,如果 存在,将合并为新的大内存块,然后插入相关红黑树,如果不存在,则直接将 插入相关红黑树; 步骤2.2:更新红黑树:将从中删除;如果存在 和或其中之一,将、或其中之一从相应 、中删除,并将合并后的新的 说 明 书CN 102880555 A 3/5页 6 大内存块加入相应的、,如 果不存在,则直接将加入相应的、 。 0010 本发明的有益效果是把伙伴算法和最先匹配算法的优点很好的结合在了一起,在 搜索策略上使用了红黑树,使得算法在时间效率上实现了较大的改进。特别是在内存释放、 合并过程中,通过各自的索引规则,降低了时间复杂度。该算法摒弃了传统的使用链表的习 惯,大大的提高了内存块回收。
14、速率。同时,算法使用了分组分配,实现了将不同大小的空闲 内存块分别放在不同的堆里。这种存放策略实现了当不同大小的内存申请时,没必要再对 列表或其他数据结构进行遍历搜索,而只需要定位到相应的组堆里就能快速得到满足需求 的内存块,使内存分配效率接近常数时间。 附图说明 0011 图1是本发明实施例的工作原理图。 具体实施方式 0012 本发明面向实时系统的内存算法,如图1所示,在对目标内存块搜索时,不再局限 于传统的链表遍历式查找法,而是采用红黑树数据结构用于快速查找所需的内存块,实现 内存块在释放、回收过程中具有较高的时间效率。该算法定义以下四类红黑树: 占用红黑树:用于存放被占用的内存块信息,。
15、包括大小,物理地址,内存 ID等,同时将该内存块的内存ID作为比较规则,当程序释放内存时迅速根据内存ID定位到 该内存块,释放内存。 0013 空闲红黑树数组:定义到共18 棵红黑树,分别对应内存大小标记为1,2,3,4,6,512单位的内存块,每组 红黑树以地址为比较规则,存放大小大于等于该组标记但小于下一组标记的内存块信息。 如第5组红黑树的大小标记为8,第6组红黑树的大小标记为12, ,当有大小为10的内存块释放时,将该块存放于第5组里。 0014 向后合并红黑树:该红黑树不同于上述两类红黑树用于表 述实际的内存分配、回收的过程,而是用于在内存回收过程中快速查找到能与释放内存块 向后合并。
16、的内存块;当有内存释放时,将与释放内存块相邻的下一内存块的首地址作为比 较规则,迅速查找出可合并块,并定位到空闲红黑树数组的相应位置进行 相关内存合并操作。 0015 向前合并红黑树:用于在内存回收过程中快速查找 到能与释放内存块向前合并的内存块;当有内存释放时,将与释放内存块相邻的上 一内存块的尾地址作为比较规则,迅速查找出可合并块,并定位到空闲红黑树数组 的相应位置进行相关内存合并操作。该红黑树工作机理和向后合并红黑树 的工作机理类似。但是该红黑树找的是能与释放内存块向前合并的 说 明 书CN 102880555 A 4/5页 7 块,即末尾地址和释放内存块相邻,因此该树以上一内存块的尾地。
17、址作为比较规则。 0016 该算法引入概率思想统计域,实现自适应的内存碎片判断机制。统计域的作 用机理是:当内存块分割时,根据多余块的大小判读是否有必要分割。该方法根据程序频繁 地申请内存、分割内存块,统计各内存组的使用率,认为利用率较低的内存区域为可能产生 外部内存碎片的区域,尽量减少该区域块空闲内存块的产生以避免不必要的外部内存碎片 的产生。最先匹配算法有一个致命的缺点就是容易产生外部内存碎片,而产生碎片的原因 往往是因为由于是最先匹配寻找到第一个满足条件的内存块就直接分配,导致内存的分割 往往是整个内存块的前段,而后段的使用频率很低,这样就导致了前段部分积累较多碎片。 而使用了统计域,把。
18、内存块大小低于某个值得均视为可能产生内存碎片,减少这类空闲内 存块的产生。当然,利用率较低并不代表不利用。当有该区域大小的内存需求时,系统可利 用该区域已有的内存块,这样不影响其他内存块;如果该区域不存在合适的块,系统就可以 从较大的内存块中获取,避免了一段内存块被不断分割成较小内存块而产生的大量碎片积 累。同时,加入最大内存碎片,抑制可能产生大块“内存碎片”,以免造成过多浪费。 0017 当有一个大小为d的内存申请时,按如下方法进行内存分配: 步骤1.1:通过查询的大小域,将k定位到第一个满足需求d的 组,即;从k链表开始,为后面的每一个链表 的统计值加1,表明从k链表开始的所有后续链表里的。
19、内存块都有能力提供需求为d的 内存,即存在可能被使用的概率;由于及后面各组红黑树内的任意一 个内存块均大于等于d,都能满足系统的需求,一般选取该列表中的第一块内存;如果 的链表为空,则该内存区间不存在空闲的内存块,无法提供需求,继续向 后面的红黑树寻找直至找到存在空闲块的组,获取该组的第一块;如果后续组别中均不存 在空闲块,返回第一个满足需求d的组的前一个组,该组里的内存块大小 在区间内,可能存在满足需求的块。由于第 一个满足需求d的组的预定大小Mn为大于d,所以第一个组里的所有块是完全满足的,而 前一组的里所包含的块的大小是在区间 Mn-1, Mn 之间的,而d恰好也是满足包含 在区间里,因。
20、此可能存在相关块满足条件。 0018 步骤1.2:获取满足需求的空闲内存块,如果内存块的 大小刚好满足需求d,即,表示该块将被完全占用;如果 的大小超出需求d,则必须按照引入的概率统计策略判断是否需要分割,如果 被分割,将产生大小为的剩余块,定位该剩 余块到相应的组,如果该组的统计数据较小且符合可能形成碎片的大小, 则说明大小在该组别设定的内存大小以下的很少被利用,为了减少可能产生的内存碎片, 将直接完全分配而不做分割;如果该组被利用的可能性较大或余下的块仍很 大,为了提高内存利用率,将分割, 插入相应的空闲组中。 0019 步骤1.3:维护相关红黑树:将满足需求的空闲内存块从 说 明 书CN。
21、 102880555 A 5/5页 8 、中删除,并加入 ;如果有剩余块产生,根据剩余块的大小,加 入相应的组内,同时以的首尾地址为比较规则,分别加入 和。 0020 当有一个ID为id、大小为d的内存块需要释放时,按如下方法进 行内存释放: 步骤2.1:在中查询ID为id的内存块,根据该块的首 地址和末尾地址查询和,判断是否存在可与 合并的向前合并块、向后合并块或其中之一,如果 存在,将合并为新的大内存块,然后插入相关红黑树,如果不存在,则直接将 插入相关红黑树。 0021 步骤2.2:更新红黑树:将从中删除;如果存在 和或其中之一,将、或其中之一从相应 、中删除,并将合并后的新的 大内存块。
22、加入相应的、,如 果不存在,则直接将加入相应的、 。 0022 本算法把伙伴算法和最先匹配算法的优点很好的结合在了一起。同时,在搜索策 略上使用了红黑树,使得算法在时间效率上实现了较大的改进。特别是在内存释放、合并过 程中,通过各自的索引规则,使时间复杂度降低到。算法摒弃了传统的使用链表的 习惯,大大的提高了内存块回收速率。 0023 同时,算法使用了分组分配,实现了将不同大小的空闲内存块分别放在不同的堆 里。这种存放策略实现了当不同大小的内存申请时,没必要再对列表或其他数据结构进行 遍历搜索,而只需要定位到相应的组堆里就能快速得到满足需求的内存块,实现内存分配 效率达到了接近常数时间。 00。
23、24 统计域的利用,使算法实现自适应的内存碎片判断机制,把内存块大小低于某个 值得均视为可能产生内存碎片,减少这类空闲内存块的产生。当有该区域大小的内存需求 时,系统可利用该区域已有的内存块,这样不影响其他内存块;如果该区域不存在合适的 块,系统就可以从较大的内存块中获取,避免了一段内存块被不断分割成较小内存块而产 生的大量碎片积累。 0025 本发明为实时系统这种特殊的操作系统提供了一个较为合理的,在时间效率和内 存利用率上实现折中的内存管理方案。该算法可以通过替代原有的内存管理方案中的内存 管理算法,通过实际系统内对内存的申请、释放,实现算法在系统中的利用。 0026 以上是本发明的较佳实施例,凡依本发明技术方案所作的改变,所产生的功能作 用未超出本发明技术方案的范围时,均属于本发明的保护范围。 说 明 书CN 102880555 A 1/1页 9 图1 说 明 书 附 图CN 102880555 A 。