CN100511158C - 一种内存监控管理的方法及*** - Google Patents

一种内存监控管理的方法及*** Download PDF

Info

Publication number
CN100511158C
CN100511158C CNB2007101455470A CN200710145547A CN100511158C CN 100511158 C CN100511158 C CN 100511158C CN B2007101455470 A CNB2007101455470 A CN B2007101455470A CN 200710145547 A CN200710145547 A CN 200710145547A CN 100511158 C CN100511158 C CN 100511158C
Authority
CN
China
Prior art keywords
memory
unauthorized access
overflow
access information
internal memory
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
Application number
CNB2007101455470A
Other languages
English (en)
Other versions
CN101110044A (zh
Inventor
高洪
郑兴友
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ZTE Corp
Original Assignee
ZTE Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by ZTE Corp filed Critical ZTE Corp
Priority to CNB2007101455470A priority Critical patent/CN100511158C/zh
Publication of CN101110044A publication Critical patent/CN101110044A/zh
Application granted granted Critical
Publication of CN100511158C publication Critical patent/CN100511158C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种内存监控管理的方法及***,包括:A、将内存管理模块集成到应用程序中;B、所述内存管理模块对应用程序运行时的内存分配与访问进行监控,跟踪记录内存泄漏和/或非法访问信息;C、定期上报所述内存泄露和/或非法访问信息给用户,以便于用户根据所述内存泄露和/或非法访问信息定位到相关代码。综上所述,本发明实施例提供了一种内存监控管理的方法及***,通过跟踪记录内存分配使用信息,在发生内存非法使用或内存泄露时,及时记录运行时日志,为开发人员分析定位问题提供充分依据,能够节约很大一部分开发调试时间。

Description

一种内存监控管理的方法及***
技术领域
本发明涉及软件技术领域,尤其涉及内存监控管理技术领域。
背景技术
c语言没有内存回收管理机制和内存访问越界检查,因此应用程序开发人员在进行程序设计时,较容易遇到内存泄漏和内存非法访问的问题。
内存泄露主要由于不断分配的内存无法及时地被释放,久而久之,***的内存耗尽。造成内存泄漏的原因比较多,有可能这本身是库中的bug,也有可能是因为程序员没有正确理解它们的接口说明文档造成错用等。
内存非法访问是指软件在进行内存访问时引起的错误,这种错误总体表现为两种形式:一种是读写地址引用错误;另一种是读写权限违反许可。
总之,由于内存泄漏和内存非法访问是发生在程序的运行期,因此出现这类问题后,定位到相关源代码往往比较困难。
发明内容
本发明提供一种内存监控管理的方法及***,用以解决内存泄漏和内存非法访问的定位问题。
本发明提供了一种内存监控管理的方法,包括:
A、通过重载函数策略将内存管理模块集成到应用程序中;所述重载函数策略是使用自定义的mem_alloc函数系列对***的malloc内存操作函数进行封装,增加内存使用监控代码,再以封装后的代码替换原malloc函数的实现,从而实现malloc函数的宏定义重载;
B、所述内存管理模块对应用程序运行时的内存分配与访问进行监控,跟踪记录内存泄漏和/或非法访问信息;
C、定期上报所述内存泄漏和/或非法访问信息给用户,以便于用户根据所述内存泄漏和/或非法访问信息定位到相关代码。
进一步地,上述方法中,所述步骤A具体包括:
A1、将内存管理模块源代码添加到目标工程中;
A2、引入重载函数;
A3、在程序初始化启动时根据应用程序实际需求,创建一预定大小的内存池;
A4、设置内存检测定时器,用于定期上报所述内存泄漏和/或非法访问信息给用户;
A5、设置__MEM_DEBUG__编译选项,该选项可以控制应用程序编译时是否集成内存管理模块,编译目标工程。
进一步地,所述步骤A3具体包括:
A31:分配一块预定义大小的内存作为内存池;
A32:利用边界保护方法,在内存池两端各预留预定大小的保护边界空间;
A33:利用伙伴算法将内存划分成多个内存块,所述内存块包含内存管理信息块和应用程序数据内存块。
所述步骤A3还包括:
A34:将所述内存块同时挂接在红黑树和宏定义链表上。
所述内存管理信息块中记录有内存分配的上下文信息,所述上下文信息包括:源代码文件名称和所在行号。
进一步地,所述步骤C具体包括:
定期上报所述内存泄漏和/或非法访问信息给用户;
用户对所述内存非法访问信息分析进行分析,定位内存非法访问代码行;和/或,比较前后内存泄漏信息是否有差异,当确认有差异时,判定存在内存泄漏,并且定位内存泄漏代码行。
本发明还提供了一种内存监控管理的***,包括:
内存管理模块,用于对应用程序运行时的内存分配与访问进行监控,跟踪记录内存泄漏和/或非法访问信息;
集成模块,用于通过重载函数策略将内存管理模块集成到应用程序中;所述重载函数是使用自定义的mem_alloc函数系列对***的malloc内存操作函数进行封装,增加内存使用监控代码,再以封装后的代码替换原malloc函数的实现,从而实现malloc函数的宏定义重载;
信息上报模块,用于定期上报所述内存泄漏和/或非法访问信息给用户,以便于用户根据所述内存泄漏和/或非法访问信息定位到相关代码。
进一步地,上述***中,所述集成模块具体包括:
源代码添加单元,用于将内存管理模块源代码添加到目标工程中;
函数重载单元,用于引入重载函数;
内存池创建单元,用于在程序初始化启动时根据应用程序实际需求,创建一预定大小的内存池。
所述内存池包括:两端保护边界空间和多个内存块,所述内存块包括:内存管理信息块和应用程序数据内存块;
内存管理信息块,用于记录内存分配的上下文信息,所述上下文信息包括:源代码文件名称和所在行号;
应用程序数据内存块,用于存储应用程序的数据。
所述内存块同时挂接在红黑树和宏定义链表上。
综上所述,本发明实施例提供了一种内存监控管理的方法及***,通过使用内存池、伙伴算法、红黑树算法以及宏定义链表这几项关键技术,在很大程度上保证了应用程序内存使用安全,提高了内存分配效率,利用内存管理信息块跟踪记录内存分配使用信息,在发生内存非法使用时,及时记录运行时日志,为开发人员分析定位问题提供充分依据,能够节约很大一部分开发调试时间。
附图说明
图1为本发明实施例所述内存管理模块集成的流程示意图;
图2为本发明实施例所述内存池的结构示意图;
图3为本发明实施例所述***的结构示意图。
具体实施方式
本发明实施例的目的是为C语言(包括VC、C++等)应用程序开发者提供一种高效的内存监控和管理模块,该模块可以集成到应用程序中,并对应用程序运行时的内存分配与访问进行监控,跟踪记录内存泄漏和非法访问信息,为开发人员快速准确定位程序问题提供回溯依据。
下面结合附图对本发明实施例所述方法进行详细说明。
首先,将内存管理模块集成到应用程序中;具体如图1所示,图1为内存管理模块集成到应用程序的流程示意图,具体包括以下步骤:
步骤101:将内存管理模块源代码添加到目标工程中。
步骤102:在目标C文件中增加#include"./mem/dmalloc.h"引用,引入重载函数;具体的说就是,对C语言库最基本的内存分配、释放、复制、设置、比较函数和字符串操作函数作宏定义重载,即用自定义的mem_alloc函数系列对***的malloc等内存操作函数进行封装,增加内存使用监控代码,再以封装后的代码替换原函数的实现,从而实现函数的宏定义重载,以下简称重载函数。
使用自定义的mem_alloc重载ma11oc的示例:
#undef malloc
#define malloc(size)mem_alloc((size),__FILE__,__LINE__)
通过重载函数策略,内存监控模块确保了重载前后应用程序对C语言库函数的接口调用的一致性,同时也实现了内存管理模块的自定义功能。
步骤103:在程序初始化启动时根据应用程序实际需求,创建一定大小的内存池;
步骤104:设置内存检测定时器;
步骤105:设置__MEM_DEBUG__编译选项,该选项可以控制应用程序编译时是否集成内存管理模块,编译目标工程。
其中,步骤103中,创建内存池的过程具体包括:
采用在内存池的边界设置SAFE_MARGIN(边界保护)的方法,在内存池两端各预留一定大小(如1M)的保护边界空间,具体应用中可以根据实际情况修改保护空间的大小,确保该内存块的安全;
利用伙伴算法对大内存块进行细分,每块内存块包含一个内存管理信息块(area_t)和应用程序数据内存块(data),内存管理信息块中记录了内存分配时的源文件、代码行、分配时间、使用标志和内存块大小的级别,为内存泄漏检查和内存使用监控提供依据;
将所述内存块同时挂接在红黑树和宏定义链表上。
上述对分配一整块内存块(***预定义大小)进行细分后的内存池结构,具体如图2所示。
当应用程序调试启动后,定期上报所述内存泄漏和/或非法访问信息给用户,以便于用户根据所述内存泄漏和/或非法访问信息定位到相关代码,包括:
定期上报所述内存泄漏和/或非法访问信息给用户;
用户对所述内存非法访问信息分析进行分析,定位内存非法访问代码行;和/或,比较前后内存泄漏信息的差异来诊断是否存在内存泄漏,定位内存泄漏代码行。
具体的说就是,在应用程序调时过程中,内存管理模块对所述内存块的状况进行监控,并定期上报内存泄漏和/或非法访问信息,将内存非法访问信息记录在内存非法访问日志文件(如dmem.log文件)中,该文件记录了内存越界访问、访问无效指针、内存重复分配代码所在源文件、源代码行号和操作的内存地址;将内存泄漏信息记录在内存泄漏日志文件(如memleak文件)中,该文件记录了内存分配代码所在源文件、源代码行号、操作的内存地址、内存分配时间和分配的内存块大小。
这样,用户可以通过对dmem.log文件的分析,定位内存非法访问;通过实时监控memleak文件内容的变化,定位内存泄漏问题。具体的内存泄漏定位方法是:启动监控模块进入稳定状态后,检查memleak文件记录应用程序初始化分配的动态内存,之后,按一定时间间隔检查memleak文件日志的变化,比较前后两次跟踪日志的差异来诊断是否存在内存泄漏,以及定位内存泄漏代码行。
下面结合附图对本发明实施例所述***进行详细说明。
如图3所示,本发明实施例所述内存监控管理的***具体包括:内存管理模块、集成模块、信息上报模块,其中,
内存管理模块,用于对应用程序运行时的内存分配与访问进行监控,跟踪记录内存泄漏和/或非法访问信息。
集成模块,用于将内存管理模块集成到应用程序中;所述集成模块具体包括:
源代码添加单元,用于将内存管理模块源代码添加到目标工程中;
函数重载单元,用于引入重载函数;具体的说就是,在目标C文件中增加#include"./mem/dma11oc.h"引用,引入重载函数;具体的说就是,对C语言库最基本的内存分配、释放、复制、设置、比较函数和字符串操作函数作宏定义重载,即用自定义的mem_alloc函数系列对***的ma11oc等内存操作函数进行封装,增加内存使用监控代码,再以封装后的代码替换原函数的实现,从而实现函数的宏定义重载;
内存池创建单元,用于在程序初始化启动时根据应用程序实际需求,创建一预定大小的内存池;所述内存池的结构如图2所示,包括:两端保护边界空间和多个内存块,所述内存块包括:内存管理信息块和应用程序数据内存块;
内存管理信息块,用于记录内存分配的上下文信息,所述上下文信息包括:源代码文件名称和所在行号;
应用程序数据内存块,用于存储应用程序的数据。
所述内存块同时挂接在红黑树和宏定义链表上。
信息上报模块,用于定期上报所述内存泄漏和/或非法访问信息给用户,以便于用户根据所述内存泄漏和/或非法访问信息定位到相关代码;具体的说就是,在应用程序调试过程中,所述信息上报模块定期上报内存泄漏和/或非法访问信息,将内存非法访问信息记录在内存非法访问日志文件(如dmem.log文件)中,该文件记录了内存越界访问、访问无效指针、内存重复分配代码所在源文件、源代码行号和操作的内存地址;将内存泄漏信息记录在内存泄漏日志文件(如memleak文件)中,该文件记录了内存分配代码所在源文件、源代码行号、操作的内存地址、内存分配时间和分配的内存块大小。
综上所述,本发明实施例提供了一种内存监控管理的方法及***,通过使用内存池、伙伴算法、红黑树算法以及宏定义链表这几项关键技术,在很大程度上保证了应用程序内存使用安全,提高了内存分配效率,利用内存管理信息块跟踪记录内存分配使用信息,在发生内存非法使用时,及时记录运行时日志,为开发人员分析定位问题提供充分依据,能够节约很大一部分开发调试时间。
本发明实施例所述方法及***在电信vc项目开发过程中,尤其可以发挥其重要的作用,由于该项目中对diameter协议的解析使用了大量的动态内存分配,因此对于动态内存的分配与管理是决定项目成败的一个重要因素。由于涉及协议解析部分的内存块通常都比较小,且随着项目的进一步开展,程序的代码量和复杂度成倍增加,在这种情况下要定位内存泄漏,特别是定位隐示内存泄漏将变得及其困难。本发明实施例所述方法及***通过将该工具与工程文件集成在一起进行开发,通过分析工程中内存使用概况,定时观察程序对内存的使用情况,很快诊断出内存泄漏所在,并成功解决,为项目的开展带来很有效的辅助手段。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。

Claims (9)

1、一种内存监控管理的方法,其特征在于,包括:
A、通过重载函数策略将内存管理模块集成到应用程序中;所述重载函数策略是使用自定义的mem_alloc函数系列对***的malloc内存操作函数进行封装,增加内存使用监控代码,再以封装后的代码替换原malloc函数的实现,从而实现malloc函数的宏定义重载;
B、所述内存管理模块对应用程序运行时的内存分配与访问进行监控,跟踪记录内存泄漏和/或非法访问信息;
C、定期上报所述内存泄漏和/或非法访问信息给用户,以便于用户根据所述内存泄漏和/或非法访问信息定位到相关代码。
2、如权利要求1所述的方法,其特征在于,所述步骤A具体包括:
A1、将内存管理模块源代码添加到目标工程中;
A2、引入重载函数;
A3、在程序初始化启动时根据应用程序实际需求,创建一预定大小的内存池;
A4、设置内存检测定时器,用于定期上报所述内存泄漏和/或非法访问信息给用户;
A5、设置__MEM_DEBUG__编译选项,该选项控制应用程序编译时是否集成内存管理模块,编译目标工程。
3、根据权利要求2所述的方法,其特征在于,所述步骤A3具体包括:
A31:分配一块预定义大小的内存作为内存池;
A32:利用边界保护方法,在内存池两端各预留预定大小的保护边界空间;
A33:利用伙伴算法将内存划分成多个内存块,所述内存块包含内存管理信息块和应用程序数据内存块。
4、根据权利要求3所述的方法,其特征在于,所述步骤A3还包括:
A34:将所述内存块同时挂接在红黑树和宏定义链表上。
5、根据权利要求3所述的方法,其特征在于,所述内存管理信息块中记录有内存分配的上下文信息,所述上下文信息包括:源代码文件名称和所在行号。
6、根据权利要求1到3中任意一项所述的方法,其特征在于,所述步骤C具体包括:
定期上报所述内存泄漏和/或非法访问信息给用户;
用户对所述内存非法访问信息进行分析,定位内存非法访问代码行;和/或,比较前后内存泄漏信息是否有差异,当确认有差异时,判定存在内存泄漏,并且定位内存泄漏代码行。
7、一种内存监控管理的***,其特征在于,包括:
内存管理模块,用于对应用程序运行时的内存分配与访问进行监控,跟踪记录内存泄漏和/或非法访问信息;
集成模块,用于通过重载函数策略将内存管理模块集成到应用程序中;所述重载函数是使用自定义的mem_alloc函数系列对***的malloc内存操作函数进行封装,增加内存使用监控代码,再以封装后的代码替换原malloc函数的实现,从而实现malloc函数的宏定义重载;
信息上报模块,用于定期上报所述内存泄漏和/或非法访问信息给用户,以便于用户根据所述内存泄漏和/或非法访问信息定位到相关代码。
8、根据权利要求7所述的***,其特征在于,所述集成模块具体包括:
源代码添加单元,用于将内存管理模块源代码添加到目标工程中;
函数重载单元,用于引入重载函数;
内存池创建单元,用于在程序初始化启动时根据应用程序实际需求,创建一预定大小的内存池。
9、根据权利要求8所述的***,其特征在于,所述内存池包括:两端保护边界空间和多个内存块,所述内存块包括:内存管理信息块和应用程序数据内存块;
内存管理信息块,用于记录内存分配的上下文信息,所述上下文信息包括:源代码文件名称和所在行号;
应用程序数据内存块,用于存储应用程序的数据。
CNB2007101455470A 2007-08-28 2007-08-28 一种内存监控管理的方法及*** Expired - Fee Related CN100511158C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2007101455470A CN100511158C (zh) 2007-08-28 2007-08-28 一种内存监控管理的方法及***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2007101455470A CN100511158C (zh) 2007-08-28 2007-08-28 一种内存监控管理的方法及***

Publications (2)

Publication Number Publication Date
CN101110044A CN101110044A (zh) 2008-01-23
CN100511158C true CN100511158C (zh) 2009-07-08

Family

ID=39042125

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2007101455470A Expired - Fee Related CN100511158C (zh) 2007-08-28 2007-08-28 一种内存监控管理的方法及***

Country Status (1)

Country Link
CN (1) CN100511158C (zh)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101604283B (zh) * 2009-06-11 2011-01-05 北京航空航天大学 一种基于Linux内核页表替换的内存访问模型追踪方法
CN102073591A (zh) * 2011-01-14 2011-05-25 福建星网视易信息***有限公司 嵌入式***内存占用状况检测方法及***
CN102831068B (zh) * 2011-06-13 2016-04-06 阿里巴巴集团控股有限公司 一种内存操作记录的处理方法及装置
WO2012171171A1 (zh) * 2011-06-14 2012-12-20 华为技术有限公司 软件监测方法、装置以及***
CN102866953A (zh) * 2011-07-08 2013-01-09 风网科技(北京)有限公司 存储管理***及其存储管理方法
CN104516817B (zh) * 2012-05-15 2017-09-29 青岛海信移动通信技术股份有限公司 一种内存泄漏检测方法及装置
CN102880815B (zh) * 2012-08-21 2016-02-03 上海华御信息技术有限公司 基于应用程序临时存储空间的防护方法及***
CN103064784B (zh) * 2012-11-29 2016-01-27 福建师范大学 面向Xen环境的运行时内存泄漏检测方法及其实现***
US9165337B2 (en) * 2013-05-31 2015-10-20 Qualcomm Incorporated Command instruction management
CN104778087B (zh) * 2014-01-09 2019-04-12 ***通信集团山东有限公司 一种信息处理方法以及信息处理装置
CN105468543B (zh) * 2014-09-11 2020-06-16 中兴通讯股份有限公司 一种保护敏感信息的方法及装置
CN104899157A (zh) * 2015-05-28 2015-09-09 北京北信源软件股份有限公司 一种内存溢出检测方法和***
CN105049933B (zh) * 2015-07-14 2018-12-07 四川长虹电器股份有限公司 智能电视内存的自动化记录监控方法
CN105183542B (zh) * 2015-08-13 2019-07-12 上海斐讯数据通信技术有限公司 一种内存管理方法及***
WO2017035785A1 (zh) * 2015-09-01 2017-03-09 深圳好视网络科技有限公司 一种内存泄漏的定位方法和装置
CN106547617B (zh) * 2015-09-18 2019-10-01 李鹤 一种采用分析-反馈-调优模式的内存管理方法及***
CN106909458A (zh) * 2015-12-23 2017-06-30 北京奇虎科技有限公司 内存管理方法及装置
CN107085548A (zh) * 2016-02-16 2017-08-22 阿里巴巴集团控股有限公司 一种监控应用程序内存的方法、装置及电子设备
CN105912458A (zh) * 2016-03-28 2016-08-31 中国电力科学研究院 一种用于动态检测c/c++内存泄露的方法及***
CN108958993B (zh) * 2017-05-18 2021-11-19 兰州大学 一种基于Linux的在线内存检测器MEMDOG
CN107257384B (zh) * 2017-07-24 2021-08-17 北京小米移动软件有限公司 服务状态监控方法及装置
CN107451054A (zh) * 2017-07-26 2017-12-08 武汉虹信通信技术有限责任公司 一种用于linux环境中的内存池调试方法
US10635578B1 (en) 2017-11-10 2020-04-28 Amdocs Development Limited System, method, and computer program for periodic memory leak detection
CN108446370B (zh) * 2018-03-15 2019-04-26 苏州思必驰信息科技有限公司 语音数据统计方法和***
CN110209434B (zh) * 2019-04-23 2022-04-22 努比亚技术有限公司 一种内存管理方法、装置及计算机可读存储介质
CN110502335A (zh) * 2019-06-12 2019-11-26 成都虚谷伟业科技有限公司 分布式数据库多级内存管理装置
CN111563020B (zh) * 2020-04-30 2023-05-02 中国银行股份有限公司 内存监控方法及装置、计算机设备及计算机可读存储介质
CN111858307B (zh) * 2020-06-18 2024-04-19 三星(中国)半导体有限公司 模糊测试方法和设备
CN113157513B (zh) * 2021-05-10 2024-06-18 北京字节跳动网络技术有限公司 一种堆内存破坏检测方法、装置、电子设备及存储介质
CN115080252B (zh) * 2022-08-23 2022-11-08 智者四海(北京)技术有限公司 iOS平台中基于无锁的非法内存访问检测方法和装置

Also Published As

Publication number Publication date
CN101110044A (zh) 2008-01-23

Similar Documents

Publication Publication Date Title
CN100511158C (zh) 一种内存监控管理的方法及***
CN1894662B (zh) 作为用于执行引导码的ram的处理器缓存存储器
Nethercote et al. Valgrind: A program supervision framework
CN100356335C (zh) 保存跟踪数据的方法和装置
Kumar et al. Harbor: software-based memory protection for sensor nodes
CN100456254C (zh) 在***崩溃时提取日志和追踪缓冲器的方法和***
CN100375060C (zh) 一种嵌入式***及其实时内存监控处理方法
CN102541619B (zh) 虚拟机管理装置和方法
CN102129410B (zh) 提供扩展的存储器保护
CN1991808B (zh) 用于访客访问存储器映射的设备的方法和装置
CN101334825B (zh) 应用程序管理和运行***及方法
CN107357666A (zh) 一种基于硬件保护的多核并行***处理方法
CN105184166A (zh) 基于内核的安卓程序实时行为分析方法及***
CN101322106B (zh) 用于在可控运行时环境中进行基于硬件的动态逸出检测的方法和装置
CN112631893B (zh) 面向异构平台的多层次存储结构内存检测方法
CN101887393A (zh) 基于半虚拟化技术的设备故障复现方法及***
Pellegrini et al. Autonomic state management for optimistic simulation platforms
Cingolani et al. Transparently mixing undo logs and software reversibility for state recovery in optimistic PDES
CN1920797A (zh) 存储器访问控制装置
CN103064784A (zh) 面向Xen环境的运行时内存泄漏检测方法及其实现***
US20070083792A1 (en) System and method for error detection and reporting
CN102360304A (zh) 嵌入式微处理器***及其固件更新方法
CN105204393A (zh) 基于虚核单片机的单片机生产研发工具及其实现方法
Vitali et al. Autonomic log/restore for advanced optimistic simulation systems
CN106201608A (zh) 计算机uefi固件更新方法

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
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20090708

Termination date: 20160828