一种多任务间互斥信号量死锁的检测方法技术

技术编号:37769785 阅读:12 留言:0更新日期:2023-06-06 13:33
本发明专利技术提供了一种多任务间互斥信号量死锁的检测方法,包括初始化一个任务位图和一个空的阻塞位图;取出一个任务在阻塞位图上标记,判断如果重复标记则说明存在死锁,否则进入检测;将同样等待在该任务的互斥信号量上的其他任务在阻塞位图上标记,判断如果重复标记则说明存在死锁;查看持有该互斥信号量的任务是否在永久等待其他互斥信号量,如果没有则与该互斥信号量相关的任务从任务位图中清除,重复上述步骤对其他任务检测直至任务位图为空,说明不存在死锁,检测结束。本发明专利技术设计的方法不仅有效且效率高,可以及时发现并解决死锁问题,保证系统继续运行。保证系统继续运行。保证系统继续运行。

【技术实现步骤摘要】
一种多任务间互斥信号量死锁的检测方法


[0001]本专利技术涉及计算机系统软件
,具体为一种多任务间互斥信号量死锁的检测方法。

技术介绍

[0002]任务(也可称之为进程或线程)是操作系统进行资源分配和调度的基本单位,互斥信号量是用来解决任务间互斥问题的一种方法,例如当两个或多个任务处于无限期互相等待对方手里的互斥信号量资源时,则会出现各个任务都被阻塞挂起的情况,进而导致任务无法继续运行的问题。一般系统中当出现任务被阻塞挂起而导致任务锁死时,则需要处理死锁,处理死锁策略包含预防死锁、避免死锁、死锁的检测与解除三方面的内容。
[0003]目前,当操作系统一旦发生死锁情况,则会造成发生死锁的任务无法运行完毕;发生死锁的任务所持有的资源无法被其他任务使用,降低资源利用率;死锁长期阻塞可能造成新的死锁等危害,其会使操作系统处于停滞状态。
[0004]因此,有必要对任务间的死锁进行检测,以确保操作系统的正常运行。

技术实现思路

