CN102567096A - 一种在多任务环境下防止死锁的互斥信号量管理方法 - Google Patents
一种在多任务环境下防止死锁的互斥信号量管理方法 Download PDFInfo
- Publication number
- CN102567096A CN102567096A CN2011104504333A CN201110450433A CN102567096A CN 102567096 A CN102567096 A CN 102567096A CN 2011104504333 A CN2011104504333 A CN 2011104504333A CN 201110450433 A CN201110450433 A CN 201110450433A CN 102567096 A CN102567096 A CN 102567096A
- Authority
- CN
- China
- Prior art keywords
- semaphore
- mutex
- task
- amount
- semaphores
- 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.)
- Granted
Links
Images
Landscapes
- Multi Processors (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种在多任务环境中防止死锁的互斥信号量管理方法,包括以下步骤:A、为***所需的互斥信号量分配一一对应的编号;B、建立包括含有互斥信号量的ID与互斥信号量编号信息的双向链表,并指明任务已经占有的信号量的个数以及任务可占有信号量的最大个数;C、建立针对互斥信号量的状态数组,以所述互斥信号量编号为状态数组下标,指示互斥信号量在***中的存在个数;数组的每个成员值表示,***中所对应编号的互斥信号量的拥有个数;D、在任务状态控制块中根据互斥信号量的ID按照互斥信号量编号从小到大的顺序申请信号量,并根据信号量的使用情况,对任务状态控制块中存放占有信号量的个数的域以及互斥信号量状态数组进行更新。
Description
技术领域
本发明属于计算机操作***技术领域,尤其涉及一种在多任务环境下防止死锁的互斥信号量管理方法。
背景技术
在嵌入式计算机操作***中,很多情况下,需要保障任务独自访问共享资源或者临界区。可能几个任务竞争地访问这些资源,所以必须同步它们的行为,以实现独占式的访问。互斥信号量是专门被设计用来提供互斥访问,从而避免任务间冲突和不确定交互的方法。然而,使用互斥信号量的一个潜在问题是死锁。死锁是由两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法继续执行。
发明内容
鉴于现有技术中存在的问题,本发明提供一种在多任务环境下防止死锁的互斥信号量管理方法,其特征在于包括如下步骤:
A、为***所需的互斥信号量分配一一对应的编号,编号有大小之分;
B、在任务状态控制块中建立包括含有互斥信号量的ID与互斥信号量编号信息的双向链表,并指明任务已经占有的信号量的个数以及任务可占有信号量的最大个数;
C、在***中建立针对互斥信号量的状态数组,以所述互斥信号量编号为状态数组下标,指示互斥信号量在***中的存在个数;数组的每个成员值表示***中所对应编号的互斥信号量的拥有个数;
D、在任务状态控制块中根据互斥信号量的ID按照互斥信号量编号从小到大的顺序申请信号量,并根据信号量的使用情况,对任务状态控制块中存放占有信号量的个数的域以及互斥信号量状态数组进行更新。
进一步,本发明所述的在多任务环境中防止死锁的互斥信号量管理方法,其特征在于在信号量申请的过程中,如果任务申请互斥信号量失败或者已经超过可占有信号量的最大个数,那么***收回该任务已经申请获得的并且编号小于该信号量编号的信号量,并更新对应任务状态控制块中的存放占有信号量个数的域和互斥信号量状态数组;如果任务申请成功并且尚未到达可占有信号量的最大个数,则更新互斥信号量状态数组的对应项。
进一步,本发明所述的在多任务环境中防止死锁的互斥信号量管理方法,其特征在于:步骤A为***所需的互斥信号量分配的编号采用整数表示。
进一步,本发明所述的在多任务环境中防止死锁的互斥信号量管理方法,其特征在于:步骤C中所述互斥信号量的状态数组元素的类型为整型,初始化为零。
进一步,本发明所述的在多任务环境中防止死锁的互斥信号量管理方法,其特征在于:如果某个任务释放某个互斥信号量,对应互斥信号量的状态数组中对应的值就会自加操作。
进一步,本发明所述的在多任务环境中防止死锁的互斥信号量管理方法,其特征在于:
如果任务申请获得某个信号量,它将先查找状态数组,如果对应的值小于零,则表示无法再申请当前信号量,该方法将已经占有并且编号小于该编号的信号量释放回***,更新状态数组对应项以及任务控制块中的存放已经占有信号量的域,并将任务加入挂起队列;如果对应的值大于零并且任务控制块的所占有的信号量数目已经达到了最大可占有的数,则将已经占有并且编号小于该编号的信号量释放回***,更新状态数组对应项以及任务控制块中的存放已经占有信号量的域,将任务加入挂起队列;如果对应的值大于零并且任务控制块的所占有的信号量数目还没有达到最大可占有数,则更新状态数组对应项以及任务控制块中的存放已经占有信号量的域。
进一步,本发明所述的在多任务环境中防止死锁的互斥信号量管理方法,其特征在于:在进行步骤D的操作的时候,操作过程不被中断。
基于申请互斥信号量有序化的机制,本发明的目的是提供一种防止死锁的互斥信号量管理方法,该方法通过一种新型的互斥信号量管理机制,可有效避免互斥信号量机制引发的死锁。
附图说明
图1是本发明实现在多任务环境下防止死锁的互斥信号量管理方法的流程图。
具体实施方式
为使本发明的上述目的、特征和优点更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
图1是本发明实现在多任务环境下防止死锁的互斥信号量管理方法的流程图;其包括如下步骤:
A、为***所需的互斥信号量分配一一对应的编号,编号有大小之分;
互斥信号量是操作***内核为多任务环境下保护临界资源而设置的一种机制,普通的互斥信号量由一一对应的控制块管理,保存有信号量的基本信息。本方法中在控制块中增加新成员表示该互斥信号量的编号,编号有大小之分,为***所需的互斥信号量分配的编号采用整数表示,并且没有两个互斥信号量的编号相同。新型互斥信号量在创建的时候通过参数传递的方式,指定该编码。
B、在任务状态控制块中建立包括含有互斥信号量的ID与互斥信号量编号信息的双向链表,并指明任务已经占有的信号量的个数以及任务可占有信号量的最大个数;
任务控制块中需要包含将使用的互斥信号量的信息,包括一个双向链表和两个整数域。双向链表结构包括该互斥信号量的对象ID——互斥信号量的唯一标识(***在创建互斥信号量的时候统一分配ID号)、互斥信号量的编号、以及结点指针域;任务已经占有的信号量的个数,任务可占有信号量的最大个数。
C、在***中建立针对互斥信号量的状态数组,以所述互斥信号量编号为状态数组下标,指示互斥信号量在***中的存在个数;数组的每个成员值表示,***中所对应编号的互斥信号量的拥有个数;
维护针对互斥信号量的状态数组a,数组的每一项表示可以申请的信号量的个数,互斥信号量的状态数组元素的类型为整型,初始化为零。例如:a[i]的值为1表示的是当前环境下,任务可以申请编号为i的信号量的个数为1。如果某个任务释放某个互斥信号量,对应互斥信号量的状态数组中对应的值就会自加操作。
D、在任务状态控制块中根据互斥信号量的ID按照互斥信号量编号从小到大的顺序申请信号量,并根据信号量的使用情况,对任务状态控制块中存放占有信号量的个数的域以及互斥信号量状态数组进行更新。
在任务需要多个信号量的情况下,信号量申请的过程必须按照编号的大小从小到大的顺序申请,以下步骤将使得这个过程有序化。如果任务申请获得某个信号量,它将先查找状态数组,如果对应的值小于零,则表示无法再申请当前信号量,该方法将已经占有并且编号小于该编号的信号量释放回***,更新状态数组对应项以及任务控制块中的存放已经占有信号量的域,并将任务加入挂起队列;如果对应的值大于零并且任务控制块的所占有的信号量数目已经达到了最大可占有的数,则将已经占有并且编号小于该编号的信号量释放回***,更新状态数组对应项以及任务控制块中的存放已经占有信号量的域,将任务加入挂起队列;如果对应的值大于零并且任务控制块的所占有的信号量数目还没有达到最大可占有数,则更新状态数组对应项以及任务控制块中的存放已经占有信号量的域,在该过程中,***规定在该操作过程中必须不被中断。
基于申请互斥信号量有序化的机制,本发明的目的是提供一种在多任务环境中防止死锁的互斥信号量管理方法,该方法通过一种新型的互斥信号量管理机制,可有效避免互斥信号量机制引发的死锁。下面基于RTEMS操作***具体描述本发明在多任务环境中防止死锁的互斥信号量管理方法实现过程:
[1]在RTEMS 4.9.0源码中对象控制块的定义中,增加放置编号的域number,类型为有符号数。
[2]需要在创建互斥信号量的时候,为域number赋值,此值的来源为创建互斥信号量的功能实现的传入参数,开发者可以也通过显示的方式调用设置number值的API。
[3]在以RTEMS 4.9.0版本为基础,在任务控制块结构体中,添加结点类型为互斥信号量指针的双向链表,整个链表构成了任务需要申请的互斥信号量有序链表;添加两个整数域分别对应:任务已经占有的信号量的个数,任务可占有信号量的最大个数。
[4]在全局变量定义头文件中定义全局数组——mutex_ptr,用于前文提到的状态数组,指示所有信号量对应互斥资源当前存在个数。
[5]在信号量释放功能函数禁止中断函数段中,对状态数组的对应互斥信号量进行自加操作。
[6]在信号量获取功能函数禁止中断函数段中,判断状态数组mutex_queue是否为空,如果为空则直接进行重新调度。如果非空,按照以下步骤进行互斥信号量的申请:
(1)任务申请某个信号量,它将先查找状态数组,如果编号对应结点的值大于零,则表示可以申请执行(3);
(2)如果状态数组中的值小于零,则将已经占有并且编号小于该编号的信号量释放回***,状态数组对应更新,任务控制块中的存放已经占有信号量的域更新,并将任务加入挂起队列;
(3)查看任务控制块的所占有的信号量数目是否达到最大可占有的数目,如果达到了最大的可占有的数目执行(4),否则执行(5)。
(4)将已经占有并且编号小于该编号的信号量释放回***,状态数组对应更新,任务控制块中的存放已经占有信号量的域更新,将任务加入挂起队列。
(5)任务可以占有互斥信号量,状态数组对应更新,任务控制块中的存放已经占有信号量的域更新。
以上提到方法可以预防互斥信号量访问引起的死锁问题,举一个简单的例子。例如:在以下这种情况下,任务1和任务2都需要申请信号量1和信号量2,会因为互斥访问带来死锁的问题:
1)任务1占有互斥信号量1。
2)任务2占有互斥信号量2。
3)任务1挂起因为要申请信号量2。
4)任务2挂起因为要申请信号量1。
这样,两个任务就会陷入死锁,它们都彼此等待另一个任务拥有的互斥量。
运用本发明的方法能够消除类似这种因为互斥访问引起的死锁问题,例如在上面的例子中,会发生这样的情况:
1)任务1申请占有互斥信号量1。
2)任务2也需要申请信号量1,也需要申请互斥信号量2。
3)任务2在申请信号量1的时候,发现被信号量1占有了,它就不能占有信号量2,因为本方法需要顺序占有信号量。
4)这样的制约下,就不会出现死锁现象。
本发明通过对由于等待其他任务占有的互斥信号量而形成死锁的情况形成新的解决方法。本方法通过对互斥信号量进行编号,任务被指定其可以占有互斥信号量的个数,任务在申请互斥量的时候是按照编号的大小有序进行的,这样就可以避免了前述情况的发生。
最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制;尽管参照较佳实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者对部分技术特征进行等同替换;而不脱离本发明技术方案的精神,其均应涵盖在本发明请求保护的技术方案范围当中。
Claims (7)
1.一种在多任务环境中防止死锁的互斥信号量管理方法,其特征在于包括以下步骤:
A、为***所需的互斥信号量分配一一对应的编号,编号有大小之分;
B、在任务状态控制块中建立包括含有互斥信号量的ID与互斥信号量编号信息的双向链表,并指明任务已经占有的信号量的个数以及任务可占有信号量的最大个数;
C、在***中建立针对互斥信号量的状态数组,以所述互斥信号量编号为状态数组下标,指示互斥信号量在***中的存在个数;数组的每个成员值表示,***中所对应编号的互斥信号量的拥有个数;
D、在任务状态控制块中根据互斥信号量的ID按照互斥信号量编号从小到大的顺序申请信号量,并根据信号量的使用情况,对任务状态控制块中存放占有信号量的个数的域以及互斥信号量状态数组进行更新。
2.根据权利要求1所述的在多任务环境中防止死锁的互斥信号量管理方法,其特征在于在信号量申请的过程中,如果任务申请互斥信号量失败或者已经超过可占有信号量的最大个数,那么它已经申请获得的并且编号小于该信号量编号的信号量被***收回,并更新对应任务状态控制块中的存放占有信号量个数的域和互斥信号量状态数组;如果任务申请成功并且尚未到达可占有信号量的最大个数,则互斥信号量状态数组更新。
3.根据权利要求1所述的在多任务环境中防止死锁的互斥信号量管理方法,其特征在于:步骤A为***所需的互斥信号量分配的编号采用整数表示。
4.根据权利要求1所述的在多任务环境中防止死锁的互斥信号量管理方法,其特征在于:步骤C中所述互斥信号量的状态数组元素的类型为整型,初始化为零。
5.根据权利要求1所述的在多任务环境中防止死锁的互斥信号量管理方法,其特征在于:如果某个任务释放某个互斥信号量,对应互斥信号量的状态数组中对应的值就会自加操作。
6.根据权利要求1所述的在多任务环境中防止死锁的互斥信号量管理方法,其特征在于:
如果任务申请获得某个信号量,它将先查找状态数组,如果对应的值小于零,则表示无法再申请当前信号量,该方法将已经占有并且编号小于该编号的信号量释放回***,更新状态数组对应项以及任务控制块中的存放已经占有信号量的域,并将任务加入挂起队列;如果对应的值大于零并且任务控制块的所占有的信号量数目已经达到了最大可占有的数,则将已经占有并且编号小于该编号的信号量释放回***,更新状态数组对应项以及任务控制块中的存放已经占有信号量的域,将任务加入挂起队列;如果对应的值大于零并且任务控制块的所占有的信号量数目还没有达到最大可占有数,则更新状态数组对应项以及任务控制块中的存放已经占有信号量的域。
7.根据权利要求1所述的在多任务环境中防止死锁的互斥信号量管理方法,其特征在于:在进行步骤D的操作的时候,操作过程不被中断。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110450433.3A CN102567096B (zh) | 2011-12-30 | 2011-12-30 | 一种在多任务环境下防止死锁的互斥信号量管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110450433.3A CN102567096B (zh) | 2011-12-30 | 2011-12-30 | 一种在多任务环境下防止死锁的互斥信号量管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102567096A true CN102567096A (zh) | 2012-07-11 |
CN102567096B CN102567096B (zh) | 2017-02-08 |
Family
ID=46412588
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110450433.3A Expired - Fee Related CN102567096B (zh) | 2011-12-30 | 2011-12-30 | 一种在多任务环境下防止死锁的互斥信号量管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102567096B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103218291A (zh) * | 2013-03-29 | 2013-07-24 | 迈普通信技术股份有限公司 | 多任务操作***中互斥信号量异常的检测方法及装置 |
CN103268256A (zh) * | 2013-05-31 | 2013-08-28 | 迈普通信技术股份有限公司 | 多任务操作***中死锁检测方法及装置 |
CN103902356A (zh) * | 2012-12-26 | 2014-07-02 | 上海斐讯数据通信技术有限公司 | 一种信号量死锁的检测方法 |
CN105550322A (zh) * | 2015-12-15 | 2016-05-04 | 北京金山安全软件有限公司 | 一种文件访问方法、装置及电子设备 |
CN106155816A (zh) * | 2015-04-22 | 2016-11-23 | Tcl集团股份有限公司 | 任务的互斥处理方法及装置 |
CN109213576A (zh) * | 2017-07-01 | 2019-01-15 | 武汉斗鱼网络科技有限公司 | 程序死锁检测方法、存储介质、设备及*** |
CN110569131A (zh) * | 2019-08-22 | 2019-12-13 | 北京华捷艾米科技有限公司 | 一种信号量管理***及信号量管理方法 |
CN113672364A (zh) * | 2021-08-02 | 2021-11-19 | 北京奇艺世纪科技有限公司 | 任务调度方法、装置、电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1831779A (zh) * | 2005-03-11 | 2006-09-13 | 华为技术有限公司 | 一种信号量死锁的检测方法 |
US20100122253A1 (en) * | 2008-11-09 | 2010-05-13 | Mccart Perry Benjamin | System, method and computer program product for programming a concurrent software application |
CN102096605A (zh) * | 2011-02-17 | 2011-06-15 | 成电汽车电子产业园(昆山)有限公司 | 一种嵌入式实时操作***中多级资源管理的实现方法 |
-
2011
- 2011-12-30 CN CN201110450433.3A patent/CN102567096B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1831779A (zh) * | 2005-03-11 | 2006-09-13 | 华为技术有限公司 | 一种信号量死锁的检测方法 |
US20100122253A1 (en) * | 2008-11-09 | 2010-05-13 | Mccart Perry Benjamin | System, method and computer program product for programming a concurrent software application |
CN102096605A (zh) * | 2011-02-17 | 2011-06-15 | 成电汽车电子产业园(昆山)有限公司 | 一种嵌入式实时操作***中多级资源管理的实现方法 |
Non-Patent Citations (2)
Title |
---|
王溪波等: "优先级反转和死锁的资源管理模式研究与实现", 《计算机工程与设计》 * |
王继刚等: "一种改进的优先级继承协议及其算法研究", 《计算机工程》 * |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103902356A (zh) * | 2012-12-26 | 2014-07-02 | 上海斐讯数据通信技术有限公司 | 一种信号量死锁的检测方法 |
CN103902356B (zh) * | 2012-12-26 | 2018-07-31 | 上海斐讯数据通信技术有限公司 | 一种信号量死锁的检测方法 |
CN103218291B (zh) * | 2013-03-29 | 2016-05-04 | 迈普通信技术股份有限公司 | 多任务操作***中互斥信号量异常的检测方法及装置 |
CN103218291A (zh) * | 2013-03-29 | 2013-07-24 | 迈普通信技术股份有限公司 | 多任务操作***中互斥信号量异常的检测方法及装置 |
CN103268256A (zh) * | 2013-05-31 | 2013-08-28 | 迈普通信技术股份有限公司 | 多任务操作***中死锁检测方法及装置 |
CN106155816A (zh) * | 2015-04-22 | 2016-11-23 | Tcl集团股份有限公司 | 任务的互斥处理方法及装置 |
CN106155816B (zh) * | 2015-04-22 | 2019-08-02 | Tcl集团股份有限公司 | 任务的互斥处理方法及装置 |
CN105550322A (zh) * | 2015-12-15 | 2016-05-04 | 北京金山安全软件有限公司 | 一种文件访问方法、装置及电子设备 |
CN105550322B (zh) * | 2015-12-15 | 2019-07-23 | 珠海豹趣科技有限公司 | 一种文件访问方法、装置及电子设备 |
CN109213576A (zh) * | 2017-07-01 | 2019-01-15 | 武汉斗鱼网络科技有限公司 | 程序死锁检测方法、存储介质、设备及*** |
CN110569131A (zh) * | 2019-08-22 | 2019-12-13 | 北京华捷艾米科技有限公司 | 一种信号量管理***及信号量管理方法 |
CN110569131B (zh) * | 2019-08-22 | 2022-03-15 | 北京华捷艾米科技有限公司 | 一种信号量管理***及信号量管理方法 |
CN113672364A (zh) * | 2021-08-02 | 2021-11-19 | 北京奇艺世纪科技有限公司 | 任务调度方法、装置、电子设备及存储介质 |
CN113672364B (zh) * | 2021-08-02 | 2023-09-01 | 北京奇艺世纪科技有限公司 | 任务调度方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN102567096B (zh) | 2017-02-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102567096A (zh) | 一种在多任务环境下防止死锁的互斥信号量管理方法 | |
US8893145B2 (en) | Method to reduce queue synchronization of multiple work items in a system with high memory latency between processing nodes | |
US10003500B2 (en) | Systems and methods for resource sharing between two resource allocation systems | |
CN103999051B (zh) | 用于着色器核心中着色器资源分配的策略 | |
US20110161943A1 (en) | Method to dynamically distribute a multi-dimensional work set across a multi-core system | |
CN103559014B (zh) | 用于处理嵌套流事件的方法和*** | |
KR100509794B1 (ko) | 데이터베이스 관리시스템을 이용하는 작업들의 실시간 처리를 위한 스케줄링 방법 | |
US7830387B2 (en) | Parallel engine support in display driver model | |
KR102338849B1 (ko) | 실시간 운영 체제에서 스택 메모리 관리를 제공하는 방법 및 시스템 | |
Winter et al. | Autonomous, independent management of dynamic graphs on GPUs | |
CN103885751A (zh) | 将区别属性的存储器分配给共享数据对象的***和方法 | |
WO2012174334A1 (en) | Graphics processor with non-blocking concurrent architecture | |
CN103559088A (zh) | 维持公平性和顺序的资源管理子*** | |
TW201346769A (zh) | 用於多核心架構之排程的方法、電腦程式、及電腦可讀取媒體 | |
CN103793255B (zh) | 可配置的多主模式多os内核实时操作***架构的启动方法 | |
CN103729480A (zh) | 一种多核实时操作***多个就绪任务快速查找及调度方法 | |
CN104407921A (zh) | 一种基于时间的yarn任务资源动态调度方法 | |
CN103399825A (zh) | 一种无锁化内存申请释放方法 | |
Han et al. | Experimental evaluation and selection of data consistency mechanisms for hard real-time applications on multicore platforms | |
CN115185697A (zh) | 一种基于kubernetes的集群资源调度方法、***、设备和存储介质 | |
CN101216780B (zh) | 在对称多处理体系下实现多实例线程通信的方法及装置 | |
CN104714792B (zh) | 多进程共享数据处理方法和装置 | |
CN114930292A (zh) | 协作式工作窃取调度器 | |
CN104298507A (zh) | 资源的处理方法及装置 | |
US20120233623A1 (en) | Using a yield indicator in a hierarchical scheduler |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170208 Termination date: 20171230 |
|
CF01 | Termination of patent right due to non-payment of annual fee |