本发明涉及计算机系统软件,具体为一种多任务间互斥信号量死锁的检测方法。
背景技术:
1、任务(也可称之为进程或线程)是操作系统进行资源分配和调度的基本单位,互斥信号量是用来解决任务间互斥问题的一种方法,例如当两个或多个任务处于无限期互相等待对方手里的互斥信号量资源时,则会出现各个任务都被阻塞挂起的情况,进而导致任务无法继续运行的问题。一般系统中当出现任务被阻塞挂起而导致任务锁死时,则需要处理死锁,处理死锁策略包含预防死锁、避免死锁、死锁的检测与解除三方面的内容。
2、目前,当操作系统一旦发生死锁情况,则会造成发生死锁的任务无法运行完毕;发生死锁的任务所持有的资源无法被其他任务使用,降低资源利用率;死锁长期阻塞可能造成新的死锁等危害,其会使操作系统处于停滞状态。
3、因此,有必要对任务间的死锁进行检测,以确保操作系统的正常运行。
技术实现思路
1、为了实现操作系统运行过程中主动检测是否发生了死锁情况,并通知哪个任务发生了死锁,从而为死锁的解除提供支持,确保操作系统的正常运行的目的,本发明设计了一种多任务间互斥信号量死锁的检测方法。
2、实现发明目的的技术方案如下:一种多任务间互斥信号量死锁的检测方法,包括以下步骤:
3、s1、获取操作系统所有任务;
4、s2、提取处于等待互斥信号量状态的任务,并存入自定义的任务位图中;
5、s3、检测任务位图中任意一个待检测任务是否存在死锁;
6、若存在死锁,则上报死锁检测结果;
7、若不存在死锁,则进入并执行s4;
8、s4、获取与所述待检测任务等待同样互斥信号量的其他任务,检测所述其他任务是否存在死锁;
9、若存在死锁,则上报任务死锁检测结果;
10、若不存在死锁,则进入并执行s5;
11、s5、提取持有所述互斥信号量的任务,检测该任务是否存在死锁;
12、若不存在死锁,则删除与所述互斥信号量相关的任务,进入并执行s6;
13、若存在死锁,则将该任务作为新的待检测任务,进入并执行s4;
14、s6、重复步骤s3~s5,直至任务位图中所有任务均检测完成。
15、在一个实施例中,上述步骤s3中,任务位图中任意一个待检测任务是否存在死锁的检测方法,包括:
16、s301、取出任务位图中任意一个待检测任务;
17、s302、将所述待检测任务在自定义的阻塞位图中标记;
18、s303、判断所述待检测任务是否被重复标记;
19、若被重复标记,判断所述待检测任务存在死锁,则上报死锁检测结果;
20、若被初次标记,判断所述待检测任务不存在死锁,则进入并执行s4。
21、在一个实施例中,上述步骤s4中,获取与所述待检测任务等待同样互斥信号量的其他任务,检测所述其他任务是否存在死锁的方法,包括;
22、s401、提取待检测任务等待的互斥信号量;
23、s402、在任务位图中提取同样等待该所述互斥信号量的其他任务;
24、s403、将所述其他任务在阻塞位图中标记;
25、s404、判断所述其他任务是否被重复标记;
26、若被重复标记,则判断所述其他任务存在死锁,上报死锁检测结果;
27、若被初次标记,则进入并执行s5。
28、在一个实施例中,上述步骤s5中,提取持有所述互斥信号量的任务,检测该任务是否存在死锁的方法,包括;
29、s501、提取持有所述互斥信号量的任务;
30、s502、提取并判断该任务是否有等待的互斥信号量;
31、若该任务没有所述等待的互斥信号量,判断该任务不存在死锁,进入并执行s503,
32、若该任务有所述等待的互斥信号量,则将该任务作为新的待检测任务,进入并执行s4;
33、s503、删除阻塞位图中与所述互斥信号量相关的任务。
34、在上述实施例的一个改进实施例中,上述步骤s1中所述等待互斥信号量状态为永久等待互斥信号量状态。
35、在上述实施例的另一个改进实施例中,上述步骤s1中,获取操作系统所有任务前,先自定义一个空的任务位图和一个空的阻塞位图。其中,任务位图存储的是操作系统中处于等待互斥信号量状态的任务,阻塞位图存储的是所述待检测任务和其与相关的任务。
36、与现有技术相比,本发明的有益效果是:本发明设计的多任务间互斥信号量死锁的检测方法,可以在操作系统中任务无法运行完毕或停滞时,尽早发现并反馈系统中是否发生了由于两个及以上的任务均等待获取该互斥信号量而导致的死锁现象,以便于根据反馈的死锁结果(包括发生死锁的任务及相关的互斥信号量)采取相应的解除死锁措施,从而保证系统继续运行。
1.一种多任务间互斥信号量死锁的检测方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的多任务间互斥信号量死锁的检测方法,其特征在于:步骤s3中,任务位图中任意一个待检测任务是否存在死锁的检测方法,包括:
3.根据权利要求2所述的多任务间互斥信号量死锁的检测方法,其特征在于:步骤s4中,获取与所述待检测任务等待同样互斥信号量的其他任务,检测所述其他任务是否存在死锁的方法,包括;
4.根据权利要求2所述的多任务间互斥信号量死锁的检测方法,其特征在于:步骤s5中,提取持有所述互斥信号量的任务,检测该任务是否存在死锁的方法,包括;
5.根据权利要求1~4任一项所述的多任务间互斥信号量死锁的检测方法,其特征在于:步骤s1中所述等待互斥信号量状态为永久等待互斥信号量状态。
6.根据权利要求5所述的多任务间互斥信号量死锁的检测方法,其特征在于:步骤s1中,获取操作系统所有任务前,先自定义一个空的任务位图和一个空的阻塞位图。