一种针对多线程软件的死锁预防方法与流程

文档序号:18331232发布日期:2019-08-03 12:15阅读:423来源:国知局
一种针对多线程软件的死锁预防方法与流程

本发明涉及到多线程软件的死锁预防方法,具体涉及到使用一类特殊的petri网对多线程软件进行建模并基于petri网模型对软件进行死锁预防。



背景技术:

计算机处理器已经从单核进入了多核时代,与传统的串行程序相比,并行程序更能充分发挥多核处理器的性能。因此,与之相匹配的多线程并行程序软件已成为主流。然而,也正由于多线程的存在,在这些软件里经常会出现互斥、同步和死锁等并发错误。多线程软件中最典型的一类并发错误就是循环互斥等待死锁,在此情况下,系统中多个线程共同竞争共享资源(互斥锁),导致所有的线程都无法继续执行,使系统进入到死锁状态。经过调查发现,目前的很多软件中,近30%的并发错误都与死锁有关。死锁的存在极大地威胁了多线程并行程序软件的安全性和可靠性,甚至可能损害计算机用户的体验和利益。

petri网是最常用来建模并行程序的工具之一,它能够直观、准确地的捕捉到并行程序的动态,而且不需要状态枚举。并且它能够将程序中的某些行为性质等价地转化到模型中的结构性质,从而降低了分析的复杂度。基于petri网的死锁控制方法主要有三类:死锁检测与恢复,死锁避免和死锁预防。本发明采用的是第三种方法,死锁预防。相较于前两种方法,死锁预防能够离线计算,在程序设计阶段就解决死锁问题,从而降低了生产成本。

目前针对多线程软件,虽然已经开发出了很多基于petri网的死锁预防方法,但是它们都无法达到最优,即行为许可性、结构复杂性和计算复杂性无法满足最优,甚至仅仅在某一个方面达到最优都是很困难的。



技术实现要素:

为了克服已有死锁预防方法的不足,本发明基于一种迭代控制的方法,使用一类特殊的petri网,即gadara网,对多线程软件进行建模。然后基于mip法,对gadara网进行检测,找到可被清空的极小信标。根据mip的结果,构建约束,添加控制器保证网络活性从而预防死锁。

本发明的具体步骤如下:

步骤1:基于一类特殊的petri网,即gadara网,对多线程软件建模。

定义:令in={1,2,...,m}为一个有限集。一个gadara网是一个无自环且满足以下条件的petri网ng=(p,t,f,m0):

1)p=p0∪pa∪pr,其中a)且对于所有的i≠j都有b)其中p0i={p0i};c)pr={r1,r2,...,rn},n>0;

2)且对于所有的i≠j都有

3)对于所有的i∈in,由psi∪{p0i}∪ti产生的子网ni是个强连通状态机

4)若|p·|>1,则

5)任何r∈pr,都存在一个唯一极小支撑p-不变量,yr,使得{r}=||yr||∩pr,

6)m0(r)=1,m0(p)=1,m0(p)≥1;

7)

步骤2:基于一种mip法,检测gadara网模型中包含资源数最小的可被清空信标。

注意:检测信标的mip法并非本发明的重点,且目前的很多mip法都可以用来得到上述的信标。因此,在此不再赘述。

步骤3:若上述mip法无解,证明gadara网是活的,模型中不存在死锁。那么算法结束,无需进行以下步骤。若mip法有解,根据检测到的可被清空信标,得到该信标的补库所集。

定义:令r∈pr为gadara网ng=(p,t,f,m0)的资源库所,s是ng的可被清空信标,使用r的操作库所集合h(r)=··r∩ps称为r的持有者,令称为信标s的补库所集。

注意:由于gadara网的特殊结构,得到的补库所集中可能会包含信标中的操作库所,这与补库所的定义产生了冲突。若得到的补库所集中包含信标中的操作库所,那么直接将这些操作库所从集合中删除。所以最终得到的补库所集中不会有信标中的操作库所。

步骤4:根据第三步得到的补库所集,构建约束保证那些一旦被标记就会清空极小信标的补库所不会被同时标记,从而使得信标不会被清空。

注意:此约束不仅考虑了被标记就清空信标的库所,它考虑了补库所集中的所有库所,这扩大了约束的范围,能够阻止更多的导致信标被清空的不安全状态,且不会阻止任何好的状态。

步骤5:设置一个库所集合c,初始情况下,因此步骤4中的约束可被写为∑p∈cm(p)≤∑p∈c∩m(p)=11-1。

步骤6:考虑不可控变迁tuc的问题。通常假设gadara网中的所有分支变迁都是不可控的。若对于p∈c,t∈tuc且即c中库所能够通过不可控变迁t从其他操作库所获得托肯,那么将这个变迁t的输入操作库所添加到c中。

步骤7:得到死标识后向上检查,因为某些状态必然会到达当前的死标识,这些不安全的状态也是必须阻止的状态。某些不在c中的库所,它们被标记后,必然会导致c中的某些库所也被标记,最终形成以上步骤中检测到的死锁状态,那么这些库所也要添加到c中。然后再回到步骤6,检测新添加的操作库所的输入变迁是否可控,并执行相应的操作。直到步骤6、7两步中不会再添加新的操作库所,再执行下一步。

步骤8:根据库所集c得到新的约束∑p∈cm(p)≤∑p∈c∩m(p)=11-1。

