一种内存管理方法和内存管理装置制造方法及图纸

技术编号:2821691 阅读:173 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供一种内存管理方法和内存管理装置,用于嵌入式实时操作系统中,该方法包括以下步骤:将系统内存区划分为若干个内存池;根据内存申请或内存释放的大小,确定所对应的内存池;获取系统在当前时刻对该内存池中内存块的需求个数;获取其他内存池当前时刻能提供给该内存池的空闲内存块个数之和;计算上述两者之差值;将该差值与该内存池中内存块个数的当前最优值比较,并将两者中的较大值作为新的当前最优值;在系统运行所述预定时间后,将获取到的当前最优值作为该内存池中内存块个数的最优值;根据获取到的所有内存池中内存块个数的最优值,对内存区进行内存分配。本发明专利技术可以对嵌入式实时操作系统中的内存池的大小进行合理的设定。

【技术实现步骤摘要】

本专利技术涉及嵌入式实时操作系统领域,尤其涉及一种内存管理方法和内存 管理装置。
技术介绍
嵌入式实时操作系统广泛应用于各种领域,近年来更是应用于高精尖技术 及对实时性要求很高的领域中,如在通讯系统中的应用,使得对嵌入式实时操 作系统的系统性能提出了很高的要求,而有效的内存管理是保障系统性能的重 要因素之一。有效的内存管理主要取决于内存分配的快速性、可靠性和高效性。 内存分配的快速性从嵌入式实时操作系统对实时性的要求出发,要求内存在分 配过程中尽可能的快,因而在嵌入式实时操作系统中,不可能采用通用操作系统中复杂而繁瑣的内存分配策略, 一般都采用简单、快速的内存分配方案;内 存分配的可靠性则要求内存分配的请求必须得到满足,在某些应用中,内存分 配失败可能会带来灾难性的后果,直接会导致系统崩溃;内存分配的高效性, 则要求内存分配尽可能地少浪费。为了满足嵌入式实时操作系统中的内存管理需求,通常采用的内存管理方 法是使用内存分块管理的方式,即将系统内存划分为包含若干固定尺寸的内存 块的集合(即内存池),如图1所示为现有技术中内存分配方法示意图,该内 存分配方法具体包括以下步骤步骤一根据需要预先为系统分配一块大的内存区;步骤二将该内存区划分为若干子区,即若干个内存池,同一个内存池由若干大小相同的内存块組成。上述每种内存池的内存块均可通过静态或动态链表组织成队列,在系统申 请内存时,从队列头取一空闲块,归还时归还到队列尾。为了便于管理,每一 种内存池还包括一控制管理头,该控制管理头包括该内存池中内存块的大小、内存块总量、空闲内存块数、该内存池中空闲块队列首指针以及空闲队列尾指 针等。从图1中可以看出, 一个内存池的大小有两个因素决定内存池中内存块 的大小和内存块个数,现有技术中对内存池中内存块的大小和内存块个数的设 定一般是根据系统管理者的大量统计和经验估算而得。上述内存分配方法具有查找速度快、系统效率高,同时不会产生内存碎片 等优点,而基于该种内存分配方法实现的内存管理高效简单,能够满足通讯系 统等对实时性要求很高的系统对内存管理的需求。但是,该内存分配方法也存 在不足之处,主要是对内存池的大小的设定比较困难,依赖于系统管理者的经 验,而这种设置在内存管理方法中又占了很重要的地位,直接影响内存分配的 快速性和高效性。
技术实现思路
有鉴于此,本专利技术实施例提供一种内存管理方法和内存管理装置,可以对 嵌入式实时操作系统中的内存池的大小进行合理的设定。为达到上述目的,本专利技术实施例提供一种内存管理方法,用于嵌入式实时 操作系统中,该方法包括以下步骤步骤A,将系统内存区划分为若干个内存池,所述若干个内存池中内存块 的大小和个数覆盖所述系统对内存需求的所有情况;步骤B,在所述系统存在内存申请或内存释放的操作时,根据所述内存申 请或内存释放的大小,确定所对应的第一内存池;步骤C,获取所述系统在当前时刻对所述第一内存池中内存块的需求个 数,作为第一数值;步骤D,获取第二内存池当前时刻能提供的空闲内存块个数之和,作为第 二数值,所述第二内存池为所有内存块大于所述第一内存池中内存块的内存 池;步骤E,获取所述第一数值和所述第二数值之差,作为第三数值; 步骤F,将所述第三数值与所述第 一 内存池中内存块个数的当前最优值比 较,并将两者中的较大值作为新的当前最优值,所述当前最优值的初始值为第一次获取到的第三数值;重复执行步骤B至步骤F,直至所述系统运行预定时间;步骤G,在系统运行所述预定时间后,将获取到的当前最优值作为所述第一内存池中内存块个数的最优值;步骤H,根据获取到的所有内存池中内存块个数的最优值,对所述内存区进行内存分配。所述获取第二内存池当前时刻能提供的空闲内存块个数之和,作为第二数值的方法具体为获取所述第二内存池中内存块个数的当前最优值; 获取所述系统在当前时刻对所述第二内存池中内存块的需求个数; 获取上述两者之差,作为提供给所述第一 内存池的空闲内存块个数; 获取所有所述第二内存池能提供给所述第一内存池的空闲内存块个数之和,作为所述第二数值。所述预定时间为所述系统中的应用程序全部运行完的时间。 所述步骤B之前还包括监控所述系统是否存在内存申请或内存释放的操作的步骤。 所述步骤H之前还包括在所述第一内存池中内存块个数的最优值为零时,释放所述第一内存池的 内存空间。所述若干个内存池按照其内包含的内存块的大小从小到大依次排列。 所述第 一 内存池的内存块个数的最优值的计算公式为<formula>formula see original document page 8</formula>其中,《为所述第一内存池中内存块个数的最优值,fl,(/)为所述系统在当 前时刻对内存池 .中内存块的需求个数,/为所述第一内存池的序号,,为所述 当前时刻,n为系统内存区划分的内存池的个数,j为整数变量,Max表示获 取所述预定时间内的最大值。本专利技术实施例还提供一种内存管理装置,用于嵌入式实时操作系统中,所述装置包括初始化模块,用于将所述系统内存区划分为若干个内存池,所述若干个内 存池中内存块的大小和个数覆盖所述系统对内存需求的所有情况;内存池确定模块,用于在所述系统存在内存申请或内存释放的操作时,根 据所述内存申请或内存释放的大小,确定所对应的第一内存池;第 一获取模块,用于获取所述系统在当前时刻对所述第 一 内存池中内存块 的需求个数,作为第一数值;第二获取模块,用于获取第二内存池当前时刻能提供的空闲内存块个数之 和,作为第二数值,所述第二内存池为所有内存块大于所述第一内存池中内存 块的内存池;第三获取4莫块,用于获取所述第一数值和所述第二数值之差,作为第三数值;更新模块,用于将所述第三数值与所述第 一 内存池中内存块个数的当前最 优值比较,并将两者中的较大值作为新的当前最优值,所述当前最优值的初始 值为第 一次获取到的第三数值;最优值确定模块,用于在系统运行预定时间后,将获取到的当前最优值作 为所述第一内存池中内存块个数的最优值;内存分配模块,用于根据获取到的所有内存池中内存块个数的最优值,对 所述内存区进行内存分配。所述第二获取模块进一步包括第一获取单元,用于获取所述第二内存池中内存块个数的当前最优值; 第二获取单元,用于获取所述系统当前时刻对所述第二内存池中内存块的需求个数;第三获取单元,用于获取上述两者之差,作为提供给所述第一内存池的空 闲内存块个it;第四获取单元,用于获取所有所述第二内存池能提供给所述第一内存池的 空闲内存块个数之和,作为所述第二数值。所述预定时间为所述系统中的应用程序全部运行完的时间。 所述装置还包括内存监控模块,用于监控所述系统是否存在内存申请或内存释放的操作。所述装置还包括内存释放模块,用于在所述第一内存池中内存块个数的最优值为零时,释 放所述第 一 内存池的内存空间。所述若干个内存池按照其内包含的内存块的大小从小到大依次排列。 所述第 一 内存池的内存块个数的最优值的计算公式为<formula>formula see original document page 10</formula>其中,《为所述第一内存池中内存块个数的最优值,"^)为所述系统在本文档来自技高网
...

