[发明专利]一种线程堆栈的使用情况的实现方法和装置在审
申请号: | 201410815476.0 | 申请日: | 2014-12-23 |
公开(公告)号: | CN104572448A | 公开(公告)日: | 2015-04-29 |
发明(设计)人: | 王文冬;陈剑 | 申请(专利权)人: | 大唐移动通信设备有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F21/52 |
代理公司: | 北京润泽恒知识产权代理有限公司 11319 | 代理人: | 刘祥景 |
地址: | 100191*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 线程 堆栈 使用 情况 实现 方法 装置 | ||
技术领域
本申请涉及计算机操作系统技术领域,特别是涉及一种任务堆栈使用情况的实现方法和装置。
背景技术
在计算机操作系统中,正在计算机中执行的程序称为进程(Process),而线程(Thread)为进程中某个单一顺序的控制流,其为程序执行流的最小单元。一个标准的线程通常由线程标识(ID)、当前指令指针(PC)、寄存器集合和堆栈组成。一个进程可以由一个或多个线程组成,这些线程共享进程的地址空间。
目前,每一个线程的堆栈容量由程序员在创建线程时进行配置。如果配置的堆栈容量偏小,而线程本身又进行了相关的递归操作,或者定义了比较大的局部变量,则容易导致线程实际使用的堆栈容量超过上述配置的堆栈容量,也就是堆栈溢出,由于产生堆栈溢出的线程与其它线程共享地址空间,因此,该线程的堆栈溢出容易破坏其它线程的数据,从而导致整个进程崩溃。而如果配置的堆栈容量偏大,堆栈的使用又将造成系统内存资源的浪费。因此,线程堆栈的检测是非常重要的技术。
现有的可移植操作系统接口(POSIX,Portable Operating System Interface)标准定义了嵌入式操作系统应该为应用程序提供的接口标准。POSIX标准提供了一种堆栈溢出的检测手段,该检测手段为线程堆栈设置了一个满栈警戒区,该满栈警戒区处于线程堆栈底部,属于线程堆栈的一个扩展区域,当对线程堆栈末尾的警戒缓冲区进行访问时,嵌入式系统会发出错误信号,通常是发送段违例(SIGSEGV,Segmentation violation)信号给线程。然而,当发出错误信号时,嵌入式操作系统已经处于异常工作状态,一般都采用复位方式以尽快回到工作状态,既中止了正在执行的任务影响了任务的执行效率,又降低了用户体验。
发明内容
本申请实施例所要解决的技术问题是提供一种线程堆栈的检测方法和装置,能够提高任务的执行效率和提升用户体验。
相应的,本申请实施例还提供了一种任务堆栈使用情况的查询方法和装置,为用户提供线程堆栈的使用情况的查询接口,以方便用户对堆栈使用情况的实时检测。
为了解决上述问题,本申请公开了一种线程堆栈的检测方法,包括:
在创建线程后,将所述线程对应线程堆栈的地址空间初始化为预定值;
在所述线程执行完任务后,依据所述预定值在所述线程堆栈的地址空间中查询已使用地址空间与未使用地址空间的分界地址;
依据所述分界地址,计算得到所述线程堆栈的使用情况;
在所述线程堆栈的使用情况超过预设门限时,发出告警信息;其中,所述预设门限低于所述线程堆栈的容量。
优选的,所述依据所述预定值在所述线程堆栈的地址空间中查询已使用地址空间与未使用地址空间的分界地址的步骤,包括:
在所述线程堆栈的地址空间中查询地址最低的、且不为所述预定值的堆栈地址,或者,在所述线程堆栈的地址空间中分界地址最高的、且为所述预定值的堆栈地址。
优选的,所述在所述线程堆栈的地址空间中查询地址最低的、且不为所述预定值的堆栈地址的步骤,包括:
按照从高地址到低地址的顺序查询所述线程堆栈的地址空间,并将查询得到的最后一个不为所述预定值的堆栈地址作为所述分界地址。
优选的,所述在所述线程堆栈的地址空间中分界地址最高的、且为所述预定值的堆栈地址的步骤,包括:
按照从低地址到高地址的顺序查询所述线程堆栈的地址空间,并将查询得到的最后一个为所述预定值的堆栈地址作为所述分界地址。
优选的,所述依据所述分界地址,计算得到所述线程堆栈的使用情况的步骤,包括:
以所述线程堆栈的栈顶地址与所述分界地址的差值确定所述线程堆栈的使用情况;或者,
以所述线程堆栈的栈顶地址与所述分界地址的差值相对于所述线程堆栈的容量的比例,确定所述线程堆栈的使用情况。
优选的,所述方法还包括:依据所述告警信息,通过堆栈解析得到所述线程堆栈的故障现场信息。
另一方面,本申请还提供了一种线程堆栈的使用情况的查询方法,包括:
接收查询请求;所述查询请求中携带有线程堆栈;
依据线程堆栈的使用情况记录获取所述线程堆栈的使用情况;所述线程堆栈的使用情况记录中记录有系统中线程堆栈的使用情况;
将所获取的所述线程堆栈的使用情况作为查询结果返回;
其中,通过如下步骤生成所述线程堆栈的使用情况记录:
在创建线程后,将所述线程对应线程堆栈的地址空间初始化为预定值;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于大唐移动通信设备有限公司,未经大唐移动通信设备有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410815476.0/2.html,转载请声明来源钻瓜专利网。