步骤9:利用位置不变量技术,根据步骤8得到的约束,为gadara网添加控制器。

步骤10:获得受控网将添加的控制器库所视为新的资源库所,然后转到第2步,利用mip法检测受控网是否还存在可被清空的极小信标,若存在继续执行第3步到第10步,直到网络中不再存在可被清空的极小信标,方法结束。

本发明针对多线程软件,提出了一种基于一类特殊petri网的死锁预防方法,与已有的方法相比,本发明使用gadara网对多线程软件建模,能够直观地建模多线程软件的并发特性,准确地描述其行为操作。在保证行为许可性的同时,能够提高效率、降低受控网结构复杂度,从而能够适用于大型软件,极大地降低了生产成本。

附图说明

图1为基于一类特殊petri网的多线程软件死锁预防流程图;

图2为2.5.62版本的linux的一段内核程序对应的gadara网模型;

图3为图2中gadara网的受控网模型。

具体实施方式

下面结合附图和实施例对本发明的技术方案做进一步描述。

图1为本发明基于一类特殊petri网的多线程软件死锁预防方法的流程图,具体包括以下步骤:

步骤1:利用gadara网对2.5.62版本的linux内一段出现死锁的并发程序建模,这段程序包含三个线程和三个互斥锁,得到的gadara网模型ng=(p,t,f,m0)如图2所示,其中p0={p01,p02,p03},pa={p11-p18,p21-p23,p31-p35},pr,={pr1,pr2,pr3},模型中一共有80个可达状态,其中78个活的状态,2个死的状态。

步骤2:通过mip法对图2的gadara网进行信标检测,本发明采用如下的mip法:

目标函数:

约束条件:

vp,zt∈{0,1}

m=m0+dσ

b(p)≤1

其中,若操作库所p会使用资源库所pr∪pc中的资源,则g=1,否则g=0;b(p)=max{m(p)|m=m0+cy,m0≥0,y0≥0}。

根据上述mip法,得到了一个包含资源库所数最小的可被清空信标:s1={p11-p13,p15-p18,p21,p23,p34,pr1,pr3}。

步骤3:根据第2步中的mip法,可以得到上述信标s1的补库所集:显然,得到的补库所集中包含信标中的操作库所p15,p16,p23,将这三个库所从补库所集中删除,它们并不会影响受控网的最终状态。更新补库所集为:

步骤4:经检查发现,当库所p14,p22被同时标记,也就是p14,p22各有一个托肯m(p14)=1、m(p22)=1时,线程1和线程2同时竞争对方所持有的资源,信标s1被清空,系统进入到死锁状态,没有任何线程能够继续执行。因此,要防止这两个库所被同时标记,构建约束:p14+p22≤1。

步骤5:设置集合c,所以c={p14,p22}。

步骤6:一般情况下,gadara网中所有分支变迁均是不可控的。从图2中可以明显看出,p14能通过不可控变迁t5从p13中获得托肯,p22能通过不可控变迁t14从p21中获得托肯,那么p13,p21将添加到c中。添加后发现,p13能通过不可控变迁t9从p15中获得托肯,将p15添加到c中。再次检查,p15的输入变迁是可控的,无需再添加其他库所。此时c更新为c={p13,p14,p15,p21,p22}。

步骤7:更新c后,结合图2发现,操作库所p12只有一个输出变迁t4,当p12被标记后,添加到c中。再次检查,不存在其他导致c中库所必然被标记的操作库所。返回到第6步,添加p12后,p12的输入变迁t3为不可控变迁,将t3的输入操作库所p11添加到c中。p11和p21的输入变迁是可控的,不需要添加其他操作库所,向下执行第7步,不存在其他一旦被标记就导致c中库所必然被标记的操作库所,更新c为c={p11,p12,p13,p14,p15,p21,p22,p23}。

步骤8:根据∑p∈cm(p)≤∑p∈c∩m(p)=11-1的形式构建约束:p11+p12+p13+p14+p15+p21+p22+p23≤1。

步骤9:通过位置不变量技术,根据上述约束p11+p12+p13+p14+p15+p21+p22+p23≤1计算下列等式:

ldp+dc=0,其中l代表约束向量,dp为gadara网关联矩阵,dc包括了连接控制器到gadara网变迁的弧;

m(pc0)=b-lm0;

解上面两个等式得到:dc=[-1,1,0,0,0,0,1,0,0,1,0,0,-1,0,0,0,1,0,0,0,0,0,0,0],m(pc0)=1,控制器初始标识为1。根据这两个解,可以将控制器pc1添加到原网中,受控网如图3所示。

步骤10:将添加的控制器库所视为资源库所,通过mip法对受控网进行可被清空信标检测,此时mip法无解,证明是活的,迭代终止,最终活的受控网如图3所示,其中仅添加了一个控制器pc1。

本发明的核心技术要点在于不止阻止了程序进入到死状态,同时还防止了那些经变迁实施,最终必然会到达死状态的不安全状态。基于信标设计控制器,仅需添加一个控制器就能够阻止所有终将导致某个信标被清空的状态,这极大地减少了死锁预防方法的迭代次数,提高了方法的效率,一定程度上保证了网络的行为许可性,并且只需添加少数的控制器,就能够保证网络的活性,使得受控网网络结构尽可能地简单。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1