CN103902356B - 一种信号量死锁的检测方法 - Google Patents
一种信号量死锁的检测方法 Download PDFInfo
- Publication number
- CN103902356B CN103902356B CN201210575762.5A CN201210575762A CN103902356B CN 103902356 B CN103902356 B CN 103902356B CN 201210575762 A CN201210575762 A CN 201210575762A CN 103902356 B CN103902356 B CN 103902356B
- Authority
- CN
- China
- Prior art keywords
- semaphore
- task
- deadlock
- signal
- chained list
- 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.)
- Expired - Fee Related
Links
Landscapes
- Debugging And Monitoring (AREA)
- Multi Processors (AREA)
Abstract
本发明提供了一种信号量死锁的检测方法,通过调用系统提供的信号量和任务函数动态的获取到信号量和任务信息,在操作系统之外的应用层创建信号量结构体和信号量链表。将处于等待状态的任务加入到信号量链表中,对链表进行死锁检测。本发明完全独立于操作系统,不必在操作系统中添加任何代码,是作为一套工具性的软件存在于系统的应用层。且没有繁琐的代码改动,没有给系统增加额外的开销,有效的解决了现有方法的缺点。
Description
【技术领域】
本发明涉及操作系统的信号量死锁的检测方法。
【背景技术】
在实时嵌入式操作系统中,对于共享资源的保护和任务间的协调及调度一般都是由系统提供信号量机制来进行管理。信号量可以有效地防止多个任务同时去访问系统的受保护资源。但有时,如果系统存在两个或两个以上的任务相互申请对方独占的信号量而导致双方都无法将任务继续下去,必须依靠外力的协助,这种现象称为信号量死锁。信号量死锁在软件开发和调试中比较常见,有效而精确的信号量死锁检测方法可以显示死锁中的信号量与任务间的占有和等待关系,有助于开发和调试。
当前,比较常见的信号量死锁检测方法是构造一个任务数组和一个信号量数组,通过系统创建任务和信号量时把相关信息记录到数组中,例如公开日为2006年9月13日、公开号为CN1831779A的专利文献揭示了一种信号量死锁的检索方法,该方法就构造了进程数组(即任务数组)和信号量数组。这类方法的缺点是显而易见的。创建任务和信号量是系统调用非常频繁的操作,如果每次操作的时候去给数组赋值这样不仅在代码上很繁琐,而且也增大的系统资源的开销。
【发明内容】
本发明需解决的技术问题是克服上述的不足,提供一种不必在操作系统中添加任何代码、没有繁琐的代码改动、没有给操作系统增加额外开销的操作系统信号量死锁的检测方法。
为解决上述的技术问题,本发明设计了一种操作系统信号量死锁的检测方法,其包括以下几个步骤:Step1:在操作系统之上的应用层建立信号量死锁检测命令;Step2:创建信号量结构体,信号量结构体包含的字段设有:信号量ID pSem、等待信号量的任务pWaitTaskTcb、拥有信号量的任务pOwner;Step3:通过调用操作系统函数判断所有任务,把处于等待的任务赋值给pWaitTaskTcb,通过pWaitTaskTcb偏移找到等待的信号量赋值给IDpSem,获取到占有信号量的任务赋值给pOwner;Step4:根据占有信号量的任务的信号量建立信号量链表a;Step5:执行死锁检测命令,遍历整条链条a,把存在等待和占有信号量关系的信号量结构体挑出来并重新组成一个新链表b,判断新链表b是否存在信号量环路,如果存在,则检测到存在信号死锁;如果不存在,则不存在信号死锁;继续遍历链表a,直到遍历完成为止。
根据本发明进一步改进,检测到存在信号死锁,把构成环路的任务及信号量打印出来。
本发明完全独立于操作系统,不必在操作系统中添加任何代码,是作为一套工具性的软件存在于系统的应用层。且没有繁琐的代码改动,没有给系统增加额外的开销,有效的解决了现有方法的缺点。
【附图说明】
图1是本发明操作系统信号量死锁的检测方法的流程图。
【具体实施方式】
下面结合附图和实施方式对本发明作进一步说明。
本发明提供了一种信号量死锁的检测方法,通过调用系统提供的信号量和任务函数动态的获取到信号量和任务信息,在操作系统之外的应用层创建信号量结构体和信号量链表。将处于等待状态的任务加入到链表中,对链表进行死锁检测。其具体的操作步骤如下:
Step1:在操作系统之上的应用层建立信号量死锁检测命令,sem check命令执行信号量死锁检测。
Step2:创建信号量结构体,信号量结构体包含的字段设有:信号量IDpSem、等待信号量的任务pWaitTaskTcb、拥有信号量的任务pOwner;
Step3:通过调用操作系统函数判断所有任务,把处于等待的任务赋值给pWaitTaskTcb,通过pWaitTaskTcb偏移找到等待的信号量赋值给ID pSem,获取到占有信号量的任务赋值给pOwner;
Step4:根据占有信号量的任务的信号量建立信号量链表a;
Step5:执行死锁检测命令sem check,遍历整条链条a,把存在等待和占有信号量关系的信号量结构体挑出来并重新组成一个新链表b,判断新链表b是否存在信号量环路。
如果存在信号量环路,则检测到存在信号死锁,把构成环路的任务及信号量打印出来。
如果不存在信号量环路,则不存在信号死锁;继续遍历链表a,直到遍历完成为止。
本发明完全独立于操作系统,不必在操作系统中添加任何代码,是作为一套工具性的软件存在于系统的应用层。且没有繁琐的代码改动,没有给系统增加额外的开销,有效的解决了现有方法的缺点。
以上所述的仅是本发明的实施方式,在此应当指出,对于本领域的普通技术人员来说,在不脱离本发明创造构思的前提下,还可以做出改进,但这些均属于本发明的保护范围。
Claims (1)
1.一种信号量死锁的检测方法,其特征在于,通过调用系统提供的信号量和任务函数动态的获取到信号量和任务信息,在操作系统之外的应用层创建信号量结构体和信号量链表,将处于等待状态的任务加入到链表中,对链表进行死锁检测,具体包括以下几个步骤:
Step1:在操作系统之外的应用层建立信号量死锁检测命令,sem check命令执行信号量死锁检测;
Step2:创建信号量结构体,信号量结构体包含的字段设有:信号量IDpSem、等待信号量的任务pWaitTaskTcb、拥有信号量的任务pOwner;
Step3:通过调用操作系统函数判断所有任务,把处于等待的任务赋值给pWaitTaskTcb,通过pWaitTaskTcb偏移找到等待的信号量赋值给ID pSem,获取到占有信号量的任务赋值给pOwner;
Step4:根据占有信号量的任务的信号量建立信号量链表a;
Step5:执行死锁检测命令sem check,遍历整条链表a,把存在等待和占有信号量关系的信号量结构体挑出来并重新组成一个新链表b,判断新链表b是否存在信号量环路,如果存在,则检测到存在信号死锁,把构成环路的任务及信号量打印出来;如果不存在,则不存在信号死锁;继续遍历链表a,直到遍历完成为止。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210575762.5A CN103902356B (zh) | 2012-12-26 | 2012-12-26 | 一种信号量死锁的检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210575762.5A CN103902356B (zh) | 2012-12-26 | 2012-12-26 | 一种信号量死锁的检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103902356A CN103902356A (zh) | 2014-07-02 |
CN103902356B true CN103902356B (zh) | 2018-07-31 |
Family
ID=50993695
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210575762.5A Expired - Fee Related CN103902356B (zh) | 2012-12-26 | 2012-12-26 | 一种信号量死锁的检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103902356B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104331370A (zh) * | 2014-11-26 | 2015-02-04 | 上海斐讯数据通信技术有限公司 | 一种栈安全检测方法与系统 |
CN109189582B (zh) * | 2018-07-20 | 2020-09-15 | 新华三技术有限公司合肥分公司 | 一种检测信号量超时原因的方法及装置 |
CN115344360A (zh) * | 2021-05-13 | 2022-11-15 | 华为技术有限公司 | 死锁检测方法、装置以及相关设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6560627B1 (en) * | 1999-01-28 | 2003-05-06 | Cisco Technology, Inc. | Mutual exclusion at the record level with priority inheritance for embedded systems using one semaphore |
CN1703676A (zh) * | 2002-01-12 | 2005-11-30 | 英特尔公司 | 基于进程事件的信号量系统 |
CN1831779A (zh) * | 2005-03-11 | 2006-09-13 | 华为技术有限公司 | 一种信号量死锁的检测方法 |
CN102567096A (zh) * | 2011-12-30 | 2012-07-11 | 中国科学院软件研究所 | 一种在多任务环境下防止死锁的互斥信号量管理方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH09330241A (ja) * | 1996-06-07 | 1997-12-22 | Tokai Univ | デッドロック防止排他制御方式 |
-
2012
- 2012-12-26 CN CN201210575762.5A patent/CN103902356B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6560627B1 (en) * | 1999-01-28 | 2003-05-06 | Cisco Technology, Inc. | Mutual exclusion at the record level with priority inheritance for embedded systems using one semaphore |
CN1703676A (zh) * | 2002-01-12 | 2005-11-30 | 英特尔公司 | 基于进程事件的信号量系统 |
CN1831779A (zh) * | 2005-03-11 | 2006-09-13 | 华为技术有限公司 | 一种信号量死锁的检测方法 |
CN102567096A (zh) * | 2011-12-30 | 2012-07-11 | 中国科学院软件研究所 | 一种在多任务环境下防止死锁的互斥信号量管理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103902356A (zh) | 2014-07-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103902356B (zh) | 一种信号量死锁的检测方法 | |
CN1158596C (zh) | 使用相关矩阵的调度操作 | |
WO2009014367A3 (en) | Method and apparatus for managing access privilege in cldc osgi environment | |
RU2011116176A (ru) | Атомарная множественная модификация данных в распределенной системе хранения данных | |
CN103346902B (zh) | 数据采集调度的方法及系统 | |
JP2008527555A5 (zh) | ||
MY155867A (en) | Scheduling collections in a scheduler | |
WO2008126221A1 (ja) | ソフトウェア修正管理プログラム、ソフトウェア修正管理装置、およびソフトウェア修正管理方法 | |
WO2010080323A3 (en) | Method and system for integrating an interaction management system with a business rules management system | |
JP2009031851A5 (zh) | ||
CN1818875A (zh) | 嵌入式操作系统分组硬实时任务调度的实现方法 | |
CN103064748A (zh) | 一种Linux下处理多进程间通讯的方法 | |
GB2532400A (en) | Efficient task scheduling using locking mechanism | |
BR112014027772A2 (pt) | permuta de dados entre antena e modem de dispositivo móvel | |
WO2010051336A3 (en) | System and method for well surveillance and management | |
WO2006118682A3 (en) | Validating application resources | |
Chen et al. | Status quo of China earthquake networks and analyses on its early warning capacity | |
CN102222189A (zh) | 一种保护操作系统的方法 | |
CN103197958A (zh) | 一种数据传输方法及系统与转发器设备 | |
CN205788952U (zh) | 一种led显示屏模块与箱体的组合结构 | |
CN104657222B (zh) | 一种面向smp调度系统的优化方法 | |
CN106169250A (zh) | 一种基于app的城市停车场与车主位置匹配方法 | |
CN102880506B (zh) | 一种基于作业调度系统的应用作业控制系统及其控制方法 | |
CN101546278A (zh) | 32位的程序与64位的驱动传输数据技术 | |
CN103729187A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20180731 Termination date: 20181226 |