CN104239147B - 一种处理死锁循环方法及系统 - Google Patents

一种处理死锁循环方法及系统 Download PDF

Info

Publication number
CN104239147B
CN104239147B CN201410559070.0A CN201410559070A CN104239147B CN 104239147 B CN104239147 B CN 104239147B CN 201410559070 A CN201410559070 A CN 201410559070A CN 104239147 B CN104239147 B CN 104239147B
Authority
CN
China
Prior art keywords
deadlock
resource
chained list
preferential
apllied
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.)
Active
Application number
CN201410559070.0A
Other languages
English (en)
Other versions
CN104239147A (zh
Inventor
肖健明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur Beijing Electronic Information Industry Co Ltd
Original Assignee
Inspur Beijing Electronic Information Industry Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Inspur Beijing Electronic Information Industry Co Ltd filed Critical Inspur Beijing Electronic Information Industry Co Ltd
Priority to CN201410559070.0A priority Critical patent/CN104239147B/zh
Publication of CN104239147A publication Critical patent/CN104239147A/zh
Application granted granted Critical
Publication of CN104239147B publication Critical patent/CN104239147B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明提供一种处理死锁循环方法及系统,属于信息技术领域;包括以下步骤:获取进程资源管理链表中的进程和所申请的资源;遍历资源管理进程链表获取占用所述资源的进程;若占用所述资源的进程位于死锁链表中,则按照预设的死锁处理策略,进行相应处理。根据本发明提供的一种处理死锁循环方法及系统,解决了进程死锁的问题,节约了系统资源,大大提升了系统工作效率。

Description

一种处理死锁循环方法及系统
技术领域
本发明属于信息技术领域,尤其涉及一种处理死锁循环方法及系统。
背景技术
在现在的信息系统当中,通常具有多种作业系统同时运行,要实现多种作业系统同时运行,一般在系统中会有多个进程同时运行,这些进程有时会对相同资源进行操作或请求相同资源以继续运行,这将出现资源竞争问题,为了解决资源竞争,系统开发人员开发出了各种各样的进程间通信的技术,如互斥锁,信号,信号量,消息队列等。
但是这些技术仍然有可能不能很好的工作,一个非常常见的例子就是死锁问题,一旦出现死锁情况,相关的进程将无法正常退出,浪费了大量的系统资源。
所谓死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,如果没有其他进程进行干预,它们都将无法运行下去,这种状态称为死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
造成死锁的原因一般有两个:
(1)竞争资源。当系统中供多个进程共享的资源如打印机,数据库等,其数目不能满足所有进程的需要时,将引起进程竞争而产生死锁。
(2)进程推进顺序不合理。进程在运行过程中,请求和释放资源的顺序不当,也同样会导致产生进程死锁。
出现死锁一般需要具备如下4个条件:
(1)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用,如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。
(2)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
(3)不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
(4)环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,……,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。
根据上面对相关死锁原因和条件的分析,要解决死锁问题,需要的是破坏死锁产生条件及原因,但是资源竞争是客观存在,而进程推进的顺序不合理情况也只能尽量避免,要完全的消除是不可能的,也就是从造成死锁的原因方面进行解决,这几乎不可能,因此解决死锁问题需要消除产生死锁的必要条件,目前业界还没有一个有效的解决方案。
发明内容
本发明提供一种处理死锁循环方法及系统,以解决上述问题。
本发明提供一种处理死锁循环方法。上述方法包括以下步骤:
获取进程资源管理链表中的进程和所申请的资源;
遍历资源管理进程链表获取占用所述资源的进程;
若占用所述资源的进程位于死锁链表中,则按照预设的死锁处理策略,进行相应处理。
本发明还提供一种处理死锁循环系统,包括获取模块、遍历模块、死锁处理模块;其中,所述获取模块通过所述遍历模块与所述死锁处理模块相连;
所述获取模块,用于获取进程资源管理链表中的进程和所申请的资源并发送至所述遍历模块;
所述遍历模块,用于遍历资源管理进程链表,获取占用所述资源的进程并发送至所述死锁处理模块;
所述死锁处理模块,用于若占用所述资源的进程位于死锁链表中,则按照预设的死锁处理策略,进行相应处理。
相较于先前技术,根据本发明提供的一种处理死锁循环方法及系统,解决了进程死锁的问题,节约了系统资源,大大提升了系统工作效率。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1所示为本发明实施例1的处理死锁循环方法流程图;
图2所示为本发明实施例2的处理死锁循环系统结构图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
图1所示为本发明实施例1的处理死锁循环方法流程图,包括以下步骤:
步骤101:获取进程资源管理链表中的进程和所申请的资源,如表1所示
进程ID 所申请的资源ID
进程A 资源1
进程B 资源2
进程C 资源3
进程D 资源1、资源4、资源5
进程E 资源1、资源6
表1
所申请的资源可以用资源ID进行标识。
进程资源管理链表Pid_source_manage数据结构可以进行如下设计,进程资源管理链表数据结构主要用于进程对获取的资源的管理。
Struct source {
Long Source_id; //资源id号
Struct source*next,*prev;//指向下一个/上一个资源结构的指针
};
Struct Pid_source_manage
{
Long pid; //进程ID号
Struct pid_source_manage *next,*prev; //指向下一个/上一个进程资源管理结构指针
Struct source*head; //进程占用的资源链表的表头
Struct source *apply_mutex_head; //申请互斥锁链表表头
Struct source *apply_share_head; //申请共享锁链表表头
};
这样创建一个进程就在内存中添加一个pid_source_manage结构,而进程每获取一个资源就插入一个source结构。
资源ID为系统预先分配的,系统为所有资源分别分配一个资源ID号;对于某些设备资源的资源ID号可以设置为设备的ID号(例如:打印机);文件资源ID号为文件首次打开时候的描述符,因为文件可能被多次打开,每次打开的描述符可能不同,但是资源是相同的。
资源ID号在资源不再使用时清除,如果后续继续打开该资源,系统再次分配资源ID号;资源ID号用于系统对资源的识别。
步骤102:遍历资源管理进程链表获取占用所述资源的进程;
如表2所示
资源ID 进程ID
资源1 进程A
资源2 进程B
资源3 进程C
资源4 进程D
资源5 进程D
资源6 进程E
表2
如表2所示,资源1被进程A占用、资源2被进程B占用、资源3被进程C占用、资源4被进程D占用、资源5被进程D占用、资源6被进程E占用。
其中,进程可以用进程ID进行标识。
资源管理进程链表source_manage_pid数据结构,主要用于资源对使用该资源的进程的管理。
Struct process
{
Long pid; //进程id
Struct process *next, *prev; //指向下一个/上一个process结构
}
Struct source_manage_pid
{
Long source_id; //资源Id号
Struct source_manage_pid *next, *prev; //指向下一个/上一个source_manage_pid数据结构
Struct process *share_head; //获取到共享锁的进程链表头
Struct process *exclusion_process;//获取到互斥锁的进程结构
Struct process *apply_exclusion_head;//需要申请互斥锁进程链表头
Struct process *apply_share_head;//需要申请共享锁进程链表头
}
设置这两个数据结构主要是为了跟踪资源被谁占用,以及还有那些进程想占用,以什么方式占用。
一旦有进程需要获取资源,就生成一个process结构,并根据满足的情况把该结构插入的相应的链表中;如果需要获取互斥锁,获取成功了则让exclusion_process指向该进程,如果获取不成功则插入apply_exclusion_head为表头的链表中;其他情况也类似。
上面的source_manage_pid和Pid_source_manage结构会形成链表,系统可以根据相应的表头进行访问。
步骤103:若占用所述资源的进程位于死锁链表中,则按照预设的死锁处理策略,进行相应处理。
处于死锁状态的进程存储在死锁链表中。
进程处于死锁状态的判断方式为:
若休眠队列中的进程的休眠时间大于或等于第一预设值时,则确认所述进程处于死锁状态;其中,所述第一预设值可以根据实际情况进行灵活设定,例如:20秒。
所述休眠时间不包括程序显式设定的休眠时间。
由于进程死锁会导致死锁进程无法执行,那样死锁进程将会被放入休眠队列。
进程处于死锁状态的判断方式还可以为:
若进程被阻塞的时间大于或等于第二预设值,则确认所述进程处于死锁状态;其中,所述第二预设值可以根据实际情况进行灵活设定,例如:40秒。
当然,第一预设值还可以与第二预设值相同。
对于设定自旋锁的情况,进程不进入休眠队列,可以设定进程被阻塞一定时间认为进入超时,进程进入死锁状态。
进程处于死锁状态的判断方式还可以为:
若所述进程被调度的次数大于或等于第三预设值并且还处于阻塞状态,则确认所述进程处于死锁状态;其中,所述第三预设值可以根据实际情况进行灵活设定,例如:3次。
进程在运行中,由于各种原因可能会被放入等待队列,由系统进程调度使进程继续重新进入运行状态,如果发现进程被多次调度,但进程仍然被阻塞在某一个地方,这时也可以认为进程已经进入死锁状态。
休眠队列中的进程的休眠时间小于第一预设值、进程被阻塞的时间小于第二预设值或进程被调度的次数小于第三预设值并且还处于阻塞状态时,则确认所述进程为疑似死锁进程,将所述疑似死锁进程的Pid_source_manage链入到“疑似死锁进程链表”中,所述“疑似死锁进程链表”的表头是全局变量,由系统维护。
Struct Pid_source_manage *deadlock_suspect_head。
若疑似死锁进程链表不为空,则执行步骤101。
若占用所述资源的进程位于死锁链表中,则按照预设的死锁处理策略,进行相应处理的过程为:
选择已占用资源最多的所述死锁链表中的进程为优先进程,若所述优先进程所申请的资源被所述死锁链表中的其它进程所占用,则剥夺所述死锁链表中的其它进程所占用的所述优先进程所申请的资源。
若占用所述资源的进程位于死锁链表中,则按照预设的死锁处理策略,进行相应处理的过程还可以为:
选择处理重要性等级最高的业务所对应的位于所述死锁链表中的进程为优先进程,若所述优先进程所申请的资源被所述死锁链表中的其它进程所占用,则剥夺所述死锁链表中的其它进程所占用的所述优先进程所申请的资源。
这样可以满足优先进程的运行,等优先进程执行完毕以后,相关的资源可以释放,这样通过多次的上述处理以后,就可以解除死锁循环,系统得以继续正常运行。
结合表1和表2,若进程A、进程D、进程E位于死锁链表中,由于进程D已占用2个资源即资源4、资源5;进程A占用1个资源即资源1;进程E占用1个资源即资源6。因此,选择已占用资源最多的进程D为优先进程,由于优先进程D所申请的资源1被死锁链表中的进程A所占用,则优先进程D剥夺死锁链表中的进程A所占用的优先进程D所申请的资源1。
或者
结合表1和表2,若进程A、进程D、进程E位于死锁链表中,若进程A处理聊天信息打印业务(业务重要性等级为一级)、进程D处理系统日志记录打印业务(业务重要性等级为二级)、进程E处理国际会议材料打印业务(业务重要性等级为三级),则选择处理重要性等级最高的业务所对应的位于所述死锁链表中的进程E为优先进程,由于优先进程E所申请的资源1(例如:打印机)被死锁链表中的进程A所占用,则优先进程E剥夺死锁链表中的进程A所占用的优先进程E所申请的资源1。
其中,业务重要性等级排序:三级>二级>一级。
图2所示为本发明实施例2的处理死锁循环系统结构图,包括获取模块、遍历模块、死锁处理模块;其中,所述获取模块通过所述遍历模块与所述死锁处理模块相连;
所述获取模块,用于获取进程资源管理链表中的进程和所申请的资源并发送至所述遍历模块;
所述遍历模块,用于遍历资源管理进程链表,获取占用所述资源的进程并发送至所述死锁处理模块;
所述死锁处理模块,用于若占用所述资源的进程位于死锁链表中,则按照预设的死锁处理策略,进行相应处理。
相较于先前技术,根据本发明提供的一种处理死锁循环方法及系统,解决了进程死锁的问题,节约了系统资源,大大提升了系统工作效率。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (8)

1.一种处理死锁循环方法,其特征在于,包括以下步骤:
获取进程资源管理链表中的进程和所申请的资源;
遍历资源管理进程链表获取占用所述资源的进程;
若占用所述资源的进程位于死锁链表中,则按照预设的死锁处理策略,进行相应处理;
所述进行相应处理的过程为:
选择已占用资源最多的所述死锁链表中的进程为优先进程,若所述优先进程所申请的资源被所述死锁链表中的其它进程所占用,则剥夺所述死锁链表中的其它进程所占用的所述优先进程所申请的资源;
或者选择处理重要性等级最高的业务所对应的位于所述死锁链表中的进程为优先进程,若所述优先进程所申请的资源被所述死锁链表中的其它进程所占用,则剥夺所述死锁链表中的其它进程所占用的所述优先进程所申请的资源。
2.根据权利要求1所述的方法,其特征在于:处于死锁状态的进程存储在死锁链表中。
3.根据权利要求2所述的方法,其特征在于:进程处于死锁状态的判断方式为:若休眠队列中的进程的休眠时间大于或等于第一预设值时,则确认所述进程处于死锁状态。
4.根据权利要求2所述的方法,其特征在于:进程处于死锁状态的判断方式为:若进程被阻塞的时间大于或等于第二预设值,则确认所述进程处于死锁状态。
5.根据权利要求2所述的方法,其特征在于:进程处于死锁状态的判断方式为:若所述进程被调度的次数大于或等于第三预设值并且还处于阻塞状态,则确认所述进程处于死锁状态。
6.根据权利要求3或4或5所述的方法,其特征在于:若休眠队列中的进程的休眠时间小于第一预设值、进程被阻塞的时间小于第二预设值或进程被调度的次数小于第三预设值并且还处于阻塞状态时,则确认所述进程为疑似死锁进程,将所述疑似死锁进程的进程资源管理链表Pid_source_manage链入到“疑似死锁进程链表”。
7.根据权利要求1所述的方法,其特征在于:获取进程资源管理链表中的进程和所申请的资源之前,还包括:判断疑似死锁进程链表不为空。
8.一种处理死锁循环系统,其特征在于,包括获取模块、遍历模块、死锁处理模块;其中,所述获取模块通过所述遍历模块与所述死锁处理模块相连;
所述获取模块,用于获取进程资源管理链表中的进程和所申请的资源并发送至所述遍历模块;
所述遍历模块,用于遍历资源管理进程链表,获取占用所述资源的进程并发送至所述死锁处理模块;
所述死锁处理模块,用于若占用所述资源的进程位于死锁链表中,则按照预设的死锁处理策略,进行相应处理,所述进行相应处理的过程为:
选择已占用资源最多的所述死锁链表中的进程为优先进程,若所述优先进程所申请的资源被所述死锁链表中的其它进程所占用,则剥夺所述死锁链表中的其它进程所占用的所述优先进程所申请的资源;
或者选择处理重要性等级最高的业务所对应的位于所述死锁链表中的进程为优先进程,若所述优先进程所申请的资源被所述死锁链表中的其它进程所占用,则剥夺所述死锁链表中的其它进程所占用的所述优先进程所申请的资源。
CN201410559070.0A 2014-10-20 2014-10-20 一种处理死锁循环方法及系统 Active CN104239147B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410559070.0A CN104239147B (zh) 2014-10-20 2014-10-20 一种处理死锁循环方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410559070.0A CN104239147B (zh) 2014-10-20 2014-10-20 一种处理死锁循环方法及系统

Publications (2)

Publication Number Publication Date
CN104239147A CN104239147A (zh) 2014-12-24
CN104239147B true CN104239147B (zh) 2018-03-09

Family

ID=52227278

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410559070.0A Active CN104239147B (zh) 2014-10-20 2014-10-20 一种处理死锁循环方法及系统

Country Status (1)

Country Link
CN (1) CN104239147B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105740079A (zh) * 2016-01-27 2016-07-06 浪潮(北京)电子信息产业有限公司 一种死锁处理方法与系统
CN107967181B (zh) * 2017-12-19 2021-11-16 北京小米移动软件有限公司 临界区的控制方法及装置
CN108536537B (zh) * 2018-03-29 2019-05-28 北京白山耘科技有限公司 一种进程资源回收方法及装置
CN110532197B (zh) * 2019-08-30 2022-03-01 Oppo(重庆)智能科技有限公司 内存回收方法及装置、电子设备、存储介质
CN110633147B (zh) * 2019-09-06 2022-08-19 苏州浪潮智能科技有限公司 一种操作系统进程管理的方法及装置
CN110851286B (zh) * 2019-11-12 2023-02-17 北京城市网邻信息技术有限公司 线程管理方法、装置、电子设备及存储介质
CN112199203A (zh) * 2020-11-16 2021-01-08 奥士康科技股份有限公司 一种多表操作引起死锁的解决方法及系统
CN112769640B (zh) * 2020-12-23 2022-09-16 中移(杭州)信息技术有限公司 进程通信方法、系统、服务器及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1539105A (zh) * 2001-08-03 2004-10-20 �׹��Ĺ��ʹ�˾ 用于死锁检测的牺牲选择
CN101295266A (zh) * 2008-06-05 2008-10-29 华为技术有限公司 检测和解除死锁的方法、装置和系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070101338A1 (en) * 2005-10-31 2007-05-03 Microsoft Corporation Detection, diagnosis and resolution of deadlocks and hangs

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1539105A (zh) * 2001-08-03 2004-10-20 �׹��Ĺ��ʹ�˾ 用于死锁检测的牺牲选择
CN101295266A (zh) * 2008-06-05 2008-10-29 华为技术有限公司 检测和解除死锁的方法、装置和系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
浅谈linux的死锁检测;alex-huang;《http://blog.chinaunix.net/uid-25942458-id-3823545.html》;20130728;第1-5页 *
计算机操作系统第四章死锁处理;子衣梦蝶;《百度文库http://wenku.baidu.com/view/8c93ca4fe45c3b3566ec8b04.html》;20120226;第1-56页 *

Also Published As

Publication number Publication date
CN104239147A (zh) 2014-12-24

Similar Documents

Publication Publication Date Title
CN104239147B (zh) 一种处理死锁循环方法及系统
CN102360310B (zh) 一种分布式系统环境下的多任务进程监视方法
CN105320561B (zh) 任务管理方法和系统
CN106209482A (zh) 一种数据中心监控方法及系统
CN106528288A (zh) 一种资源管理方法、装置和系统
CN105320570B (zh) 资源管理方法和系统
CN110557416B (zh) 一种多节点协同打块的方法及系统
CN101777154A (zh) 一种工作流管理系统中工作流数据的持久化方法
CN106358054A (zh) 一种集群视频分析方法和系统
CN104750522A (zh) 任务或流程的动态执行方法和系统
DE60125540T2 (de) Verfahren und gerät für einen ablaufsplanungstreiber zum implementieren eines protokolls mittels zeitschätzungen für anwendung mit einem gerät das keine unterbrechungen erzeugt
CN103049311B (zh) 分区操作系统的综合化调度算法
CN107357640B (zh) 多线程数据库的请求处理方法及装置、电子设备
CN112269999A (zh) 一种漏洞扫描任务调度的方法、装置、设备和介质
DE112011100098B4 (de) Effiziente Mehrkernverarbeitung von Ereignissen
CN111767145A (zh) 容器调度系统、方法、装置和设备
CN106530059A (zh) 订单处理方法及系统
CN111400015A (zh) 一种任务调度方法及装置
CN106775974A (zh) 一种分布式优先级排队锁的实现方法
CN114579323A (zh) 一种线程处理方法、装置、设备及介质
CN101189579A (zh) 基于行为模型的多线程体系结构
CN106681809A (zh) 一种基于锁的线程管理方法及装置
CN106598726A (zh) 一种多任务管理系统及其分布式部署方法
CN116010051A (zh) 一种联邦学习多任务调度方法及装置
CN115469989A (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