CN103268256A - 多任务操作系统中死锁检测方法及装置 - Google Patents
多任务操作系统中死锁检测方法及装置 Download PDFInfo
- Publication number
- CN103268256A CN103268256A CN2013102104373A CN201310210437A CN103268256A CN 103268256 A CN103268256 A CN 103268256A CN 2013102104373 A CN2013102104373 A CN 2013102104373A CN 201310210437 A CN201310210437 A CN 201310210437A CN 103268256 A CN103268256 A CN 103268256A
- Authority
- CN
- China
- Prior art keywords
- task
- semaphore
- block
- tcb
- mutex amount
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种多任务操作系统中死锁检测方法及装置,本发明的检测方法包括创建任务控制块、创建信号量控制块以及检测某工作任务是否存在互斥信号量等待环路,若存在互斥信号量等待环路,则所述某工作任务在获取互斥信号量时与另外的任务发生了互斥信号量死锁;检测装置包括任务控制块创建模块、信号量控制块创建模块和检测模块。本发明的方法和装置根据操作系统中任务控制块和信号量控制块之间的关系,去检测工作任务是否存在互斥信号量等待环路,进而检测互斥信号量是否发生死锁,其检测原理简单,可实现性强,增强了软件系统的可维护性,不仅适用于vxWorks操作系统,还适用于类vxWorks操作系统。
Description
技术领域
本发明属于计算机多任务操作系统技术领域,具体涉及多任务操作系统中的信号量管理技术。
背景技术
软件系统中一般运行着多个任务,任务互斥是任务之间常见的一种操作。任务互斥的通常情形是多个任务需要同时访问某个共享资源,任务之间由于相互占有独占的资源,并申请属于对方的独占资源,导致双方都无法继续执行的现象称为死锁。
死锁产生需要下面四个条件:互斥条件:共享资源要么已经分配给一个任务,要么是可用的;占有和等待条件:已经占有某共享资源的任务,可以继续申请新的共享资源;不可抢占条件:已经被一个任务占有的资源,不能被强制性抢占,该资源只能被占有任务显式释放;环路等待条件:死锁发生时,系统一定有由两个或者两个以上的任务组成一条环路,该环路中每个任务都在等待下一个任务所占有的资源。
在操作系统中,互斥信号量是用来解决任务互斥问题的机制,达到保护临界资源的目的。软件系统中,互斥信号量使用不当,可能造成信号量死锁,导致软件系统工作异常,因此,信号量死锁的检测对软件系统故障定位来说显得非常重要。
发明内容
本发明解决的技术问题是提供一种检测多任务操作系统中的死锁的方法及装置,以增强软件系统的可维护性。
本发明采用的技术方案:一种多任务操作系统中死锁检测方法,具体为:
为每一个工作任务创建任务控制块;
为一个互斥信号量创建信号量控制块;
创建检测任务,根据工作任务的任务控制块和信号量控制块之间的关系,检测某工作任务是否存在互斥信号量等待环路,若存在互斥信号量等待环路,则所述某工作任务在获取互斥信号量时与另外的任务发生了互斥信号量死锁。
进一步的,所述任务控制块包括阻塞队列指针字段,所述阻塞队列指针字段用于指向阻塞本任务的队列。
进一步的,所述信号量控制块包括:占有者字段和阻塞队列字段,其中,所述占有者字段用于指向已经获取该信号量的任务的任务控制块;所述阻塞队列字段表示阻塞在该信号量上的任务队列。
更进一步的,所述任务控制块与所述信号量控制块的关系为:根据任务控制块中的阻塞队列指针字段计算任务被阻塞信号量的信号量控制块,根据信号量控制块中的占有者字段计算信号量的占有者任务的任务控制块。
进一步的,所述互斥信号量等待环路为:阻塞某任务的互斥信号量的第一占有任务,阻塞第一占有任务的信号量的第二占有任务,依次递推,如果某一层次的占有任务是所述某任务,则所述某任务获取互斥信号量时出现了互斥信号量等待环路;所述某一层次的占有任务不包括第一占有任务。
进一步的,所述方法还包括所述检测任务用于周期性的对操作系统中各个工作任务进行互斥信号量死锁检测。
为了解决上述问题,本发明还提出了一种多任务操作系统中互斥信号量死锁的检测装置,包括:任务控制块创建模块、信号量控制块创建模块和检测模块,其中,
所述任务控制块创建模块,用于为每一个工作任务创建任务控制块;
所述创建信号量控制块,用于为每一个互斥信号量创建信号量控制块,所述任务控制块与所述信号量控制块的关系为:根据任务控制块计算任务被阻塞信号量的信号量控制块,根据信号量控制块中计算信号量的占有者任务的任务控制块;
所述检测模块用于检测某工作任务是否存在互斥信号量等待环路,若存在互斥信号量等待环路,则所述某工作任务在获取互斥信号量时与另外的任务发生了互斥信号量死锁。
进一步的,所述任务运行的各项信息字段包括阻塞队列指针字段,所述阻塞队列指针字段用于指向阻塞本任务的队列;所述信号量控制块中包括:占有者字段和阻塞队列字段,其中,所述占有者字段指向已经获取该信号量的任务的任务控制块;所述阻塞队列字段表示阻塞在该信号量上的任务队列。
进一步的,所述任务控制块与所述信号量控制块的关系为:根据任务控制块中的阻塞队列指针字段计算任务被阻塞信号量的信号量控制块,根据信号量控制块中的占有者字段计算信号量的占有者任务的任务控制块。
进一步的,所述互斥信号量等待环路为:阻塞某任务的互斥信号量的第一占有任务,阻塞第一占有任务的信号量的第二占有任务,依次递推,如果某一层次的占有任务是所述某任务,则所述某任务获取互斥信号量时出现了互斥信号量等待环路;所述某一层次的占有任务不包括第一占有任务。
本发明的有益效果:本发明的检测方法和检测装置根据操作系统中任务控制块和信号量控制块之间的关系,检测任务是否存在互斥信号量等待环路,进而检测互斥信号量是否发生死锁,其检测原理简单,可实现性强,增强了软件系统的可维护性,不仅适用于vxWorks操作系统,还适用于类vxWorks操作系统。
附图说明
图1为本发明实施例中vxWorks操作系统的任务控制块和信号量控制块之间的关系示意图。
图2为本发明实施例中vxWorks操作系统的互斥信号量死锁检测示意图。
具体实施方式
下面结合附图对本发明的实施例做进一步的说明。
本发明实施例的多任务操作系统中死锁的检测方法,具体为:为每一个工作任务创建任务控制块;为一个互斥信号量创建信号量控制块;创建检测任务,根据工作任务的任务控制块和信号量控制块之间的关系,检测某工作任务是否存在互斥信号量等待环路,若存在互斥信号量等待环路,则所述某工作任务在获取互斥信号量时与另外的任务发生了互斥信号量死锁。
这里的任务控制块包括阻塞队列指针字段,阻塞队列指针字段用于指向阻塞本任务的队列。
这里的信号量控制块中包括:占有者字段和阻塞队列字段,其中,占有者字段指向已经获取该信号量的任务的任务控制块;阻塞队列字段表示阻塞在该信号量上的任务队列。
以vxWorks操作系统为例进行说明,在vxWorks操作系统中,使用一个结构体来管理任务,可以称此结构体为任务控制块,任务控制块和任务一一对应,任务控制块中有任务运行的各项信息字段,其中,阻塞队列指针字段:阻塞本任务的队列的指针;使用一个结构体来管理信号量,可以称此结构体为信号量控制块,信号量控制块与信号量一一对应。对于互斥信号量来说,信号量控制块中:所有者字段表示已经获取该信号量的任务的任务控制块;阻塞队列字段表示阻塞在该信号量上的任务队列。
任务控制块和信号量控制块之间的关系如图1所示,任务控制块TCB1的阻塞队列指针指向信号量控制块中的阻塞队列字段,通过队列字段的地址作偏移后可以计算出信号量控制块SCB的地址。信号量控制块的占有者字段指向已经获取该信号量的任务的任务控制块TCB2,TCB1与TCB2不可能相等。
这里互斥信号量等待环路是指:阻塞某任务T1的互斥信号量的占有任务T2,阻塞占有任务T2的信号量的占有任务T3,这样递推下去,如果检测到某一层次的占有任务Tn(n>2)是所述某任务T1,则说明所述某任务T1获取互斥信号量时出现了互斥信号量等待环路,而通过检测某工作任务是否存在互斥信号量等待环路,若存在互斥信号量等待环路,则说明所述某工作任务在获取互斥信号量时与另外的任务发生了互斥信号量死锁。
在此检测任务可以周期性的对系统中各个工作任务进行互斥信号量死锁检测;检测任务检测到某工作任务出现互斥信号量死锁后,需要把任务和互斥信号量的信息输出,根据输出的信息定位问题和解决问题。
下面是检测任务对工作任务T1进行的一次互斥信号量死锁检测的一个具体过程。
如图2所示,n个任务和n个信号量,任务Ti的任务控制块为TCBi,信号量Si的信号量控制块为SCBi,其中,i=1,2,3,…n。
第1步、对于任务控制块TCB1,如果TCB1的阻塞队列指针为空,则说明任务T1在获取信号量时没有发生死锁,结束本次对T1的检测,否则根据阻塞队列指针计算出被阻塞的信号量S1的信号量控制块SCB1。
第2步、如果SCB1的占有者指针TCB2为空或者TCB2的阻塞队列指针为空,则T1在获取信号量时没有发生死锁,结束本次对T1的检测,否则执行第3步。
第3步、计算出T2被阻塞的信号量的控制块SCB2。
第4步、在i=3时,如果TCBi为空,T1在获取信号量没有发生死锁,结束本次对T1的检测;如TCBi与TCB1相等,则说明任务T1和任务Ti在获取信号量S1和Si-1发生死锁,报告死锁信息,结束本次对T1的检测;如果TCBi的阻塞队列指针为空,则说明任务T1在获取信号的时候没有发生死锁,结束本次对T1的检测;否则执行第5步。
第5步、在i=3时,根据TCBi的阻塞队列指针计算SCBi,如果SCBi的占有者指针为空,说明任务T1在获取信号量S1时没有发生死锁,结束本次对T1的检测。
如果在i=3时,对T1的检测没有结束,依次类推,按照第4步、第5步的描述,可以得到在i=4,5,…n时对T1继续检测的过程。
基于上述方法,这里还提供了一种多任务操作系统中互斥信号量死锁的检测装置,包括:
任务控制块创建模块、信号量控制块创建模块和检测模块,其中,所述任务控制块创建模块,用于为每一个工作任务创建任务控制块;所述创建信号量控制块,用于为每一个互斥信号量创建信号量控制块,所述任务控制块与所述信号量控制块的关系为:根据任务控制块计算任务被阻塞信号量的信号量控制块,根据信号量控制块中计算信号量的占有者任务的任务控制块;所述检测模块用于检测某工作任务是否存在互斥信号量等待环路,若存在互斥信号量等待环路,则所述某工作任务在获取互斥信号量时与另外的任务发生了互斥信号量死锁。
这里的任务控制块包括阻塞队列指针字段,阻塞队列指针字段用于指向阻塞本任务的队列;信号量控制块中包括:占有者字段和阻塞队列字段,其中,所述占有者字段指向已经获取该信号量的任务的任务控制块;所述阻塞队列字段表示阻塞在该信号量上的任务队列。
基于上述阻塞队列指针字段、占有者字段和阻塞队列字段,任务控制块与信号量控制块的关系为:根据任务控制块中的阻塞队列指针字段计算任务被阻塞信号量的信号量控制块,根据信号量控制块中的占有者字段计算信号量的占有者任务的任务控制块,具体关系也可参加图1。
这里互斥信号量等待环路是指:阻塞某任务T1的互斥信号量的占有任务T2,阻塞占有任务T2的信号量的占有任务T3,这样递推下去,如果检测到某一层次的占有任务Tn(n>2)是所述某任务T1,则说明所述某任务T1获取互斥信号量时出现了互斥信号量等待环路,而通过检测某工作任务是否存在互斥信号量等待环路,若存在互斥信号量等待环路,则说明所述某工作任务在获取互斥信号量时与另外的任务发生了互斥信号量死锁。
这里的检测装置还包括创建检测任务模块,用于周期性的对系统中各个工作任务进行互斥信号量死锁检测;检测任务检测到某工作任务出现互斥信号量死锁后,需要把任务和互斥信号量的信息输出,根据这些信息定位问题和解决问题。
本领域的技术人员应该可以理解,这里的检测装置与上述检测方法是对应的,可以参考上述检测方法的具体过程去理解这里检测装置的工作过程,在此不再详细描述。
通过上述描述和分析可以看出本发明的检测方法和检测装置具体根据操作系统中任务控制块和信号量控制块之间的关系,检测任务是否存在互斥信号量等待环路,进而检测互斥信号量是否发生死锁,其检测原理简单,可实现性强,增强了软件系统的可维护性,不仅适用于vxWorks操作系统,还适用于类vxWorks操作系统。
本领域的普通技术人员将会意识到,这里所述实施例是为了帮助读者理解本发明的原理,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。
Claims (9)
1.一种多任务操作系统中死锁检测方法,具体为:
为每一个工作任务创建任务控制块;
为一个互斥信号量创建信号量控制块;
创建检测任务,根据工作任务的任务控制块和信号量控制块之间的关系,检测某工作任务是否存在互斥信号量等待环路,若存在互斥信号量等待环路,则所述某工作任务在获取互斥信号量时与另外的任务发生了互斥信号量死锁。
2.根据权利要求1所述的方法,其特征在于,所述任务控制块包括阻塞队列指针字段,所述阻塞队列指针字段用于指向阻塞本任务的队列。
3.根据权利要求2所述的方法,其特征在于,所述信号量控制块中包括:占有者字段和阻塞队列字段,其中,所述占有者字段用于指向已经获取该信号量的工作任务的任务控制块;所述阻塞队列字段表示阻塞在该信号量上的任务队列。
4.根据权利要求1所述的方法,其特征在于,所述互斥信号量等待环路为:阻塞某任务的互斥信号量的第一占有任务,阻塞第一占有任务的信号量的第二占有任务,依次递推,如果某一层次的占有任务是所述某任务,则所述某任务获取互斥信号量时出现了互斥信号量等待环路;所述某一层次的占有任务不包括第一占有任务。
5.根据权利要求1至4任一项权利要求所述的方法,其特征在于,所述方法还包括所述检测任务用于周期性的对操作系统中各个工作任务进行互斥信号量死锁检测。
6.一种多任务操作系统中死锁检测装置,包括:任务控制块创建模块、信号量控制块创建模块和检测模块,其中,
所述任务控制块创建模块,用于为每一个工作任务创建任务控制块;
所述创建信号量控制块,用于为每一个互斥信号量创建信号量控制块,所述任务控制块与所述信号量控制块的关系为:根据任务控制块计算任务被阻塞信号量的信号量控制块,根据信号量控制块中计算信号量的占有者任务的任务控制块;
所述检测模块用于检测某工作任务是否存在互斥信号量等待环路,若存在互斥信号量等待环路,则所述某工作任务在获取互斥信号量时与另外的任务发生了互斥信号量死锁。
7.根据权利要求6所述的多任务操作系统中死锁检测装置,其特征在于,所述任务控制块包括阻塞队列指针字段,所述阻塞队列指针字段用于指向阻塞本任务的队列;所述信号量控制块中包括:占有者字段和阻塞队列字段,其中,所述占有者字段指向已经获取该信号量的任务的任务控制块;所述阻塞队列字段表示阻塞在该信号量上的任务队列。
8.根据权利要求7所述的多任务操作系统中死锁检测装置,其特征在于,所述任务控制块与所述信号量控制块的关系为:根据任务控制块中的阻塞队列指针字段计算任务被阻塞信号量的信号量控制块,根据信号量控制块中的占有者字段计算信号量的占有者任务的任务控制块。
9.根据权利要求6所述的多任务操作系统中死锁检测装置,其特征在于,所述互斥信号量等待环路为:阻塞某任务的互斥信号量的第一占有任务,阻塞第一占有任务的信号量的第二占有任务,依次递推,如果某一层次的占有任务是所述某任务,则所述某任务获取互斥信号量时出现了互斥信号量等待环路;所述某一层次的占有任务不包括第一占有任务。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013102104373A CN103268256A (zh) | 2013-05-31 | 2013-05-31 | 多任务操作系统中死锁检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013102104373A CN103268256A (zh) | 2013-05-31 | 2013-05-31 | 多任务操作系统中死锁检测方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103268256A true CN103268256A (zh) | 2013-08-28 |
Family
ID=49011889
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2013102104373A Pending CN103268256A (zh) | 2013-05-31 | 2013-05-31 | 多任务操作系统中死锁检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103268256A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103678122A (zh) * | 2013-11-29 | 2014-03-26 | 华为技术有限公司 | 一种死锁检测方法、设备及系统 |
CN103699104A (zh) * | 2013-12-30 | 2014-04-02 | 苏州大学 | 一种死锁避免控制方法、装置和自动化生产系统 |
CN109189582A (zh) * | 2018-07-20 | 2019-01-11 | 新华三技术有限公司合肥分公司 | 一种检测信号量超时原因的方法及装置 |
CN114860463A (zh) * | 2022-03-31 | 2022-08-05 | 威胜信息技术股份有限公司 | 一种嵌入式实时操作系统死锁自动检测方法、系统及介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040025164A1 (en) * | 2002-07-30 | 2004-02-05 | Intel Corporation | Detecting deadlocks in multithreaded programs |
CN1702623A (zh) * | 2005-06-13 | 2005-11-30 | 浙江大学 | 一种微内核嵌入式实时操作系统的任务级资源管理方法 |
CN1831779A (zh) * | 2005-03-11 | 2006-09-13 | 华为技术有限公司 | 一种信号量死锁的检测方法 |
CN1987796A (zh) * | 2005-12-22 | 2007-06-27 | 国际商业机器公司 | 检测多线程程序中的死锁的方法和装置 |
CN102567096A (zh) * | 2011-12-30 | 2012-07-11 | 中国科学院软件研究所 | 一种在多任务环境下防止死锁的互斥信号量管理方法 |
-
2013
- 2013-05-31 CN CN2013102104373A patent/CN103268256A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040025164A1 (en) * | 2002-07-30 | 2004-02-05 | Intel Corporation | Detecting deadlocks in multithreaded programs |
CN1831779A (zh) * | 2005-03-11 | 2006-09-13 | 华为技术有限公司 | 一种信号量死锁的检测方法 |
CN1702623A (zh) * | 2005-06-13 | 2005-11-30 | 浙江大学 | 一种微内核嵌入式实时操作系统的任务级资源管理方法 |
CN1987796A (zh) * | 2005-12-22 | 2007-06-27 | 国际商业机器公司 | 检测多线程程序中的死锁的方法和装置 |
CN102567096A (zh) * | 2011-12-30 | 2012-07-11 | 中国科学院软件研究所 | 一种在多任务环境下防止死锁的互斥信号量管理方法 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103678122A (zh) * | 2013-11-29 | 2014-03-26 | 华为技术有限公司 | 一种死锁检测方法、设备及系统 |
CN103678122B (zh) * | 2013-11-29 | 2016-03-30 | 华为技术有限公司 | 一种死锁检测方法、设备及系统 |
CN103699104A (zh) * | 2013-12-30 | 2014-04-02 | 苏州大学 | 一种死锁避免控制方法、装置和自动化生产系统 |
CN103699104B (zh) * | 2013-12-30 | 2017-01-25 | 苏州大学 | 一种死锁避免控制方法、装置和自动化生产系统 |
CN109189582A (zh) * | 2018-07-20 | 2019-01-11 | 新华三技术有限公司合肥分公司 | 一种检测信号量超时原因的方法及装置 |
CN109189582B (zh) * | 2018-07-20 | 2020-09-15 | 新华三技术有限公司合肥分公司 | 一种检测信号量超时原因的方法及装置 |
CN114860463A (zh) * | 2022-03-31 | 2022-08-05 | 威胜信息技术股份有限公司 | 一种嵌入式实时操作系统死锁自动检测方法、系统及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103268256A (zh) | 多任务操作系统中死锁检测方法及装置 | |
CN100359481C (zh) | 多任务系统的异常监控装置及其方法 | |
CN104360868B (zh) | 一种大型飞机综合处理平台中的多级故障管理方法 | |
CN103502942A (zh) | 虚拟机管理设备、虚拟机管理方法及其程序 | |
WO2008126221A1 (ja) | ソフトウェア修正管理プログラム、ソフトウェア修正管理装置、およびソフトウェア修正管理方法 | |
US9411633B2 (en) | System and method for barrier command monitoring in computing systems | |
CN105579963B (zh) | 任务处理装置、电子设备及方法 | |
CN104881324A (zh) | 一种多线程下的内存管理方法 | |
CN103345422A (zh) | 一种基于Linux的多线程硬实时控制方法 | |
CN106548247A (zh) | 一种移动机器人系统的交通管制方法 | |
CN104407958A (zh) | 一种高可靠性的系统监测方法和系统 | |
CN104239147A (zh) | 一种处理死锁循环方法及系统 | |
CN100543686C (zh) | 一种检测任务死循环的方法及系统 | |
CN102096605A (zh) | 一种嵌入式实时操作系统中多级资源管理的实现方法 | |
CN100517177C (zh) | 一种组合式复位系统处理方法及装置 | |
CN101853191A (zh) | 检测操作系统中任务死循环的方法及操作系统 | |
CN104391754A (zh) | 一种任务异常的处理方法及装置 | |
CN103019849B (zh) | 云计算环境下的虚拟机管理方法 | |
CN103631695A (zh) | 时间监测方法及装置 | |
CN106294137A (zh) | 一种linux用户态自旋锁死锁检测方法及系统 | |
CN101529353B (zh) | 用于对自动化系统进行在线程序修改的方法 | |
CN104731800A (zh) | 数据分析装置 | |
US20160179627A1 (en) | Method and system for checkpointing a global state of a distributed system | |
CN103259845A (zh) | 基于网络中断的数据备份任务的改进方法 | |
CN104239013A (zh) | 基于委托的分散式状态机及其处理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20130828 |
|
RJ01 | Rejection of invention patent application after publication |