一种内存监控方法及装置的制作方法

文档序号:6359049阅读:100来源:国知局
专利名称:一种内存监控方法及装置的制作方法
技术领域
本发明涉及计算机应用领域,更具体的说,涉及一种内存监控方法及装置。
背景技术
在计算机应用领域中,要监控某一段内存是否被访问,通常是使用一些专业的内存监控软件来实现的,但是当监测被破坏后,该内存监控软件不能及时上报错误,只能在内存释放或内存分配资源的时候,才会发现错误,因此该方案不具有监控时效性,使得程序的除错难度大幅增加;此外,现有的内存监控软件对于自行开发的操作系统不能完全兼容,也使得侦错效果相当有限。如何能够实时的监控到内存是否被读写,而不破坏当前运行的系统,进而缩短开发周期,是目前要解决的一个重要问题。目前,调试寄存器可提供4个地址寄存器供监控内存地址的读写,具有处理速度快,能够对内存实时监控的特点。数据断点的探测就是利用该机制实现的,但该技术的实现要依赖于硬件机制,因此使用范围非常有限;同时监控的地址个数有限,造成了开发人员的调试瓶颈。现有方案中部分CPU支持硬件断点,如X86架构下,共有8个调试寄存器DR0-DR7, 用于保存断点的内存地址或I/O端口地址。当前的数据断点技术是利用调试寄存器实现的,把需要监视的地址放入DR0-DR3寄存器中,给调试控制寄存器DR7相应的置位,使 DR0-DR3中存放的监视地址生效。当程序读写某个设置的断点的变量时,会触发调试异常,内核就通过接管调试异常,进行相关的判断操作和其它处理操作,然后再进行断点信息记录和输出,整个过程不影响程序的正常运行,并能成功记录断点信息。在实现本发明过程中,发明人发现现有技术中至少存在如下问题现有方案依赖于硬件调试资源,由于部分CPU构架没有调试寄存器,因此不支持硬件断点,兼容性差,同时由于调试寄存器的个数有限,也限制了数据断点探测数量的使用范围。

发明内容
本发明的实施例提供了一种内存监控方法及装置,能够降低现有方案中数据断点技术的局限性。本发明的技术方案包括本发明一方面提供了一种内存监控方法,包括将需要监控的内存地址放入调试页中;在CPU对所述调试页中内存地址读写时,则触发缺页异常指令;在确定所述缺页异常指令是由访问被监控的内存地址造成时,采用预定调试流程对所述缺页异常指令进行处理。本发明另一方面提供了一种内存监控装置,包括
4
集成模块,用于将需要监控的数据放入调试页中;监控模块,用于在CPU对所述调试页中数据读写时,则触发缺页异常指令;执行模块,用于在确定所述缺页异常指令是由访问被监控的内存地址造成时,采用预定调试流程对所述缺页异常指令进行处理。由上述本发明的实施例提供的技术方案可以看出,通过将需要监控的内存地址放入调试页中,使得除监控内存地址之外,其他内存数据的访问不会触发异常,不会对系统性能造成过大的影响;在CPU对所述调试页中数据读写时,则触发缺页异常指令;在确定所述缺页异常指令是由访问被监控的内存地址造成时,采用预定调试流程对所述缺页异常指令进行处理,可以有效的提升系统的调试和维护效率。


