G06F12/06
1.一种固定内存的管理方法,其特征在于,包括如下步骤:
步骤1:预先向操作系统中申请一块内存区,并进行内存初始化;
步骤2:根据需要的内存块的大小寻对应的内存池,并从内存池中申 请空闲内存块,如果没有空闲的内存块,则向内存块大一级的内存池中寻 是否有空闲内存块,直到到一个大内存池中的一个空闲内存块;
步骤3:将到的内存块分解成新的内存池,并将新生成的内存池信息 记录入内存池链表中,修改内存池描述信息;同时,修改提供新内存池的内 存池描述信息;
步骤4:从新得到的内存池中分配一个空闲的内存块,并在内存使用完 毕后释放内存。
2.如权利要求1所述的方法,其特征在于,还包括步骤3:在系统复 位前,将各内存池的配置信息作为最佳配置数据记录入闪存中,供下次启动 初始化内存时使用。
3.如权利要求2所述的方法,其特征在于,所述步骤1中的内存初始 化具体包括如下步骤:
步骤a:系统首先判断是否有最佳分配方案数据,如果有,则按最佳方 案分配内存池和内存块;否则,执行步骤b;
步骤b:将所申请的内存区划分为大小不同的内存池,同一内存池中包 含有多个大小相同的内存块,同时初始化各内存池描述信息。
4.如权利要求1至3任一所述的方法,其特征在于,如果在所述步骤 2中在所有内存池中没有到一个内存池中的一个空闲内存块,则内存申请 失败。
技术领域
本发明涉及计算机领域中嵌入式实时操作系统中的内存管理方法。
背景技术
嵌入式实时操作系统中的内存管理是保障应用实时性的重要因素。为了 提高实时性能,避免内存碎片的产生,经常采用固定内存块的内存管理方法。 如图1所示,首先向操作系统申请一块大的内存区,然后,将该内存区分为 若干子区(内存池1、内存池2、内存池3、内存池4、内存池5),同一内 存池由若干大小相同的内存块组成。内存的申请和释放通过系统调用实现。
因此,现有技术内存池分配方法就存在如下的不足之处:
1、各内存池的大小是根据经验估计出来,一旦估计错误,可能导致系 统没有足够内存而崩溃;
2、如果内存池分配不合理,只有通过修改代码重新下载程序的方式才 能解决问题。
发明内容
本发明所要解决的技术问题在于提供一种固定内存的管理方法,可以通 过内存的动态调整来获得最佳内存的分配。
本发明的一种固定内存的管理方法包括如下步骤:
步骤1:预先向操作系统中申请一块内存区,并进行内存初始化;
步骤2:根据需要的内存块的大小寻对应的内存池,并从内存池中申 请空闲内存块,如果没有空闲的内存块,则向内存块大一级的内存池中寻 是否有空闲内存块,直到到一个大内存池中的一个空闲内存块;
步骤3:将到的内存块分解成新的内存池,并将新生成的内存池信息 记录入内存池链表中,修改内存池描述信息;同时,修改提供新内存池的内 存池描述信息;
步骤4:从新得到的内存池中分配一个空闲地内存块,并在内存使用完 毕后释放内存。
优选地,还包括步骤3:在系统复位前,将各内存池的配置信息作为最 佳配置数据记录入闪存中,供下次启动初始化内存时使用。
优选地,所述步骤1中的内存初始化具体包括如下步骤:
步骤a:系统首先判断是否有最佳分配方案数据,如果有,则按最 佳方案分配内存池和内存块;否则,执行步骤b;
步骤b:将所申请的内存区划分为大小不同的内存池,同一内存池 中包含有多个大小相同的内存块,同时初始化各内存池描述信息。
优选地,如果在所述步骤2中在所有内存池中没有到一个内存池中的 一个空闲内存块,则内存申请失败。
本发明具有如下的优点:
1、实现了内存的动态分配,避免了由于内存分配方案不合理导致内存 申请失败和系统异常;
2、将内存分配的最佳方案记录下来,并在下一次启动时自动采用最佳 分配方案。这样做避免了由于内存分配不合理导致频繁调用动态内存机制而 导致内存分配效率降低等异常的发生,提高了内存分配效率。同时,针对不 同的应用场景,可能内存分配方案需要不一样,这种情况下,采用固定分配 内存方式已经不能满足设备差异导致内存分配差异的需求。而本方案把动态 分配和静态分配很好的结合在一起,通过动态分配探测出最佳的内存分配方 案,再在下次重启动时采用最佳分配方案,使内存分配达到动静结合。
附图说明
图1传统固定长度内存分配方法;
图2内存池描述信息与内存池;
图3申请内存流程图;
图4内存分配前内存池描述信息和内存实施例1;
图5内存分配后内存池描述信息和内存实施例1;
图6内存初始化流程。
具体实施方式
本发明通过如下步骤进行详细的说明。
步骤1:预先向操作系统中申请一块大内存区;
步骤2:内存初始化,如图6所示,即:
将所申请的大内存区划分为大小不同的内存池,同一内存池中包含多个 大小相同的内存块(系统首先判断是否有最佳分配方案数据,如果有,则直 接按最佳方案分配内存池和内存块就可以了;如果没有,则按照默认配置分 配方案分配内存池和内存块,即按前述的方式进行划分);初始化各内存池 描述信息;内存池描述信息与内存池关系如图2所示,在内存池1-1中的内 存池信息包括:内存池中内存块大小、内存池中内存块数目、内存池首地址、 下个内存池描述信息地址,在内存池1-2、1-3(往后依次类推)的内存池信 息包括:内存池首地址、下个内存池描述信息地址,最后一个内存池的内存 池信息包括:内存池首地址、空地址。
步骤3:申请内存,如图3所示,即:
当需要内存块时,根据需要内存块的大小到对应的内存池,从内存池 中申请空闲内存块(这可能会需要从多个内存池中进行查);如果申请成 功,分配结束;若没有,则对内存池进行动态调整,执行3.1;
3.1内存块大一级的内存池中是否有空闲内存块,如果没有则向更大一 级的内存池中查空闲内存块,直到到一个更大内存池中的一个空闲内存 块,然后执行3.2;
如果所有内存池中都没有,则提示系统内存不足,内存申请以失败结束。
3.2将到的大的内存块分解成新的内存池,(其中包含若干需要申请 的小内存块),将新生成的内存池信息记录入内存池链表中,修改内存池描 述信息,包括被分解的内存池和新生成的内存池信息都要修改。同时,修改 提供新内存池的大内存池的描述信息。从新得到的内存池中分配一个空闲的 内存块。
步骤4:内存使用完之后,释放内存。
步骤5:系统复位前,将各内存池的配置信息(内存块大小和数目)作 为最佳配置数据记录入闪存(flash)中,供下次启动初始化内存时使用。
下面通过更具体的申请过程来进一步对本发明进行说明。
内存的初始状态如图4所示:
现在需要申请一个16字节的内存块,由图4中可知,16字节内存应到 16字节内存池中申请,但16字节内存池中已经没有空闲内存,此时将按如 下方法处理:
步骤1:查64字节内存池中是否有空闲内存,结果是有空闲内存;
步骤2:将1个空闲的64字节内存改为1个16字节内存块内存池;
步骤3:修改16字节和64字节内存池描述信息;
步骤4:在新的内存池中申请一个16字节内存;
步骤5:申请成功。申请成功后的内存情况如图5所示。
步骤6:一段时间后,系统复位,将新的内存分配方案写入flash中。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的 保护范围,因此,凡在本发明的精神和原则之内所作的任何修改、等同替换、 改进等,均应包含在本发明的保护范围之内。
本文发布于:2023-04-15 03:00:13,感谢您对本站的认可!
本文链接:https://patent.en369.cn/patent/3/87009.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |