一种死锁检测的方法、系统、设备及可读存储介质与流程

文档序号:22758166发布日期:2020-10-31 09:56阅读:99来源:国知局
一种死锁检测的方法、系统、设备及可读存储介质与流程

本申请涉及死锁检测领域,特别涉及一种死锁检测的方法、系统、设备及可读存储介质。



背景技术:

在现代操作系统及软件开发中,多核的并发程序以其资源利用率高、计算速度快等优点在实际应用中得到了广泛应用。但是由多核的并发行为的不确定性及复杂性,使得其开发和维护比单核更困难。因此在多核编程中,为了保证数据操作的一致性,操作系统引入了锁机制,用于保证临界区代码的安全。

然而,锁机制的引入同时也导致了操作系统死锁的风险,由于多核处理器运行程序的不确定性往往会导致死锁的发生,而在死锁发生时运维人员往往需要很长时间才能检测到死锁发生的位置,极大的影响了问题修复的效率。

因此,如何在死锁发生时迅速检测到死锁发生的位置是本领域技术人员目前需要解决的技术问题。



技术实现要素:

本申请的目的是提供一种死锁检测的方法、系统、设备及可读存储介质,用于在死锁发生时迅速检测到死锁发生的位置。

为解决上述技术问题,本申请提供一种死锁检测的方法,该方法包括:

当进行加锁操作后获取锁的地址信息;

对所述地址信息进行哈希运算,得到对应的哈希值;

判断预设记录表中是否存有所述哈希值;

若是,则根据所述哈希值对应的地址信息确定死锁发生的位置。

可选的,当所述预设记录表中未存有所述哈希值时,还包括:

将所述哈希值和所述地址信息的对应关系存入所述预设记录表中。

可选的,还包括:

当进行解锁操作时,将所述预设记录表中待解锁的地址信息与哈希值的对应关系删除。

可选的,还包括:

获取所述预设记录表中所有对应关系的存储时间;

根据所述存储时间超过阈值的对应关系确定死锁发生的位置。

本申请还提供一种死锁检测的系统,该系统包括:

第一获取模块,用于当进行加锁操作后获取锁的地址信息;

运算模块,用于对所述地址信息进行哈希运算,得到对应的哈希值;

判断模块,用于判断预设记录表中是否存有所述哈希值;

第一确定模块,用于当所述预设记录表中存有所述哈希值时,根据所述哈希值对应的地址信息确定死锁发生的位置。

可选的,还包括:

存储模块,用于当所述预设记录表中未存有所述哈希值时,将所述哈希值和所述地址信息的对应关系存入所述预设记录表中。

可选的,还包括:

删除模块,用于当进行解锁操作时,将所述预设记录表中待解锁的地址信息与哈希值的对应关系删除。

可选的,还包括:

第二获取模块,用于获取所述预设记录表中所有对应关系的存储时间;

第二确定模块,用于根据所述存储时间超过阈值的对应关系确定死锁发生的位置。

本申请还提供一种死锁检测设备,该死锁检测设备包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如上述任一项所述死锁检测的方法的步骤。

本申请还提供一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一项所述死锁检测的方法的步骤。

本申请所提供死锁检测的方法,包括:当进行加锁操作后获取锁的地址信息;对地址信息进行哈希运算,得到对应的哈希值;判断预设记录表中是否存有哈希值;若是,则根据哈希值对应的地址信息确定死锁发生的位置。

本申请所提供的技术方案,通过在进行加锁操作后获取锁的地址信息,然后对地址信息进行哈希运算,得到对应的哈希值,当预设记录表中存有哈希值时则表明此前已经对此锁进行过加锁操作了,再次加锁造成了死锁,此时根据哈希值对应的地址信息确定死锁发生的位置,本申请通过采用哈希算法对发生的死锁进行检测,并记录了死锁的信息,进而在死锁发生时能够迅速检测到死锁发生的位置,提高了问题修复的效率,提升了产品的质量以及操作系统的稳定性。本申请同时还提供了一种死锁检测的系统、设备及可读存储介质,具有上述有益效果,在此不再赘述。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请实施例所提供的一种死锁检测的方法的流程图;

图2为本申请实施例所提供的一种死锁检测的系统的结构图;

图3为本申请实施例所提供的另一种死锁检测的系统的结构图;

图4为本申请实施例所提供的一种死锁检测设备的结构图。

具体实施方式

本申请的核心是提供一种死锁检测的方法、系统、设备及可读存储介质,用于在死锁发生时迅速检测到死锁发生的位置。

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

请参考图1,图1为本申请实施例所提供的一种死锁检测的方法的流程图。

其具体包括如下步骤:

s101:当进行加锁操作后获取锁的地址信息;

在多线程编程中,操作系统引入了锁机制。通过锁机制,能够保证在多核多线程环境中,在某一个时间点上,只能有一个线程进入临界区代码,从而保证临界区中操作数据的一致性。

基于锁机制的引入导致了操作系统死锁的风险,由于多核处理器运行程序的不确定性往往会导致死锁的发生,而在死锁发生时运维人员往往需要很长时间才能检测到死锁发生的位置,极大的影响了问题修复的效率,故本申请提供了一种死锁检测的方法,用于解决上述问题。

s102:对地址信息进行哈希运算,得到对应的哈希值;

在本步骤中,对地址信息进行哈希运算,得到对应的哈希值的目的在于得到与地址信息唯一对应的哈希值,然后根据该哈希值判断该地址信息对应的锁在之前是否进行过加锁操作,进而确定此次加锁操作是否造成了死锁。

s103:判断预设记录表中是否存有该哈希值;

若是,则进入步骤s104;

当预设记录表中存有哈希值时,则表明在此次加锁操作之前已经进行过加锁操作了,则此次加锁一定造成了死锁,此时执行步骤s104根据哈希值对应的地址信息确定死锁发生的位置,以使运维人员能够及时定位到死锁发生的位置,进而提高问题修复的效率。

可选的,当预设记录表中未存有哈希值时,则表明在此次加锁操作之前未进行过加锁操作,则此次加锁不能造成死锁,此时还可以将哈希值和地址信息的对应关系存入预设记录表中,以表明当前地址信息所在位置已经进行过加锁操作。

可选的,当进行解锁操作时,还可以将预设记录表中待解锁的地址信息与哈希值的对应关系删除,以减少已经解锁的地址信息对死锁检测造成影响。

可选的,当预设记录表中的对应关系一直存在时,则表明该锁一直未被解锁,极大可能是由于等待其他加锁导致产生死锁,此时还可以执行以下步骤确定死锁发生的位置:

获取预设记录表中所有对应关系的存储时间;

根据存储时间超过阈值的对应关系确定死锁发生的位置。

s104:根据哈希值对应的地址信息确定死锁发生的位置。

可选的,在确定死锁发生的位置之后,还可以将死锁发生的位置作为提示信息发送至预设位置(如邮箱、信箱等),以使运维人员能够及时对死锁进行修复。

基于上述技术方案,本申请所提供的一种死锁检测的方法,通过在进行加锁操作后获取锁的地址信息,然后对地址信息进行哈希运算,得到对应的哈希值,当预设记录表中存有哈希值时则表明此前已经对此锁进行过加锁操作了,再次加锁造成了死锁,此时根据哈希值对应的地址信息确定死锁发生的位置,本申请通过采用哈希算法对发生的死锁进行检测,并记录了死锁的信息,进而在死锁发生时能够迅速检测到死锁发生的位置,提高了问题修复的效率,提升了产品的质量以及操作系统的稳定性。

请参考图2,图2为本申请实施例所提供的一种死锁检测的系统的结构图。

该系统可以包括:

第一获取模块100,用于当进行加锁操作后获取锁的地址信息;

运算模块200,用于对地址信息进行哈希运算,得到对应的哈希值;

判断模块300,用于判断预设记录表中是否存有哈希值;

第一确定模块400,用于当预设记录表中存有哈希值时,根据哈希值对应的地址信息确定死锁发生的位置。

请参考图3,图3为本申请实施例所提供的另一种死锁检测的系统的结构图。

该系统还可以包括:

存储模块,用于当预设记录表中未存有哈希值时,将哈希值和地址信息的对应关系存入预设记录表中。

该系统还可以包括:

删除模块,用于当进行解锁操作时,将预设记录表中待解锁的地址信息与哈希值的对应关系删除。

该系统还可以包括:

第二获取模块,用于获取预设记录表中所有对应关系的存储时间;

第二确定模块,用于根据存储时间超过阈值的对应关系确定死锁发生的位置。

由于系统部分的实施例与方法部分的实施例相互对应,因此系统部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。

请参考图4,图4为本申请实施例所提供的一种死锁检测设备的结构图。

该死锁检测设备400可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(centralprocessingunits,cpu)422(例如,一个或一个以上处理器)和存储器432,一个或一个以上存储应用程序442或数据444的存储介质430(例如一个或一个以上海量存储设备)。其中,存储器432和存储介质430可以是短暂存储或持久存储。存储在存储介质430的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对装置中的一系列指令操作。更进一步地,处理器422可以设置为与存储介质430通信,在死锁检测设备400上执行存储介质430中的一系列指令操作。

死锁检测设备400还可以包括一个或一个以上电源424,一个或一个以上有线或无线网络接口450,一个或一个以上输入输出接口458,和/或,一个或一个以上操作系统441,例如windowsservertm,macosxtm,unixtm,linuxtm,freebsdtm等等。

上述图1所描述的死锁检测的方法中的步骤由死锁检测设备基于该图4所示的结构实现。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置、设备和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。

作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。

集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,功能调用装置,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

以上对本申请所提供的一种死锁检测的方法、系统、设备及可读存储介质进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1