【技术保护点】
一种内存管理方法,用于嵌入式实时操作系统中,其特征在于,包括以下步骤: 步骤A,将系统内存区划分为若干个内存池,所述若干个内存池中内存块的大小和个数覆盖所述系统对内存需求的所有情况; 步骤B,在所述系统存在内存申请或内存释放的操作时,根据所述内存申请或内存释放的大小,确定所对应的第一内存池; 步骤C,获取所述系统在当前时刻对所述第一内存池中内存块的需求个数,作为第一数值; 步骤D,获取第二内存池当前时刻能提供的空闲内存块个数之和,作为第二数值,所述第二内存池为所有内存块大于所述第一内存池中内存块的内存池; 步骤E,获取所述第一数值和所述第二数值之差,作为第三数值; 步骤F,将所述第三数值与所述第一内存池中内存块个数的当前最优值比较,并将两者中的较大值作为新的当前最优值,所述当前最优值的初始值为第一次获取到的第三数值; 重复执行步骤B至步骤F,直至所述系统运行预定时间; 步骤G,在系统运行所述预定时间后,将获取到的当前最优值作为所述第一内存池中内存块个数的最优值; 步骤H,根据获取到的所有内存池中内存块个数的最优值,对所述内存区进行内存分配。

【技术特征摘要】

【专利技术属性】
技术研发人员:熊伟程相平何胜杰
申请(专利权)人:北京天碁科技有限公司
类型:发明
国别省市:11[中国|北京]

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

1