图1为本发明实施例所述内存监控方法的流程图;图2为本发明实施例一的流程图;图3为本发明实施例所述内存监控装置的结构示意图。
具体实施例方式本发明实施例提出的一种内存监控方法及装置,是一种基于缺页异常的断点探测方案,能够增加断点使用数量和范围,避免了现有方案对数据断点的个数及监控长度带来的局限性。此外本发明利用页的保护机制来实现多数据断点,具有通用性。本发明通过将需要监控的内存地址放入调试页中,使得除了监控内存之外,其余内存访问并不会触发异常,从而不至于对系统性能造成过大的影响;在CPU对所述调试页中内存地址读写时,则触发缺页异常指令;在确定所述缺页异常指令是由访问被监控的内存地址造成时,采用预定调试流程对所述缺页异常指令进行处理。通过这种方式可以对物理内存中的状态进行监控,同时抓取写入者和读取者的相关数据,提高了随机的内存错误定位的处理速度,有效提升了系统的调试和维护的效率。为了便于对本发明实施例中相关术语的理解,下面对涉及到的术语的含义进行简要说明数据断点所谓数据断点是指CPU在访问一个内存地址时能够暂停该指令执行, 转而执行一个中断程序,完成现场状态抓取的过程。分页现代CPU提供的内存管理功能,它将全部物理内存分割为一个个物理页,这些物理页具有一些控制属性,这种技术称为分页。物理页分割之后的每块内存称为一个物理页。缺页错误缺页异常基于上述的分页机制,在分页下,线性地址和物理地址并不一定一一对应,从而会有CPU对线性地址的访问可能并不存在对应的物理页的情形,CPU会产生一个错误,这种情形就被称为缺页错误。调试页一个物理页,对该页中的数据进行操作都需要被监控。如图1所示,本发明实施例提供了一种内存监控方法,技术方案包括101、将需要监控的内存地址放入调试页中;102、在CPU对所述调试页中内存地址读写时,则触发缺页异常指令;
103、在确定所述缺页异常指令是由访问被监控的内存地址造成时,采用预定调试流程对所述缺页异常指令进行处理。在本发明的一个可选实施例中,步骤101的过程具体包括将需要监控的内存地址放在一个或多个调试页中,并将所述调试页的页标志位置为缺页或只读。具体的,本发明实施例中将所有需要监控的内存地址放在一个特殊的段中;将该段形成一个或多个物理页,该物理页即可成为调试页;此外,将所述调试页的页标志位设置为缺页或只读的目的是用于探测内存的读或写操作。其中,“特殊的段”是指编译器为程序产生的一段二进制代码,不同的段会被加载到不同的内存区域,这样可以分离开被监控和不监控的数据。此外,将需要监控的内存地址放入调试页之后,仍需要对某个或某些数据进行数据断点的监控,可以动态的将零散的内存地址加入调试页中。可见,通过步骤101使得除监控数据之外,其余内存访问并不会触发缺页异常,从而不至于对系统性能造成过大的影响。可选的,本发明实施例在系统启动之后,可以视配置情况来决定是否标记该调试页不存在内存中,以便实现数据断点功能的开启或关闭;在确定需要开启调试(debug)功能时,将present位置为0,在此期间CPU执行步骤102去读写调试页中的任何数据都会产生一次缺页错误。在本发明的一个可选实施例中,所述方法还包括根据所述缺页找到缺页地址,并判断所述缺页地址是否在调试页的地址范围之内;若所述缺页地址不在调试页的地址范围之内,则确定所述缺页错误不是由访问被监控的内存地址造成的,采用正常缺页错误处理流程进行处理;若所述缺页地址在调试页的地址范围之内,则确定所述缺页错误是由访问被监控的内存地址造成的,采用步骤103中预定调试流程对所述缺页异常指令进行处理。具体的,步骤103所述采用预定调试流程对所述缺页异常指令进行处理,包括(1)备份导致缺页异常的指令,并将所述导致缺页异常的指令替换为一个产生 CPU异常的指令;(2)设置所述调试页已存在状态,允许读写;其中,这样做的目的是用于读取调试页中的内容,假设如果所述调试页一直处于缺页状态,那么每次读写所述调试页中的数据都会产生一个异常,从而陷入循环,导致调试页中的内容无法读取;(3)执行所述产生CPU异常的指令,并切换到CPU异常处理流程;(4)将内存中的数据读取并保存,并将上下文数据保存,以便获取本次数据断点过程中的监控数据。通过上述技术方案,在预定调试异常处理流程中,可以抓取CPU需要读写内存地址的原始值,以及记录产生读写时刻的程序栈和进程,从而完成数据断点的功能需求。
所述步骤103还可以包括单步执行备份的所述导致缺页异常的指令;在所述导致缺页异常的指令的处理流程中,将所述调试页设置为不存在状态,以便等待下一次数据断点的触发。通过上述技术方案可知,本发明合理调整了监控数据的存放位置,将需要监控的数据放入调试页中,同时利用CPU提供的内存缺页机制,监控CPU对特定地址的读写动作; 扩展了 CPU硬件提供的断点机制,扩展了监控的内存地址数量和长度,避免了硬件的限制, 从而有效提升了系统的调试和维护效率。现有CPU基本都支持内存的分页管理机制,不同的CPU具有不同的物理页大小,典型的如x86架构的CPU的物理页大小就有4KB,2MB, 4MB三种不同的大小。以4KB大小的物理页为例,其有效的监控长度是4KB,其监控的个数随被监控数据个体的大小而变化,如对于4字节长的int数据,则可以同时监控IOM个数据项,调试页的个数也不限于1个调试页,可以扩展到多个页从而使得监控的长度和个数都能得到扩展。本发明实施例一以CPU具有分页机制功能为本发明实施例一的实现前题;此外,在实施例一中将分页大小设定为4KB ;具体流程如图2所示201、将需要监控的内存地址放在一个或多个调试页中,并将所述调试页的页标志位置为缺页或只读;202、在系统启动之后,根据配置情况来决定是否标记该调试页不存在内存中,以便实现数据断点功能的开启或关闭;在本发明实施例一中假定已经开启了调试(debug)功能,因此设置present位为0 ;203XPU对所述调试页中内存地址读写时,则会触发一个缺页异常指令,系统执行转到缺页异常处理流程;204、判断所述缺页异常指令是否由访问被监控的内存地址造成;具体为根据所述缺页找到缺页地址,并判断所述缺页地址是否在调试页的地址范围之内;若所述缺页地址不在调试页的地址范围之内,则确定所述缺页错误不是由访问被监控的内存地址造成的,采用正常缺页错误处理流程进行处理;205、若所述缺页地址在调试页的地址范围之内,则确定所述缺页错误是由访问被监控的内存地址造成的,采用预定调试流程对所述缺页异常指令进行处理;具体为备份导致缺页异常的指令,并将所述导致缺页异常的指令替换为一个产生CPU异常的指令;206、缺页异常处理流程返回,执行所述产生CPU异常的指令,并切换到CPU异常处理流程,并设置所述调试页已存在状态,允许读写;207、将内存中的数据读取并保存,并将上下文数据保存,以便获取本次数据断点过程中的监控数据;208、单步执行备份的指令,也就是执行导致缺页异常的指令;209、在所述导致缺页异常的指令的处理流程中,将所述调试页设置为不存在状态,以便等待下一次数据断点的触发;210、结束缺页异常的处理流程,完成数据断点的功能,返回步骤201。至此程序返回原执行流,同时完成了数据断点的功能。
通过上述本发明实施例一提出的技术方案,能够增加断点使用数量和范围,避免了现有方案对数据断点的个数及监控长度带来的局限性。此外本发明利用页的保护机制来实现多数据断点,具有通用性。如图3所示,本发明实施例还提供了一种内存监控装置,包括集成模块31,用于将需要监控的内存地址放入调试页中;监控模块32,用于在CPU对所述调试页中内存地址读写时,则触发缺页异常指令;执行模块33,用于在确定所述缺页异常指令是由访问被监控的内存地址造成时, 采用预定调试流程对所述缺页异常指令进行处理。在本发明的一个可选实施例中,所述执行模块33包括备份处理单元331,用于备份导致缺页异常的指令,并将所述导致缺页异常的指令替换为一个产生CPU异常的指令;设置所述调试页已存在状态,允许读写;替换指令执行单元332,用于执行所述产生CPU异常的指令,并切换到CPU异常处理流程;还用于将内存中的数据读取并保存,并将上下文数据保存,以便获取本次数据断点过程中的监控数据。进一步可选的,所述执行模块33还可以包括原指令执行单元333,用于单步执行备份的所述导致缺页异常的指令;在所述导致缺页异常的指令的处理流程中,将所述调试页设置为不存在状态,以便等待下一次数据断点的触发。在本发明的一个可选实施例中,所述装置还可以包括判定模块34,用于根据所述缺页找到缺页地址,并判断所述缺页地址是否在调试页的地址范围之内;若所述缺页地址不在调试页的地址范围之内,则确定所述缺页错误不是由访问被监控的内存地址造成的,所述执行模块33采用正常缺页错误处理流程进行处理。在本发明的一个可选实施例中,所述集成模块31可以具体用于将需要监控的内存地址放在一个或多个调试页中,并将所述调试页的页标志位置为缺页或只读。需要说明的是,本发明实施例是基于图1及图2所述方法实施例获得的装置实施例,包含了与所述方法实施例相同或相应的技术特征,因此,在本发明实施例中对重复性的技术方案不做详述,请参见图1及图2所示的方法实施例中的描述。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory, ROM)或随机存储记忆体(Random Access Memory, RAM)等。
权利要求
1.一种内存监控方法,其特征在于,包括 将需要监控的内存地址放入调试页中;在CPU对所述调试页中内存地址读写时,则触发缺页异常指令; 在确定所述缺页异常指令是由访问被监控的内存地址造成时,采用预定调试流程对所述缺页异常指令进行处理。
2.根据权利要求1所述的方法,其特征在于,所述采用预定调试流程对所述缺页异常指令进行处理,包括备份导致缺页异常的指令,并将所述导致缺页异常的指令替换为一个产生CPU异常的指令;设置所述调试页已存在状态,允许读写; 执行所述产生CPU异常的指令,并切换到CPU异常处理流程; 将内存中的数据读取并保存,并将上下文数据保存,以便获取本次数据断点过程中的监控数据。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括 执行备份的所述导致缺页异常的指令;在所述导致缺页异常的指令的处理流程中,将所述调试页设置为不存在状态,以便等待下一次数据断点的触发。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括根据所述缺页找到缺页地址,并判断所述缺页地址是否在调试页的地址范围之内; 若所述缺页地址不在调试页的地址范围之内,则确定所述缺页错误不是由访问被监控的内存地址造成的,采用正常缺页错误处理流程进行处理。
5.根据权利要求1所述的方法,其特征在于,将需要监控的内存地址放入调试页中,包括将需要监控的内存地址放在一个或多个调试页中,并将所述调试页的页标志位置为缺页或只读。
6.一种内存监控装置,其特征在于,包括集成模块,用于将需要监控的内存地址放入调试页中; 监控模块,用于在CPU对所述调试页中内存地址读写时,则触发缺页异常指令; 执行模块,用于在确定所述缺页异常指令是由访问被监控的内存地址造成时,采用预定调试流程对所述缺页异常指令进行处理。
7.根据权利要求6所述的装置,其特征在于,所述执行模块包括备份处理单元,用于备份导致缺页异常的指令,并将所述导致缺页异常的指令替换为一个产生CPU异常的指令;设置所述调试页已存在状态,允许读写;替换指令执行单元,用于执行所述产生CPU异常的指令,并切换到CPU异常处理流程; 还用于将内存中的数据读取并保存,并将上下文数据保存,以便获取本次数据断点过程中的监控数据。
8.根据权利要求7所述的装置,其特征在于,所述执行模块还包括 原指令执行单元,用于单步执行备份的所述导致缺页异常的指令;在所述导致缺页异常的指令的处理流程中,将所述调试页设置为不存在状态,以便等待下一次数据断点的触发。
9.根据权利要求6所述的装置,其特征在于,所述装置还包括判定模块,用于根据所述缺页找到缺页地址,并判断所述缺页地址是否在调试页的地址范围之内;若所述缺页地址不在调试页的地址范围之内,则确定所述缺页错误不是由访问被监控的内存地址造成的,所述执行模块采用正常缺页错误处理流程进行处理。
10.根据权利要求6所述的装置,其特征在于,所述集成模块具体用于将需要监控的数据放在一个或多个调试页中,并将所述调试页的页标志位置为缺页或只读。
全文摘要
本发明公开了一种内存监控方法及装置,该方法包括将需要监控的内存地址放入调试页中;在CPU对所述调试页中内存地址读写时,则触发缺页异常指令;在确定所述缺页异常指令是由访问被监控的内存地址造成时,采用预定调试流程对所述缺页异常指令进行处理。本发明还提供了一种内存监控装置。本发明技术方案的实现,使得除监控地址之外,其余内存地址的访问不会触发异常,从而避免对系统性能造成过大的影响,可以有效的提升系统的调试和维护效率。
文档编号G06F11/34GK102388368SQ201180002063
公开日2012年3月21日 申请日期2011年9月20日 优先权日2011年9月20日
发明者张超, 李俊, 秦海军, 郑海珍 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1