CN103744742A - 一种内存坏块的修复方法 - Google Patents
一种内存坏块的修复方法 Download PDFInfo
- Publication number
- CN103744742A CN103744742A CN201310750619.XA CN201310750619A CN103744742A CN 103744742 A CN103744742 A CN 103744742A CN 201310750619 A CN201310750619 A CN 201310750619A CN 103744742 A CN103744742 A CN 103744742A
- Authority
- CN
- China
- Prior art keywords
- internal memory
- bad piece
- memory
- memory block
- piece
- 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
Links
Images
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明提供了一种内存坏块修复方法,其步骤包括:A、内存分区创建时,在底层接口中记录最低和最高地址;B、从最低地址往最高地址检测,发现内存坏块时执行步骤C;C、修复所述内存坏块。本发明在检测出坏块的基础上,对坏块进行修复,恢复被破坏的内存块的完整性,保证内存管理机制的正常运行和系统稳定。
Description
技术领域
本发明涉及内存管理技术领域,尤其涉及一种内存坏块修复方法。
背景技术
目前,基本上所有操作系统中的内存管理都采用了动态内存分配机制。在对动态分配的内存块进行使用的过程中,由于程序员的代码编写不规范或者其它原因,将会出现动态内存块的头部信息被破坏的情况,内存块一旦被破坏,系统在释放该内存块时往往会出现错误,严重的更会出现宕机。
目前,已经存在多种检测内存坏块的检测方法,例如,于2012年12月11日公开,公开号为CN102789407A的专利申请,能有效地检测出内存管理系统中出现的内存坏块,并提示坏块位置及信息。
但目前,还没有一种能够有效对被检测出来的内存坏块进行修复的方法。
发明内容
本发明需解决的技术问题是克服上述的不足,在不需要增加任何标记而消耗额外内存的条件下,提供一种能方便地检测出内存管理系统中出现的内存坏块,并提示坏块位置及信息的内存块有效性检测方法。
为解决上述的技术问题,所述内存坏块修复方法包括以下步骤:
A、内存分区创建时,在底层接口中记录最低和最高地址;
B、从最低地址往最高地址检测,发现内存坏块时执行步骤C;
C、修复所述内存坏块。
进一步的,所述步骤C包括:
C1、发现内存坏块时,找到所述内存坏块的前一个内存块;
C2、找到所述内存坏块的后一个内存块;
C3、提取并根据所述内存坏块的前一个内存块和后一个内存块的头部信息,计算出所述内存坏块已被破坏的头部信息;
C4、将计算得到的头部信息重新填充进所述内存坏块已被破坏的头部,完成修复所述内存坏块。
进一步的,C2中实现找到后一个内存块的方法包括:
C21、在发现内存坏块之后,获取下一个空闲的内存块;
C22、判断当前内存块是否有效,如果有效,则执行C23;如果无效,则当前内存块为被破坏的内存坏块,则执行C24;
C23、获取当前内存块的前一个内存块,继续判断该内存块是否有效,重复C22;
C24、判断该坏块是否为之前所述的内存坏块,如果是同一个内存坏块,则找到所述内存坏块的后一个内存块。
采用本发明方法后,在分区创建时,在底层接口中记录最低和最高地址,从最低地址往最高地址检测,发现内存坏块时对内存坏块进行修复,恢复被破坏的内存块的完整性,保证内存管理机制的正常运行和系统稳定,尤其解决多内存分区时的内存坏块修复,在多内存分区时,由于记录了内存分区的最低和最高地址,可以逐个内存分区检测,避免了只检测默认内存分区的问题。
附图说明
图1是本发明实施例内存管理系统中内存块结构示意图;
图2是本发明实施例内存坏块修复方法的流程示意图;
图3是图2中步骤C的具体方法流程图。
具体实施方式
为了使本领域相关技术人员更好地理解本发明的技术方案,下面将结合本发明实施方式的附图,对本发明实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实施方式仅仅是本发明一部分实施方式,而不是全部的实施方式。
下面结合附图和实施方式对本发明作进一步说明。
在内存管理系统中存在两种类型的内存块,包括:ALLOC块和FREE块。 ALLOC块为被使用、已被分配的内存块,在本文中简称分配块;FREE块为空闲的内存块,在本文中简称空闲块。
如图1所示,为内存管理系统中ALLOC块和FREE块的示意图。ALLOC块和FREE块交替存在,并且,不存在两个或两个以上的FREE块相邻,所以,FREE块后面相邻的空闲块一定为ALLOC块。并且,最后一个内存块为ALLOC块。
内存管理系统中,还分内存分区,如图中的Section A和Section B,可以理解,还可以有Section C、Section D等等,内存分区之间可以是连续的,也可以是分开的。
每个内存块(即ALLOC块和FREE块)都具有同样的结构,即包括头部信息和用户数据。一个内存块的头部信息中包含了前一个内存块的大小(prevSize)以及本内存块的自身大小(Size)。因而,中间内存块的头部信息的prevSize即为前一个内存块的大小(Size)、中间内存块的头部信息中的Size即为后一个内存块的prevSize。
如图2所示,本发明的内存坏块修复方法,包括:
A、内存分区创建时,在底层接口中记录最低和最高地址;
在内核中,内存初始化时,并没有把各个内存section的最低和最高地址记录下来。但每个内存分区创建的时候,底层的接口都是一致的,只要在这个底层接口中对最低和最高地址做好记录,那么我们就可以得到每个内存分区的最低和最高地址。
由于每个内存分区都记录了最低和最高地址,检测对应分区时,只要从对应的最低和最高地址所限定的地址空间检测,避免了“系统检测内存时只检测默认分区,超出默认分区的地址则认为无效,无法检测其他内存分区的内存坏块”的问题。
B、从最低地址往最高地址检测,发现内存坏块时执行步骤C;
C、修复所述内存坏块。
参阅图3,修复所述内存坏块的步骤具体包括:
C1:发现内存坏块时,知道所述内存坏块的前一个内存块;
已知,有多种检测内存管理系统中坏块的方法,如于2012年12月11日公开,公开号为CN102789407A的专利申请,自空闲块开始一个一个往下检测,检测出来的坏块一般为ALLOC块。检测出坏块的同时,也找到了该坏块的前一个内存块。
C2:找到所述内存坏块的后一个内存块;在本发明的实施例中,实现找到后一个内存块的方法包括:在发现坏块之后,获取下一个空闲的内存块(即空闲块);再判断当前这个获取的内存块是否有效,如果有效,既不是坏块,则再获取当前的内存块的前一个内存块,继续判断该内存块是否有效,循环检测出,直到发现坏块。如果检查出内存块无效,则是坏块,再判断检测出的坏块是否为之前的坏块,如果是同一个坏块,则找到了该坏块的后一个内存块。
C3:提取并根据所述坏块的前一个内存块和后一个内存块的头部信息,计算出该坏块已被破坏的头部信息;所述坏块的头部信息为前一个内存块的大小和后一个内存块的prevSize。因为,中间内存块的头部信息中的prevSize为前一个内存块的大小,其自身的大小则为后一个内存块的prevSize。
C4:将计算得到的头部信息重新填充进所述坏块已被破坏的头部,完成修复所述坏块。修复后系统可对该内存块进行正常释放,不影响系统的内存管理机制正常运行。
采用本发明方法后,在分区创建时,在底层接口中记录最低和最高地址,从最低地址往最高地址检测,发现内存坏块时对内存坏块进行修复,恢复被破坏的内存块的完整性,保证内存管理机制的正常运行和系统稳定,尤其解决多内存分区时的内存坏块修复,在多内存分区时,由于记录了内存分区的最低和最高地址,可以逐个内存分区检测,避免了只检测默认内存分区的问题。
以上仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (3)
1.一种内存坏块修复方法,其特征在于,所述内存坏块修复方法包括以下步骤:
A、内存分区创建时,在底层接口中记录最低和最高地址;
B、从最低地址往最高地址检测,发现内存坏块时执行步骤C;
C、修复所述内存坏块。
2.根据权利要求1所述的内存坏块修复方法,其特征在于:所述步骤C包括:
C1、发现内存坏块时,找到所述内存坏块的前一个内存块;
C2、找到所述内存坏块的后一个内存块;
C3、提取并根据所述内存坏块的前一个内存块和后一个内存块的头部信息,计算出所述内存坏块已被破坏的头部信息;
C4、将计算得到的头部信息重新填充进所述内存坏块已被破坏的头部,完成修复所述内存坏块。
3.根据权利要求2所述的内存坏块修复方法,其特征在于:C2中实现找到后一个内存块的方法包括:
C21、在发现内存坏块之后,获取下一个空闲的内存块;
C22、判断当前内存块是否有效,如果有效,则执行C23;如果无效,则当前内存块为被破坏的内存坏块,则执行C24;
C23、获取当前内存块的前一个内存块,继续判断该内存块是否有效,重复C22;
C24、判断该坏块是否为之前所述的内存坏块,如果是同一个内存坏块,则找到所述内存坏块的后一个内存块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310750619.XA CN103744742A (zh) | 2013-12-31 | 2013-12-31 | 一种内存坏块的修复方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310750619.XA CN103744742A (zh) | 2013-12-31 | 2013-12-31 | 一种内存坏块的修复方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103744742A true CN103744742A (zh) | 2014-04-23 |
Family
ID=50501762
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310750619.XA Pending CN103744742A (zh) | 2013-12-31 | 2013-12-31 | 一种内存坏块的修复方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103744742A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022105492A1 (zh) * | 2020-11-19 | 2022-05-27 | 华为技术有限公司 | 修复弱内存序问题的方法及装置 |
CN115617274A (zh) * | 2022-10-27 | 2023-01-17 | 亿铸科技(杭州)有限责任公司 | 一种具备坏块管理功能的存内计算装置及操作方法 |
CN117573417A (zh) * | 2024-01-15 | 2024-02-20 | 麒麟软件有限公司 | 一种基于异位字段替换的kabi修复方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100146346A1 (en) * | 1997-05-13 | 2010-06-10 | Micron Technology, Inc. | Diagnostic and managing distributed processor system |
CN102156675A (zh) * | 2010-02-12 | 2011-08-17 | 中兴通讯股份有限公司 | 一种内存分配方法及装置 |
CN102789407A (zh) * | 2012-06-18 | 2012-11-21 | 上海斐讯数据通信技术有限公司 | 内存块有效性检测方法 |
CN102866929A (zh) * | 2012-07-23 | 2013-01-09 | 上海斐讯数据通信技术有限公司 | 内存坏块修复方法 |
-
2013
- 2013-12-31 CN CN201310750619.XA patent/CN103744742A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100146346A1 (en) * | 1997-05-13 | 2010-06-10 | Micron Technology, Inc. | Diagnostic and managing distributed processor system |
CN102156675A (zh) * | 2010-02-12 | 2011-08-17 | 中兴通讯股份有限公司 | 一种内存分配方法及装置 |
CN102789407A (zh) * | 2012-06-18 | 2012-11-21 | 上海斐讯数据通信技术有限公司 | 内存块有效性检测方法 |
CN102866929A (zh) * | 2012-07-23 | 2013-01-09 | 上海斐讯数据通信技术有限公司 | 内存坏块修复方法 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022105492A1 (zh) * | 2020-11-19 | 2022-05-27 | 华为技术有限公司 | 修复弱内存序问题的方法及装置 |
CN115617274A (zh) * | 2022-10-27 | 2023-01-17 | 亿铸科技(杭州)有限责任公司 | 一种具备坏块管理功能的存内计算装置及操作方法 |
CN117573417A (zh) * | 2024-01-15 | 2024-02-20 | 麒麟软件有限公司 | 一种基于异位字段替换的kabi修复方法 |
CN117573417B (zh) * | 2024-01-15 | 2024-04-09 | 麒麟软件有限公司 | 一种基于异位字段替换的kabi修复方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2017201519A5 (zh) | ||
CN103218274B (zh) | 一种预防故障累加的方法和固态硬盘 | |
CN104461391A (zh) | 一种存储设备元数据管理处理方法及系统 | |
US8874830B2 (en) | Method for controlling memory array of flash memory, and flash memory using the same | |
CN106462500A (zh) | 用于执行损耗均衡操作的设备及方法 | |
CN105868122A (zh) | 快闪存储设备的数据处理方法及装置 | |
CN106445720A (zh) | 一种内存错误恢复方法和装置 | |
CN104899114B (zh) | 一种固态硬盘上的连续时间数据保护方法 | |
US10572335B2 (en) | Metadata recovery method and apparatus | |
US9524212B2 (en) | Method, device and operating system for processing and using burn data of NAND flash | |
CN106133704A (zh) | 内存故障隔离方法和装置 | |
CN103823642A (zh) | 用于Flash均衡存储的方法及系统 | |
CN102231137B (zh) | 一种数据存储系统及方法 | |
US9639441B2 (en) | Solid-state storage system, apparatus and method of writing data | |
CN103914397B (zh) | 闪存存储设备及其管理方法 | |
CN109144754A (zh) | 一种可靠性测试方法及装置 | |
CN107203328A (zh) | 存储管理方法和存储设备 | |
CN103744742A (zh) | 一种内存坏块的修复方法 | |
CN103064804A (zh) | 磁盘数据的访问控制方法及装置 | |
CN106648948B (zh) | 一种针对西数硬盘11号模块损坏的修复方法 | |
CN106201346B (zh) | 一种数据处理方法及存储设备 | |
CN111324549B (zh) | 一种存储器及其控制方法和装置 | |
WO2019037587A1 (zh) | 一种数据恢复方法及装置 | |
CN104184614A (zh) | 一种配置回滚方法及装置 | |
CN106030544A (zh) | 计算机设备内存的检测方法和计算机设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140423 |
|
RJ01 | Rejection of invention patent application after publication |