一种内存监控方法及装置制造方法及图纸

技术编号:7219539 阅读:384 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种内存监控方法及装置,该方法包括:将需要监控的内存地址放入调试页中;在CPU对所述调试页中内存地址读写时,则触发缺页异常指令;在确定所述缺页异常指令是由访问被监控的内存地址造成时,采用预定调试流程对所述缺页异常指令进行处理。本发明专利技术还提供了一种内存监控装置。本发明专利技术技术方案的实现,使得除监控地址之外,其余内存地址的访问不会触发异常,从而避免对系统性能造成过大的影响,可以有效的提升系统的调试和维护效率。

【技术实现步骤摘要】
【国外来华专利技术】
本专利技术涉及计算机应用领域,更具体的说,涉及一种内存监控方法及装置
技术介绍
在计算机应用领域中,要监控某一段内存是否被访问,通常是使用一些专业的内存监控软件来实现的,但是当监测被破坏后,该内存监控软件不能及时上报错误,只能在内存释放或内存分配资源的时候,才会发现错误,因此该方案不具有监控时效性,使得程序的除错难度大幅增加;此外,现有的内存监控软件对于自行开发的操作系统不能完全兼容,也使得侦错效果相当有限。如何能够实时的监控到内存是否被读写,而不破坏当前运行的系统,进而缩短开发周期,是目前要解决的一个重要问题。目前,调试寄存器可提供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本文档来自技高网
...

【技术保护点】

【技术特征摘要】
【国外来华专利技术】

【专利技术属性】
技术研发人员:李俊郑海珍张超秦海军
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:

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

1
相关领域技术