[0005]为了实现操作系统运行过程中主动检测是否发生了死锁情况,并通知哪个任务发生了死锁,从而为死锁的解除提供支持,确保操作系统的正常运行的目的,本专利技术设计了一种多任务间互斥信号量死锁的检测方法。
[0006]实现专利技术目的的技术方案如下:一种多任务间互斥信号量死锁的检测方法,包括以下步骤:
[0007]S1、获取操作系统所有任务;
[0008]S2、提取处于等待互斥信号量状态的任务,并存入自定义的任务位图中;
[0009]S3、检测任务位图中任意一个待检测任务是否存在死锁;
[0010]若存在死锁,则上报死锁检测结果;
[0011]若不存在死锁,则进入并执行S4;
[0012]S4、获取与所述待检测任务等待同样互斥信号量的其他任务,检测所述其他任务是否存在死锁;
[0013]若存在死锁,则上报任务死锁检测结果;
[0014]若不存在死锁,则进入并执行S5;
[0015]S5、提取持有所述互斥信号量的任务,检测该任务是否存在死锁;
[0016]若不存在死锁,则删除与所述互斥信号量相关的任务,进入并执行S6;
[0017]若存在死锁,则将该任务作为新的待检测任务,进入并执行S4;
[0018]S6、重复步骤S3~S5,直至任务位图中所有任务均检测完成。
[0019]在一个实施例中,上述步骤S3中,任务位图中任意一个待检测任务是否存在死锁的检测方法,包括:
[0020]S301、取出任务位图中任意一个待检测任务;
[0021]S302、将所述待检测任务在自定义的阻塞位图中标记;
[0022]S303、判断所述待检测任务是否被重复标记;
[0023]若被重复标记,判断所述待检测任务存在死锁,则上报死锁检测结果;
[0024]若被初次标记,判断所述待检测任务不存在死锁,则进入并执行S4。
[0025]在一个实施例中,上述步骤S4中,获取与所述待检测任务等待同样互斥信号量的其他任务,检测所述其他任务是否存在死锁的方法,包括;
[0026]S401、提取待检测任务等待的互斥信号量;
[0027]S402、在任务位图中提取同样等待该所述互斥信号量的其他任务;
[0028]S403、将所述其他任务在阻塞位图中标记;
[0029]S404、判断所述其他任务是否被重复标记;
[0030]若被重复标记,则判断所述其他任务存在死锁,上报死锁检测结果;
[0031]若被初次标记,则进入并执行S5。
[0032]在一个实施例中,上述步骤S5中,提取持有所述互斥信号量的任务,检测该任务是否存在死锁的方法,包括;
[0033]S501、提取持有所述互斥信号量的任务;
[0034]S502、提取并判断该任务是否有等待的互斥信号量;
[0035]若该任务没有所述等待的互斥信号量,判断该任务不存在死锁,进入并执行S503,
[0036]若该任务有所述等待的互斥信号量,则将该任务作为新的待检测任务,进入并执行S4;
[0037]S503、删除阻塞位图中与所述互斥信号量相关的任务。
[0038]在上述实施例的一个改进实施例中,上述步骤S1中所述等待互斥信号量状态为永久等待互斥信号量状态。
[0039]在上述实施例的另一个改进实施例中,上述步骤S1中,获取操作系统所有任务前,先自定义一个空的任务位图和一个空的阻塞位图。其中,任务位图存储的是操作系统中处于等待互斥信号量状态的任务,阻塞位图存储的是所述待检测任务和其与相关的任务。
[0040]与现有技术相比,本专利技术的有益效果是:本专利技术设计的多任务间互斥信号量死锁的检测方法,可以在操作系统中任务无法运行完毕或停滞时,尽早发现并反馈系统中是否发生了由于两个及以上的任务均等待获取该互斥信号量而导致的死锁现象,以便于根据反馈的死锁结果(包括发生死锁的任务及相关的互斥信号量)采取相应的解除死锁措施,从而保证系统继续运行。
附图说明
[0041]为了更清楚地说明本专利技术实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。
[0042]图1为具体实施方式中多任务间互斥信号量死锁的检测方法的流程图。
具体实施方式
[0043]下面结合具体实施例来进一步描述本专利技术,本专利技术的优点和特点将会随着描述而
更为清楚。但这些实施例仅是范例性的,并不对本专利技术的范围构成任何限制。本领域技术人员应该理解的是,在不偏离本专利技术的精神和范围下可以对本专利技术技术方案的细节和形式进行修改或替换,但这些修改和替换均落入本专利技术的保护范围内。
[0044]一般来说,操作系统中包含多个任务(也可称之为进程或线程),各任务之间通过互斥信号量来实现互斥操作。同时,每个任务中均记录着其等待的互斥信号量和已获取的互斥信号量,且各互斥信号量中记录着等待该互斥信号量的任务。由于操作系统中多个任务是并发执行的,因此可能会发生若干个任务都在相互等待对方释放互斥信号量才能继续运行,否则就永远阻塞等待。
[0045]在此基础上,本具体实施方式公开了一种多任务间互斥信号量死锁的检测方法,参见图1所示,多任务间互斥信号量死锁的检测方法,包括以下步骤:
[0046]S1、获取操作系统所有任务。
[0047]S2、提取处于等待互斥信号量状态的任务,并存入自定义的任务位图中。
[0048]操作系统中可以获取其所有的任务,其各任务中都保存有该任务的互斥信号量相关信息,进而可以筛选出等待互斥信号量资源的所有任务进行后续分析。
[0049]S3、检测任务位图中任意一个待检测任务是否存在死锁;
[0050]若存在死锁,则上报死锁检测结果;
[0051]若不存在死锁,则进入并执行S4。
[0052]S4、获取与所述待检测任务等待同样互斥信号量的其他任务,检测所述其他任务是否存在死锁;<本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种多任务间互斥信号量死锁的检测方法,其特征在于,包括以下步骤:S1、获取操作系统所有任务;S2、提取处于等待互斥信号量状态的任务,并存入自定义的任务位图中;S3、检测任务位图中任意一个待检测任务是否存在死锁;若存在死锁,则上报死锁检测结果;若不存在死锁,则进入并执行S4;S4、获取与所述待检测任务等待同样互斥信号量的其他任务,检测所述其他任务是否存在死锁;若存在死锁,则上报死锁检测结果;若不存在死锁,则进入并执行S5;S5、提取持有所述互斥信号量的任务,检测该任务是否存在死锁;若不存在死锁,则删除与所述互斥信号量相关的任务,进入并执行S6;若存在死锁,则将该任务作为新的待检测任务,进入并执行S4;S6、重复步骤S3~S5,直至任务位图中所有任务均检测完成。2.根据权利要求1所述的多任务间互斥信号量死锁的检测方法,其特征在于:步骤S3中,任务位图中任意一个待检测任务是否存在死锁的检测方法,包括:S301、取出任务位图中任意一个待检测任务;S302、将所述待检测任务在自定义的阻塞位图中标记;S303、判断所述待检测任务是否被重复标记;若被重复标记,判断所述待检测任务存在死锁,则上报死锁检测结果;若被初次标记,判断所述待检测任务不存在死锁,则进入并执行S4。3.根据权利要求2所述的多任务间互斥信号量死锁的检测方法,其特征在于:...

【专利技术属性】
技术研发人员:张东仝敏时磊张磊边文涛高雅濛
申请(专利权)人:中国航空工业集团公司西安航空计算技术研究所
类型:发明
国别省市:

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

1