• 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-05-03
    • / 9
    • 下载费用:30 金币  

    重庆时时彩天天娱乐: 检测多线程程序中的死锁的方法及系统.pdf

    关 键 词:
    检测 多线程 程序 中的 死锁 方法 系统
      专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    摘要
    申请专利号:

    CN201010146519.2

    申请日:

    2010.04.13

    公开号:

    CN102222015A

    公开日:

    2011.10.19

    当前法律状态:

    授权

    有效性:

    有权

    法律详情: 授权|||实质审查的生效IPC(主分类):G06F 9/46申请日:20100413|||公开
    IPC分类号: G06F9/46 主分类号: G06F9/46
    申请人: 三星电子(中国)研发中心; 三星电子株式会社
    发明人: 沈志刚; 田峰
    地址: 210008 江苏省南京市中山路268号汇杰广场8楼
    优先权:
    专利代理机构: 北京铭硕知识产权代理有限公司 11286 代理人: 郭鸿禧;王青芝
    PDF完整版下载: PDF下载
    法律状态
    申请(专利)号:

    CN201010146519.2

    授权公告号:

    ||||||

    法律状态公告日:

    2016.04.27|||2011.11.30|||2011.10.19

    法律状态类型:

    授权|||实质审查的生效|||公开

    摘要

    本发明涉及一种检测多线程程序中的死锁的方法及其系统,所述方法包括以下步骤:选定所要检测的线程;启动跟踪程序,以跟踪在内核中运行的线程;启动目标多线程程序;判断是否存在所选定的线程在运行;在线程库中动态地插入探测点,以通过探测函数对所述选定的线程进行探测;所述探测函数记录所探测的数据,并且当记录的数据超过内核的阀值时,将数据传输到用户空间并进行存储;对存储于用户空间中的数据进行分析,以判断是否产生死锁。根据本发明,在不需要目标程序的源代码的情况下,就可以有效地检测出死锁,因而有利于多线程的调试作业,而且还有利于多线程程序对资源使用情况的分析。

    权利要求书

    权利要求书
    1.  一种检测多线程程序中的死锁的方法,其特征在于,包括以下步骤:
    选定所要检测的线程;
    启动跟踪程序,以跟踪在内核中运行的线程;
    启动目标多线程程序;
    判断是否存在所选定的线程在运行;
    在线程库中动态地插入探测点,以通过探测函数对所述选定的线程进行探测;
    所述探测函数记录所探测的数据,并且当记录的数据超过内核的阀值时,将数据传输到用户空间并进行存储;
    对存储于用户空间中的数据进行分析,以判断是否产生死锁。

    2.  根据权利要求1所述的方法,其特征在于,进行探测的方式包括入口探测与返回探测,其中,所述入口探测是在资源函数进入时执行,所述返回探测是在资源函数返回的时候执行。

    3.  根据权利要求2所述的方法,其特征在于,在记录所述探测函数所探测的数据的步骤中,记录线程号和资源标示。

    4.  根据权利要求1所述的方法,其特征在于,在对存储到用户空间的数据进行分析的步骤中,通过比较所述探测函数所探测的线程号和资源标示进行分析。

    5.  根据权利要求4所述的方法,其特征在于,当多个线程中的其中一个线程长时间请求资源,而所述线程请求的资源被另一个线程所拥有,且所述另一个线程所请求的资源由所述线程拥有时,判断为发生死锁。

    6.  一种检测多线程程序中的死锁的系统,其特征在于包括:
    探测设置???,其用于在线程库中动态插入探测点,以通过探测函数对线程进行探测,并且记录所述探测函数所探测的数据;
    数据传输???,以用于当所述记录数据超过阀值时,将所述记录数据传输到用户空间并进行存储;
    分析???,以用于对存储到用户空间的所述记录数据进行分析,以判断是否产生死锁。

    7.  根据权利要求6所述的系统,其特征在于,所述探测函数的探测方式包括入口探测和返回探测,其中,所述入口探测是在资源函数进入时执行,所述返回探测是在资源函数返回的时候执行。

    8.  根据权利要求7所述的系统,其特征在于,所述探测函数记录线程号和资源标示。

    9.  根据权利要求6所述的系统,其特征在于,所述探测??橥ü冉纤鎏讲夂讲獾南叱毯藕妥试幢晔窘蟹治?。

    10.  根据权利要求9所述的系统,其特征在于,当多个线程中的其中一个线程长时间请求资源,而所述线程请求的资源被另一个线程所拥有,且所述另一个线程所请求的资源由所述线程拥有时,则所述分析??榕卸衔⑸浪?。

    说明书

    说明书检测多线程程序中的死锁的方法及系统
    技术领域
    本发明涉及计算机技术领域,尤其涉及在多任务情况下检测死锁的方法及系统。
    背景技术
    随着计算机技术的快速发展,多任务、多线程或者多处理器的技术应用目前已经非常广泛。所述多任务是指同一个程序能有几个并发执行的路径,这些任务共享内存地址空间,可以并发异步执行。死锁(Dead Lock)是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。然而,由于死锁只在涉及例如正在执行的线程的交错或时序的特定条件下才可能发生,它是难以检测的。
    在目前的检测方法中,可以分为静态代码分析和运行时分析。静态代码分析,是指对目标源程序进行分析,找出目标线程和相关的资源,建立线程和资源之间的关系图,如果存在循环就认为存在死锁。
    运行时分析需要增加额外的数据结构和软件???,每当有线程使用资源(获取或者释放)加以记录分析,如果获取的资源和释放的资源不一致,或者其他异常,认为存在死锁。
    在现有技术的情况下,都需要目标程序的源代码,这在比较大的程序进行联合开发的情况下,往往并不能得到所有的源代码,在源代码比较多的情况下,对源代码进行分析也是一件很困难的事情。
    另外,现有动态死锁检测方法都需要增加额外的数据结构和软件???,并且会修改目标程序的行为。比如,目标程序请求资源或者释放资源的时候,往往需要在增加的数据结构中填写对应的值。这样做,会影响目标程序的行为,导致得到的结果的可信度降低。
    发明内容
    本发明是为了解决上述问题而提出的,其目的在于提供一种采用动态插入探测点的方式,且不需要目标程序源代码,也不影响目标程序的运行的检测多线程程序中的死锁的方法及系统。
    根据本发明的目的,提供一种检测多线程程序中的死锁的方法,其特征在于,包括以下步骤:选定所要检测的线程;启动跟踪程序,以跟踪在内核中运行的线程;启动目标多线程程序;判断是否存在所选定的线程在运行;在线程库中动态地插入探测点,以通过探测函数对所述选定的线程进行探测;记录所述探测函数所探测的数据,并且当记录的数据超过内核的阀值时,将数据传输到用户空间并进行存储;对存储于用户空间中的数据进行分析,以判断是否产生死锁。
    所述探测函数进行探测的方式包括入口探测与返回探测,其中,所述入口探测是在资源函数进入时执行,所述返回探测是在资源函数返回的时候执行。
    在记录所述探测函数所探测的数据的步骤中,记录线程号和资源标示。
    在对存储到用户空间的数据进行分析的步骤中,当多个线程中的其中一个线程长时间请求资源,而所述线程请求的资源被另一个线程所拥有,且所述另一个线程所请求的资源由所述线程拥有时,判断为发生死锁。
    在对存储到用户空间的数据进行分析的步骤中,当多个线程中的其中一个线程长时间请求资源,并且所述线程请求的资源被另一个线程所拥有,而所述另一个线程所请求的资源由所述线程拥有时,判断为发生死锁。
    根据本发明的另一目的,提供一种检测多线程程序中的死锁的系统,包括:探测设置???,其用于在线程库中动态插入探测点,以通过探测函数对线程进行探测,并且记录所述探测函数所探测的数据;数据传输???,以用于当所述记录数据超过阀值时,将所述记录数据传输到用户空间并进行存储;分析???,以用于对存储到用户空间的所述记录数据进行分析,以判断是否产生死锁。
    所述探测函数的探测方式包括入口探测和返回探测,其中,所述入口探测是在资源函数进入时执行,所述返回探测是在资源函数返回的时候执行。
    所述探测函数记录线程号和资源标示。
    当多个线程中的其中一个线程长时间请求资源,而所述线程请求的资源被另一个线程所拥有,且所述另一个线程所请求的资源由所述线程拥有时,则所述分析??榕卸衔⑸浪?。
    根据本发明,在不需要目标程序的源代码的情况下,就可以有效地检测出死锁,因而有利于多线程的调试作业,而且还有利于多线程程序对资源使用情况的分析。
    附图说明
    通过下面的附图对本发明实施例进行的描述,本发明的上述和其他目的和特点将会变得更加清楚,其中:
    图1为根据本发明的检测多线程程序中的死锁的方法的流程图;
    图2为根据本发明的动态插入用户空间的方法的简要示意图;
    图3为根据本发明的死锁的分析方法的流程图;
    图4为图3的中的死锁状态的简要示意图;
    图5为根据本发明的检测多线程程序中的死锁的系统的方框图。
    具体实施方式
    以下,参照附图来详细说明根据本发明的实施例。
    如图1所示,根据本发明的检测多线程程序中的死锁的方法包括以下步骤。在步骤S100,用户选定所要检测的线程。然后,在步骤S101启动跟踪程序,以跟踪在内核中运行的线程。接着,在步骤S102,启动目标多线程程序。此时,所述目标程序为用户空间的应用程序。用户空间的应用程序的探测相对于内核空间的探测的不同点在于,内核总是被加载于物理内存中,其有固定的地址,因此探测点可以在任何时候插入。但是用户空间的应用程序是按需要加载于内存里面去的,其没有固定的地址,因此探测点就不是在任何时候都可以插入。此时的解决方式是维护一个预先定义的探测点的列表,然后在内核函数do_page_fault插入一个探测点,从do_page_fault函数里面获取加载页面的信息,当do_page_fault返回的时候检查探测点列表,如果在内核中发现存在需要插入探测点的线程,则在新加载的页面里面插入探测点。即,当启动目标程序时,所启动的程序就会被加载于内核中运行,此时将产生页面错误。由此,在步骤S103中,用户根据页面错误判断是否存在用户所选定的线程在运行。当发现存在运行中的用户所选定的线程时,执行步骤S104,在线程库中动态插入探测点,以通过探测函数对用户所选定的线程进行探测。图2为根据本发明的动态插入探测点的方法的简要示意图。参照图2可知,由于用户空间的应用程序不同于内核程序,其并没有一次全部被加载到内存中,而是在运行时选择性地进行加载。因此,当用户设置动态探测指令,这些指令会被记录到探测数据中。当发生页面错误的时候,页面错误处理器会调用探测设置???,该探测设置??槿ニ阉餍录釉氐挠τ贸绦蚴欠裥枰迦胩讲夂?,如果需要,就动态插入探测函数。动态插入探测点的方法有很多方式,本发明中,动态插入探测点利用kprobes,具体的插入方式为:在需要插入探测点的地方插入一个中断指令,当执行到这个中断指令,会调用相应的中断函数,用户自己定义的探测函数在中断函数中执行。Kprobes向运行的内核中给定地址写入断点指令,插入一个探测函数。而执行探测的指令会导致断点错误,Kprobes钩住(hook in)断点处理器并收集调试信息。所述探测函数探测的方式提供两种探测种类,一是入口探测,另一种是返回探测。其中,所述入口探测是在资源函数进入时执行,所述返回探测是在资源函数返回的时候执行,记录下线程号和资源标示。因此,在资源函数入口点(entry)和出口点(return)分别插入探测函数。然后,执行步骤S105,所述探测函数记录所探测的数据。当目标程序启动时,就会调用资源请求函数和资源释放函数,此时对应的入口探测函数和返回探测函数就会被调用,线程号和资源标示将会被记录下来。因此,所述探测函数所探测的数据中包含线程号以及资源标示。所述资源请求函数包括资源请求入口函数和资源请求返回函数,所述资源释放函数包括资源释放入口函数和资源释放返回函数。当一个线程进入了资源请求函数,比如pthread_mutex_lock,表示这个线程正在请求一个资源,如果从pthread_mutex_lock成功返回,表示这个线程成功的获取资源,在进入这个函数到返回这个函数的时间段就是线程获取资源的时间。而线程进入pthread_mutex_unlock表示这个线程开始释放资源,并且从pthread_mutex_unlock成功返回,表示这个线程就释放掉了资源,此时别的线程就可以使用所述线程释放的资源,因为当一个线程继续占有某个资源时,别的线程是无法使用该资源的。
    接着,执行步骤S106,判断所述探测函数所记录的数据是否超过阀值。当所述探测函数所记录的数据超过阀值时,执行步骤S107,将所述记录的数据转移到用户空间。此时,所述阀值为内核空间的阀值。由于内核空间的限制,探测函数记录下来的数据不会一直保存于内存的缓冲区,当记录的数据超过一定的阀值,数据将会被传输到用户空间,存入磁盘或者数据库系统,而相应的内核数据将会被清空。所述阀值是根据内存的大小来确定的,这个值不能太大,否则会影响到内核的运行,但也不能太小,否则频繁传输数据到用户空间,也一样会影响内核的性能。作为参考,1G的内存可以分配32MB的缓存。
    接着,执行步骤S108,对于所述转到用户空间的所述探测函数所记录的数据进行分析,以判断是否产生了死锁。
    图3为根据本发明的死锁的分析方法的流程图,图4为图3的中的死锁状态的简要示意图。参照图可知,根据本发明的死锁的分析方法如下:在步骤S301,通过资源请求入口函数判断各个线程是否在请求资源。然后执行步骤S302,以通过资源请求返回函数判断各个线程所拥有的资源。接着,执行步骤S303,以通过资源释放入口函数和资源释放返回函数判断各个线程是否释放掉所占有的资源。然后,执行步骤S304,根据所述探测函数所探测的线程号及资源标示进行死锁分析,即当所述多个线程中的其中一个线程长时间占有一资源,且并没有释放这一资源,同时该线程请求另一资源,而所述线程请求的另一资源被另一个线程长时间所占有,且另一线程并没有释放该另一资源时,判断为发生死锁。图4中,线程A长时间拥有资源R1,且同时请求资源R2;而在相同的时间内,线程B长时间拥有资源R2,且同时请求资源R1,此时就可以判断为发生了死锁。
    图5为根据本发明的检测多线程程序中的死锁的系统的方框图。由图可知,根据本发明的检测多线程程序中的死锁的系统,包括探测设置???00、数据传输???01、分析???02。所述探测设置???00用于在线程库中动态插入探测点,以通过探测函数对用户所选定的线程进行探测,并且在探测函数里记录数据。而且,所述探测设置???00还能够动态设置内核空间的探测函数。本发明中,所述探测设置???00动态插入探测点利用kprobes,具体的插入方式为:在需要插入探测点的地方插入一个中断指令,当执行到这个中断指令,会调用相应的中断函数,用户自己定义的探测函数在中断函数中执行。Kprobes向运行的内核中给定地址写入断点指令,插入一个探测函数。而执行探测的指令会导致断点错误,Kprobes钩住(hook in)断点处理器并收集调试信息。所述探测函数的探测类型包括入口探测和返回探测,其中,所述入口探测是在资源函数进入时执行,所述返回探测是在资源函数返回的时候执行。所述探测函数记录函数线程号和资源标示。所述数据传输???01用于当所述记录数据超过内核的阀值时,将数据传输到用户空间储存。此时,所述阀值是根据内存的大小来确定的,这个值不能太大,否则会影响到内核的运行,但也不能太小,否则频繁传输数据到用户空间,也一样会影响内核的性能。作为参考,1G的内存可以分配32MB的缓存。所述分析???02用于对用户空间数据进行分析,以判断是否产生死锁。所述分析???02的分析是通过比较所述探测函数所探测的线程号及资源标示而进行的。即,当所述多个线程中的其中一个线程长时间占有一资源,且并没有释放这一资源,同时该线程请求另一资源,而所述线程请求的另一资源被另一个线程长时间所占有,且另一线程并没有释放该另一资源时,则所述分析???02判断为发生死锁。
    本发明不限于上述实施例,在不脱离本发明范围的情况下,可以进行各种变形和修改。

    关于本文
    本文标题:检测多线程程序中的死锁的方法及系统.pdf
    链接地址://www.4mum.com.cn/p-5862162.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    [email protected] 2017-2018 www.4mum.com.cn网站版权所有
    经营许可证编号:粤ICP备17046363号-1 
     


    收起
    展开
  • 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-05-03
  • 什么手游能赚钱提现金 浙江快乐彩十二选五开奖结果 四川金7乐中奖助手 熊猫麻将官方版ios 11选5任选五投注技巧 全网最准一尾中特 安卓手机捕鱼达人2刷金币 黑龙江p62开奖号码今天 双色球五区分布图 重庆时时彩可以发财吗 青海快三口诀 广西11选5走势图买技巧 3d开机号进100期查询 有糖看广告怎么赚钱 股票配资世界 双色球038历史同期易红