CN100365593C - 计算机系统的内存管理方法 - Google Patents
计算机系统的内存管理方法 Download PDFInfo
- Publication number
- CN100365593C CN100365593C CNB031488927A CN03148892A CN100365593C CN 100365593 C CN100365593 C CN 100365593C CN B031488927 A CNB031488927 A CN B031488927A CN 03148892 A CN03148892 A CN 03148892A CN 100365593 C CN100365593 C CN 100365593C
- Authority
- CN
- China
- Prior art keywords
- memory
- memory block
- application program
- block
- index
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Storage Device Security (AREA)
Abstract
本发明公开了一种计算机系统的内存管理方法,使应用程序能够更好地管理自己的内存,并且降低由于内存被错误地改写而可能导致的恶果。这种计算机系统的内存管理方法包含以下步骤:A.应用程序创建内存池,将内存池划分为用于存储内存池的控制信息的内存池控制域、用于放置数据的内存块存储区、以及用于标示每一块内存的使用状态和下一个可用内存块的索引的内存使用标记链;B.应用程序根据内存池控制域中的控制信息,向内存池申请内存块存储区中的内存块,并修改内存使用标记链中信息;C.应用程序根据内存池控制域中的控制信息,向内存池释放内存块存储区中的内存块,并修改内存使用标记链中信息。
Description
技术领域
本发明涉及计算机内存的管理方法,特别涉及独立于操作系统的计算机内存管理方法。
背景技术
内存管理是计算机系统中的一项重要工作,一般而言,内存管理是由操作系统完成的,应用程序在需要内存的时侯向操作系统申请,用完以后向操作系统释放。但是在一些特殊的应用领域,特别是对可靠性要求很高的领域,例如基于嵌入式芯片的实时应用系统中,为了防止因为申请内存得不到满足而产生的灾难性后果,往往采用先申请可能用到的最大内存,然后由应用程序自己管理内存的方法。 应用程序自行管理内存的一种常见做法是把内存分割成若干大小相同的内存块,然后用链表连接各内存块,在每个内存块的头部存放该内存块的控制信息。在这种技术中,一旦发生应用程序误写内存的操作,往往会覆盖内存块的控制信息,有可能会导致包括系统崩溃在内的严重后果。
造成这种情况的一个主要原因在于,内存块的控制信息和给应用层的内存块连续存放。
发明内容
本发明要解决的技术问题是提供一种计算机系统的内存管理方法,使得应用程序更好地管理自己的内存,并且降低由于内存被错误地改写而可能导致的恶果。
为了解决上述技术问题,在本方明所提供的计算机系统的内存管理方法中包含以下步骤:
A应用程序创建内存池,所述内存池包括用于存储内存池的控制信息的内存池控制域、用于放置数据的内存块存储区、以及用于标示每一块内存的使用状态和下一个可用内存块的索引的内存使用标记链;
B应用程序根据内存池控制域中的控制信息,向内存池申请内存块存储区中的内存块,并修改内存使用标记链中信息;
C应用程序根据内存池控制域中的控制信息,向内存池释放内存块存储区中的内存块,并修改内存使用标记链中信息。
其中,所述内存池的控制信息包括内存池中各内存块的大小、内存块存储区中内存块的总个数、当前可用的内存块的索引、当前可用的内存块个数、内存块存储区的首地址和内存使用标记链的首地址。
所述内存块存储区由预定数量的大小相同的内存块组成。
所述内存使用标记链由一个数组构成,数组的每个元素包括两个部分,分别标示相对应的内存块的状态标记,和下一个可用内存块的索引。
所述内存块的状态标记有两个状态:已用状态和空闲状态。
所述步骤A还包含以下步骤:
A1应用程序创建内存池控制域;
A2应用程序创建内存块存储区;
A3应用程序创建内存使用标记链,其中,将内存使用标记链中的内存块的状态标记置为空闲状态;将内存使用标记链中的下一个可用内存的索引置为内存块存储区中下一个内存块的索引;
A4应用程序填写所述内存池控制域的控制信息,其中,当前可用的内存块的索引填内存块存储区第一个内存块的索引,当前可用的内存块个数填写内存块存储区中内存块的总个数、内存块存储区的首地址和内存使用标记链的首地址填写相应区域的内存地址。
所述步骤B还包含以下步骤:
B1应用程序根据所述内存池控制域中的当前可用的内存块个数,判断是否还有可用内存块,如果没有,直接返回无效值,结束本流程,如果有,进入步骤B2;
B2计算机系统将所述内存池控制域中的当前可用的内存块的索引返回给应用程序,所述应用程序将该内存块的状态标记设置成已用状态,同时把当前可用的内存块的索引设置成该内存块的下一个可用内存块的索引,进入步骤B3;
B3所述应用程序将内存池控制域中的当前可用的内存块个数减一。
所述步骤C还包含以下步骤:
C1应用程序将需要释放的内存块在内存使用标记链中的使用标记设置成空闲状态,将该内存块的下一个可用内存块的索引设置成内存池控制域中的当前可用的内存块的索引,并把内存池控制域中当前可用的内存块的索引设置成需要释放的内存块的索引;
C2应用程序把内存池控制域中的当前可用的内存块个数加一。
另外,所述计算机系统是基于嵌入式芯片的实时应用系统。
通过比较可以发现,本发明的技术方案与现有技术的区别在于,将内存池分为各自独立存储的内存池控制域、内存块存储区以及内存使用标记链。其中该内存使用标记链标示每一块内存的使用状态和下一个可用内存块的索引。
这种技术方案上的区别,带来了较为明显的有益效果,即由于存储数据的内存块存储区独立于存储控制信息的内存池控制域和内存使用标记链,因此当误写内存时,影响仅限于内存块存储区范围内,极少会影响到存储控制信息的内存池控制域和内存使用标记链,因此本发明使误写内存操作可能导致的危害大大减轻。另外,本发明独立于操作系统,具有良好的可移植性。
附图说明
图1是本发明的一个实施例中应用程序创建内存池的流程图。
图2是本发明的一个实施例中应用程序向内存池申请内存的流程图。
图3是本发明的一个实施例中应用程序释放内存的流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述。
在本发明提出的计算机系统内存管理方法中,将内存池分为内存池控制域、内存块存储区和内存使用标记链。
其中,内存池控制域主要存储内存池的控制信息。内存池的控制信息包括内存池申各内存块的大小、内存块存储区中内存块的总个数、当前可用的内存块的索引、当前可用的内存块个数、内存块存储区的首地址和内存使用标记链的首地址。
内存块存储区由预定数量的大小相同的内存块组成,内存块中用于放置数据信息。内存块的大小和总个数信息都存放在内存池控制域中。
内存使用标记链由一个数组构成,所述数组中元素的个数和内存块的个数相同,所述数组中每一个元素分别和内存块存储区中每一个内存块一一对应,数组的每个元素包括两个部分,即相对应的内存块的状态标记和下一个可用内存块的索引。所述内存块的状态标记用来标示相对应的内存块的使用情况,有两个状态:已用状态和空闲状态。
需要注意的是,在本实施例中,内存池的上述三个部分可以使用不同的物理内存区域,但各部分内部保持连续,可以使用定义数组或动态申请大块内存的方法来实现。
由此可见,在本发明中,由于存储数据的内存块存储区独立于存储控制信息的内存池控制域和内存使用标记链,因此万一发生误写内存的操作,绝大多数情况下仅限于内存块存储区范围内,极少会影响到存储控制信息的内存池控制域和内存使用标记链,误写内存操作可能导致的危害大大减轻。
本发明提供的内存管理方法包括创建内存池、申请内存和释放内存三个步骤。下面参照附图,对这三个步骤进行详细描述和解释。
首先参照图1描述应用程序创建内存池的过程。
如图1所示,在步骤101中,应用程序创建内存池控制域。由于内存池控制域所需内存的大小是固定的,故直接为其申请固定大小内存即可。
在步骤102中,应用程序创建内存块存储区。该内存块存储区所需内存的大小由内存池中各内存块的大小和内存块总个数的乘积决定。
在步骤103中,应用程序创建内存使用标记链。该内存使用标记链所需内存的大小由所述内存块总个数确定。申请成功以后,将内存使用标记链中的内存块的状态标记置为空闲状态。将内存使用标记链中的下一个可用内存的索引置为内存块存储区中下一个内存块的索引,以形成一个单向链表。
在步骤104中,应用程序填写内存池控制域的控制信息。其中,内存池中各内存块的大小和内存块存储区中内存块的总个数是事先知道的,当前可用的内存块的索引填内存块存储区第一个内存块的索引,当前可用的内存块个数填写内存块存储区中内存块的总个数、内存块存储区的首地址和内存使用标记链的首地址填写相应区域的内存地址。
需要指出的是,内存池中各内存块的大小和内存块的总个数根据应用程序的需要事先给出,一般在实时应用程序中,为了避免需要内存时申请不到而造成的异常情况,可以将内存块的总数设定为应用程序可能需要的最大值。
下面参照图2描述应用程序向内存池申请内存的过程。
如图2所示,在步骤201中,应用程序根据内存池控制域中的当前可用的内存块个数,确定是否还有可用内存块。如果没有,直接返回无效值,结束本流程;如果有,进入步骤202。
在步骤202中,应用程序获取内存池控制域中的当前可用的内存块的索引,把该内存块的状态标记设置成已用状态,同时把当前可用的内存块的索引设置成该内存块的下一个可用内存块的索引,然后进入步骤203。
在步骤203中,应用程序把内存池控制域中的当前可用的内存块个数减一。
需要指出的是,应用程序可以根据得到的内存块索引和内存块存储区的首地址计算出所得内存块的内存地址,然后进行使用。
下面参照图3描述应用程序释放内存的过程。
如图3所示,在步骤301中,在内存使用标记链中,应用程序先将需要释放的内存块在内存使用标记链中的使用标记设置成空闲状态,再将该内存块的下一个可用内存块的索引设置成内存池控制域中的当前可用的内存块的索引,然后把内存池控制域中当前可用的内存块的索引设置成需要释放的内存块的索引。
在步骤302中,应用程序把内存池控制域中的当前可用的内存块个数减一。
需要指出的是,本方法尤其适用于基于嵌入式芯片的实时应用系统。
虽然通过参照本发明的某些优选实施例,已经对本发明进行了图示和描述,但本领域的普通技术人员应该明白,可以在形式上和细节上对其作各种各样的改变,而不偏离所附权利要求书所限定的本发明的精神和范围。
Claims (9)
1.一种计算机系统的内存管理方法,其特征在于,所述方法包含以下步骤:
A应用程序创建内存池,所述内存池包括用于存储内存池的控制信息的内存池控制域、用于放置数据的内存块存储区、以及用于标示每一块内存的使用状态和下一个可用内存块的索引的内存使用标记链;
B应用程序根据内存池控制域中的控制信息,向内存池申请内存块存储区中的内存块,并修改内存使用标记链中信息;
C应用程序根据内存池控制域中的控制信息,向内存池释放内存块存储区中的内存块,并修改内存使用标记链中信息。
2.根据权利要求1所述的计算机系统的内存管理方法,其特征在于,所述内存池的控制信息包括内存池中各内存块的大小、内存块存储区中内存块的总个数、当前可用的内存块的索引、当前可用的内存块个数、内存块存储区的首地址和内存使用标记链的首地址。
3.根据权利要求2所述的计算机系统的内存管理方法,其特征在于,所述内存块存储区由预定数量的大小相同的内存块组成。
4.根据权利要求3所述的计算机系统的内存管理方法,其特征在于,所述内存使用标记链由一个数组构成,所述数组的每个元素包括两个部分,分别标示相对应的内存块的状态标记,和下一个可用内存块的索引。
5.根据权利要求4所述的计算机系统的内存管理方法,其特征在于,所述内存块的状态标记有两个状态:已用状态和空闲状态。
6.根据权利要求4所述的计算机系统的内存管理方法,其特征在于,所述步骤A还包含以下步骤:
A1应用程序创建内存池控制域;
A2应用程序创建内存块存储区;
A3应用程序创建内存使用标记链,其中,将内存使用标记链中的内存块的状态标记置为空闲状态;将内存使用标记链中的下一个可用内存的索引置为内存块存储区中下一个内存块的索引;
A4应用程序填写所述内存池控制域的控制信息,其中,当前可用的内存块的索引填内存块存储区第一个内存块的索引,当前可用的内存块个数填写内存块存储区中内存块的总个数、内存块存储区的首地址和内存使用标记链的首地址填写相应区域的内存地址。
7.根据权利要求4所述的计算机系统的内存管理方法,其特征在于,所述步骤B还包含以下步骤:
B1应用程序根据所述内存池控制域中的当前可用的内存块个数,判断是否还有可用内存块,如果没有,直接返回无效值,结束本流程,如果有,进入步骤B2;
B2计算机系统将所述内存池控制域中的当前可用的内存块的索引返回给应用程序,所述应用程序将该内存块的状态标记设置成已用状态,同时把当前可用的内存块的索引设置成该内存块的下一个可用内存块的索引,进入步骤B3;
B3所述应用程序将内存池控制域中的当前可用的内存块个数减一。
8.根据权利要求4所述的计算机系统的内存管理方法,其特征在于,所述步骤C还包含以下步骤:
C1应用程序将需要释放的内存块在内存使用标记链中的使用标记设置成空闲状态,将该内存块的下一个可用内存块的索引设置成内存池控制域中的当前可用的内存块的索引,并把内存池控制域中当前可用的内存块的索引设置成需要释放的内存块的索引;
C2应用程序把内存池控制域中的当前可用的内存块个数加一。
9.根据权利要求1到8任一项所述的计算机系统的内存管理方法,其特征在于,所述计算机系统是基于嵌入式芯片的实时应用系统。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB031488927A CN100365593C (zh) | 2003-06-16 | 2003-06-16 | 计算机系统的内存管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB031488927A CN100365593C (zh) | 2003-06-16 | 2003-06-16 | 计算机系统的内存管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1567249A CN1567249A (zh) | 2005-01-19 |
CN100365593C true CN100365593C (zh) | 2008-01-30 |
Family
ID=34472407
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB031488927A Expired - Fee Related CN100365593C (zh) | 2003-06-16 | 2003-06-16 | 计算机系统的内存管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100365593C (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100395712C (zh) * | 2005-12-22 | 2008-06-18 | 华为技术有限公司 | 软件系统的资源管理方法 |
CN101582031B (zh) * | 2009-06-16 | 2013-01-16 | 中兴通讯股份有限公司 | 一种基于结构化语言的链表管理方法 |
CN103136104B (zh) * | 2011-11-24 | 2016-04-06 | 深圳市快播科技有限公司 | 一种内存管理方法和系统 |
CN103984639B (zh) * | 2014-04-29 | 2016-11-16 | 宁波三星医疗电气股份有限公司 | 一种动态内存分配方法 |
CN104317734A (zh) * | 2014-11-28 | 2015-01-28 | 迈普通信技术股份有限公司 | 一种适用于slab的内存分配方法及装置 |
CN109960472B (zh) * | 2019-04-01 | 2022-04-19 | 浙江中控技术股份有限公司 | 基于Flash的嵌入式文件系统及文件系统操作方法 |
CN112650577A (zh) * | 2019-10-12 | 2021-04-13 | 龙芯中科技术股份有限公司 | 内存管理方法和装置 |
CN112506813B (zh) * | 2020-12-29 | 2022-04-08 | 郑州信大捷安信息技术股份有限公司 | 一种内存管理方法和系统 |
CN112685188A (zh) * | 2021-03-22 | 2021-04-20 | 四川九洲电器集团有限责任公司 | 一种基于全局字节数组的嵌入式内存管理方法及装置 |
CN113467930B (zh) * | 2021-05-31 | 2023-04-14 | 翱捷科技股份有限公司 | 一种硬件管理共享内存的处理方法及装置 |
CN114218274A (zh) * | 2021-12-09 | 2022-03-22 | 浪潮云信息技术股份公司 | 一种基于rockadb存储引擎增大内存的方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2814555A1 (fr) * | 2000-09-25 | 2002-03-29 | Thomson Multimedia Sa | Systeme et procede de gestion memoire de coherence de donnees et reseau multiprocesseur associe |
CN1393780A (zh) * | 2001-06-28 | 2003-01-29 | 华为技术有限公司 | 自适应动态内存管理方法 |
-
2003
- 2003-06-16 CN CNB031488927A patent/CN100365593C/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2814555A1 (fr) * | 2000-09-25 | 2002-03-29 | Thomson Multimedia Sa | Systeme et procede de gestion memoire de coherence de donnees et reseau multiprocesseur associe |
CN1393780A (zh) * | 2001-06-28 | 2003-01-29 | 华为技术有限公司 | 自适应动态内存管理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN1567249A (zh) | 2005-01-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4604144B2 (ja) | 摩耗防止を備えたメモリ制御手段を有する記憶システムとメモリの管理方法 | |
US20180322041A1 (en) | Data storage device and method for operating data storage device | |
CN100365593C (zh) | 计算机系统的内存管理方法 | |
CN101387987B (zh) | 存储器装置、存储器控制方法和程序 | |
US8433844B2 (en) | Method for managing a memory device having multiple channels and multiple ways, and associated memory device and controller thereof | |
CN101379472A (zh) | 通过在装置不活动周期期间停用dram的未使用部分的刷新来减小功率消耗 | |
CN102841858A (zh) | 处理器核心堆栈扩展 | |
CN105518784A (zh) | 具有用于高可靠性操作的存储控制器的数据处理器和方法 | |
CN101853214A (zh) | 存储装置 | |
CN111324451A (zh) | 一种基于lte协议栈的内存块越界的定位方法及其系统 | |
CN110347611B (zh) | 存储器系统和存储器系统的操作方法 | |
CN107710175A (zh) | 存储器模块以及操作系统和方法 | |
CN110347613A (zh) | 多租户固态盘中实现raid的方法、控制器及多租户固态盘 | |
CN108052287A (zh) | 一种非易失性存储器的分区数据管理方法、机顶盒及介质 | |
CN107608906A (zh) | 减少片内flash擦除次数的方法 | |
CN112988611A (zh) | 非易失性存储器的数据写入方法、终端和可读存储介质 | |
WO2016173470A1 (zh) | 一种基于嵌入式多媒体卡eMMC的存储方法及系统 | |
CN106371950B (zh) | 一种实现raid级别转换的方法及装置 | |
CN106855845A (zh) | 堆空间的内存分配管理系统及嵌入式芯片 | |
CN111488118B (zh) | 管理闪存模块的方法及相关的闪存控制器与电子装置 | |
CN105336379B (zh) | 一种信息处理方法及固态存储器 | |
CN105630697B (zh) | 一种利用mram存储小文件的存储装置 | |
CN106407020A (zh) | 一种移动终端的数据库处理方法及其移动终端 | |
US7979606B2 (en) | Method for storing data | |
US7934073B2 (en) | Method for performing jump and translation state change at the same time |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20080130 Termination date: 20170616 |
|
CF01 | Termination of patent right due to non-payment of annual fee |