发明名称 时间多栈下推网络的动态转换方法
摘要 本发明公开一种时间多栈下推网络的动态转换方法,首先,在MPDN的基础上引入时钟,提出TMPDN模型,并给出其语法及操作语义;其次,利用时钟域等价的优化技术,通过动态转换方法,将连续时间的TMPDN模型转换成离散的多栈下推网络模型。本发明能够实现同时实现实时并发系统的实时性和并发性的描述,并能为实时并发程序的形式化验证提供保证。
申请公布号 CN105260296A 申请公布日期 2016.01.20
申请号 CN201510581423.1 申请日期 2015.09.14
申请人 桂林电子科技大学 发明人 钱俊彦;甘鹏程;郭云川;赵岭忠;古天龙
分类号 G06F11/36(2006.01)I 主分类号 G06F11/36(2006.01)I
代理机构 桂林市持衡专利商标事务所有限公司 45107 代理人 陈跃琳
主权项 时间多栈下推网络的动态转换方法,其特征是,包括如下步骤:步骤(1)将含有时间行为的并发递归程序转换为一个等价的可模拟程序执行的时间多栈下推网络,该时间多栈下推网络的执行对应于程序包含的所有动作或行为;步骤(1.1)构造实时并发递归程序的抽象模型即时间多栈下推网络;所构造的时间多栈下推网络是一个六元组M<sub>T</sub>=(n,Q,q<sub>0</sub>,Γ,T,Δ);其中n表示系统中栈的个数;Q表示有限状态集;q<sub>0</sub>表示初始状态;Γ表示有限栈符集;T=T<sub>G</sub>∪T<sub>L</sub>表示有限时钟集,T<sub>G</sub>表示全局时钟,用于标识实时并发系统中全局变量或事务的时间,T<sub>L</sub>表示栈内局部时钟,用于标识系统中局部变量或子事务的时间;迁移关系<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><mi>&Delta;</mi><mo>&SubsetEqual;</mo><msup><mn>2</mn><mrow><mo>&lsqb;</mo><mi>n</mi><mo>&rsqb;</mo></mrow></msup><mo>&times;</mo><mi>Q</mi><mo>&times;</mo><msub><mi>T</mi><mi>G</mi></msub><mo>&times;</mo><msup><mrow><mo>(</mo><mi>&Gamma;</mi><mo>&times;</mo><msub><mi>T</mi><mi>L</mi></msub><mo>)</mo></mrow><mo>*</mo></msup><mo>&times;</mo><msup><mn>2</mn><mrow><mo>&lsqb;</mo><mi>n</mi><mo>&rsqb;</mo></mrow></msup><mo>&times;</mo><mi>Q</mi><mo>&times;</mo><msub><mi>T</mi><mi>G</mi></msub><mo>&times;</mo></mrow>]]></math><img file="FDA0000802358950000011.GIF" wi="886" he="86" /></maths><maths num="0002" id="cmaths0002"><math><![CDATA[<msup><mrow><mo>(</mo><mi>&Gamma;</mi><mo>&times;</mo><msub><mi>T</mi><mi>L</mi></msub><mo>)</mo></mrow><mo>*</mo></msup>]]></math><img file="FDA0000802358950000012.GIF" wi="196" he="86" /></maths>为描述系统格局的迁移;所构造的时间多栈下推网络的格局C=&lt;Work[n],q,{w<sub>i</sub>}<sub>i∈[n]</sub>,v&gt;;其中q∈Q,<img file="FDA0000802358950000013.GIF" wi="306" he="71" />为[n]子集,表示当前工作栈集,w<sub>i</sub>为栈i的字,表示栈i的内容,描述为w<sub>i</sub>∈(Γ×<sup>+</sup>)<sup>*</sup>,v表示时钟当前取值;步骤(1.2)将所构造的时间多栈下推网络用操作语义进行描述,其中时间多栈下推网络作为实时并发程序的模型,用于描述多个栈同时产生迁移,其迁移关系Δ分为栈内迁移Δ<sup>in</sup>、栈间切换Δ<sup>inter</sup>和并发执行Δ<sup>||</sup>;步骤(1.2.1)对于一个栈i内迁移的执行,用形式<img file="FDA0000802358950000014.GIF" wi="421" he="79" /><img file="FDA0000802358950000015.GIF" wi="725" he="79" />表示,其中op<sub>in</sub>为栈内迁移时的动作集,包括空操作nop、时间约束判断t∈I?、时钟重置t←I、时间流逝Time←c、压栈操作push(a,I)和出栈操作pop(a,I),其中I表示时钟取值范围,t∈T,Time表示具体时钟值,故栈内迁移关系Δ<sup>in</sup>表示为Δ<sup>nop</sup>∪Δ<sup>?</sup>∪Δ<sup>=</sup>∪Δ<sup>├</sup>∪Δ<sup>push</sup>∪Δ<sup>pop</sup>,其中Δ<sup>nop</sup>、Δ<sup>?</sup>、Δ<sup>=</sup>、Δ<sup>├</sup>、Δ<sup>push</sup>和Δ<sup>pop</sup>分别表示上述操作的迁移;根据不同的栈内迁移动作op<sub>in</sub>给出具体的操作含义如下:1)Δ<sup>in</sup>=Δ<sup>nop</sup>:op<sub>in</sub>=nop,w<sub>i</sub>′=w<sub>i</sub>,v′=v;表示格局内元素未发生变化;2)Δ<sup>in</sup>=Δ<sup>?</sup>:op<sub>in</sub>=t∈I?,w<sub>i</sub>′=w<sub>i</sub>,v′=v,v(t)∈I;表示当t的时钟值在I范围内时,执行该操作,格局内元素未发生变化;3)Δ<sup>in</sup>=Δ<sup>=</sup>:op<sub>in</sub>=t←I,w<sub>i</sub>′=w<sub>i</sub>,v′=v[t←c],c∈I;表示给时钟t指定I范围内的任意值c,其它格局内元素未发生变化;4)Δ<sup>in</sup>=Δ<sup>├</sup>:op<sub>in</sub>=Time←c,w<sub>i</sub>′=w<sub>i</sub><sup>+c</sup>,假设w<sub>i</sub>=&lt;a<sub>1</sub>,v<sub>1</sub>&gt;&lt;a<sub>2</sub>,v<sub>2</sub>&gt;…&lt;a<sub>n</sub>,v<sub>n</sub>&gt;,那么w<sub>i</sub><sup>+c</sup>=&lt;a<sub>1</sub>,v<sub>1</sub>+c&gt;&lt;a<sub>2</sub>,v<sub>2</sub>+c&gt;…&lt;a<sub>n</sub>,v<sub>n</sub>+c&gt;,v′=v+c;表示格局内所有时钟增加c,格局内非时钟内容未发生变化;5)Δ<sup>in</sup>=Δ<sup>push</sup>:op<sub>in</sub>=push(a,I),w<sub>i</sub>′=w<sub>i</sub>·&lt;a,c&gt;,c∈I,v′=v;表示将变量a压入栈顶,并设定相应时钟为t,其时钟值为I范围内的任意值;6)Δ<sup>in</sup>=Δ<sup>pop</sup>:op<sub>in</sub>=pop(a,I),w<sub>i</sub>=w<sub>i</sub>′·&lt;a,c&gt;,c∈I,v′=v;表示将栈顶内时钟值为I范围的变量a弹出;步骤(1.2.2)描述栈间切换Δ<sup>inter</sup>;假设栈间切换操作op<sub>inter</sub>=i>j表示栈i切换到栈j,用形式<img file="FDA0000802358950000021.GIF" wi="1143" he="79" />表示,其中q和q′∈Q;v′=v;w<sub>i</sub>,w<sub>j</sub>分别为栈i和j的字,i和j∈[n]且i≠j;上下文切换时,将栈j从等待栈切换到工作栈,同时将栈i从工作栈切换到等待栈,则切换后的工作栈Work[n]′=Work[n]/{i}∪{j};步骤(1.2.3)描述并发操作Δ<sup>||</sup>;假设op=op<sub>in</sub>∪op<sub>inter</sub>为栈迁移动作集,并发执行用形式<img file="FDA0000802358950000022.GIF" wi="1431" he="93" /><img file="FDA00008023589500000211.GIF" wi="294" he="67" />表示,Work[n]为当前工作栈集,如果不发生栈间切换,则Work[n]′=Work[n],如果发生栈间切换i>j,则Work[n]′=Work[n]/{i}∪{j};步骤(2)将步骤(1)所给定的一个时间多栈下推网络M<sub>T</sub>=([n],Q,q<sub>0</sub>,Γ,T,Δ),通过下述动态转换过程获得多栈下推网络M<sub>M</sub>=([n]<sup>M</sup>,Q<sup>M</sup>,q<sub>0</sub><sup>M</sup>,Γ<sup>M</sup>,Δ<sup>M</sup>):1)栈个数[n]<sup>M</sup>的转换:[n]<sup>M</sup>=[n],即M<sub>M</sub>的栈数量与M<sub>T</sub>的栈数量相等;2)状态Q<sup>M</sup>的转换:Q<sup>M</sup>=Q,即M<sub>T</sub>的状态集与M<sub>M</sub>的状态集相同;3)初始状态q<sub>0</sub><sup>M</sup>的转换:q<sub>0</sub><sup>M</sup>=q<sub>0</sub>,即M<sub>M</sub>的初始状态与M<sub>T</sub>的初始状态相同;4)栈字符Γ<sup>M</sup>的转换:Γ<sup>M</sup>=2<sup>Z×key</sup>,其中Z:=Y∪Y<sup>·</sup>,增加了标识项以及基础时间字符,key为时钟关键点集;5)迁移关系Δ<sup>M</sup>的转换规则:M<sub>T</sub>的格局迁移为<img file="FDA0000802358950000023.GIF" wi="1278" he="86" />w<sub>i</sub>∈(Γ×<sup>+</sup>)<sup>*</sup>为栈i的字,设d<sub>i</sub>为栈i的栈深度,用w<sub>ij</sub>表示栈i内第j层的子字,<img file="FDA00008023589500000212.GIF" wi="63" he="53" />为栈i的栈顶子字,j∈[d<sub>i</sub>],w<sub>ij</sub>|<sub>Γ</sub>表示w<sub>ij</sub>投影在Γ的栈字符,v(w<sub>ij</sub>|<sub>Γ</sub>)表示投影与栈字符Γ相关联的时钟值,<img file="FDA00008023589500000213.GIF" wi="216" he="80" />表示投影与栈字符Γ相关联的时钟值在时钟等价后的关键点,T<sub>G</sub>为全局时钟,<img file="FDA00008023589500000214.GIF" wi="183" he="77" />表示全局时钟的时钟值在时钟域等价后的关键点;下面具体描述不同op的构造:5.1)Δ=Δ<sup>nop</sup>时,op=nop,如果<img file="FDA0000802358950000024.GIF" wi="911" he="85" /><img file="FDA0000802358950000025.GIF" wi="447" he="76" />那么在M<sub>M</sub>中有<img file="FDA0000802358950000026.GIF" wi="903" he="79" /><img file="FDA0000802358950000027.GIF" wi="328" he="75" />与之对应,即两者nop操作相同;5.2)Δ=Δ<sup>?</sup>时,op=t∈I?,在M<sub>M</sub>中有迁移关系Δ<sup>M?</sup>与Δ<sup>?</sup>相对应;此时M<sub>M</sub>的格局进行迁移<img file="FDA0000802358950000028.GIF" wi="1302" he="102" /><img file="FDA0000802358950000029.GIF" wi="597" he="95" />首先将栈顶域<img file="FDA00008023589500000215.GIF" wi="95" he="77" />出栈,转入状态<img file="FDA00008023589500000216.GIF" wi="251" he="79" />对字符t的关键点进行判断后,再将<img file="FDA00008023589500000217.GIF" wi="95" he="79" />入栈,状态为最终状态q′,整个过程中栈内字符并未改变;5.3)Δ=Δ<sup>=</sup>时,op=t←I,在M<sub>M</sub>中有迁移关系Δ<sup>M=</sup>与Δ<sup>=</sup>相对应;此时M<sub>M</sub>的格局进行迁移<img file="FDA00008023589500000210.GIF" wi="1149" he="103" /><img file="FDA0000802358950000031.GIF" wi="1174" he="105" />其中迁移关系Δ<sup>M=</sup>表示对{R<sub>i1</sub>}进行<img file="FDA00008023589500000330.GIF" wi="209" he="70" />赋值操作,v(t)∈I为M<sub>T</sub>赋值时钟值,首先栈顶域<img file="FDA00008023589500000331.GIF" wi="66" he="67" />出栈,转入状态<img file="FDA00008023589500000332.GIF" wi="260" he="86" />给<img file="FDA00008023589500000333.GIF" wi="93" he="77" />内任意栈内字符或者全局时钟t,赋予I中任意一个值对应的关键点<img file="FDA00008023589500000334.GIF" wi="156" he="72" />之后再将<img file="FDA00008023589500000335.GIF" wi="95" he="79" />赋值后的<img file="FDA00008023589500000336.GIF" wi="87" he="81" />入栈,获得状态q′;5.4)Δ=Δ<sup>├</sup>时,op=Time←c,在M<sub>M</sub>中有迁移关系Δ<sup>M├</sup>与Δ<sup>├</sup>相对应;此时M<sub>M</sub>的格局进行迁移<img file="FDA0000802358950000032.GIF" wi="1068" he="100" /><img file="FDA0000802358950000033.GIF" wi="1149" he="103" />首先栈顶域<img file="FDA0000802358950000034.GIF" wi="87" he="87" />出栈,得状态<img file="FDA0000802358950000035.GIF" wi="259" he="86" />之后将<img file="FDA0000802358950000036.GIF" wi="87" he="85" />项内非基础时间字符t的时钟值,增加时钟值c后取关键点,并将关键点赋予字符t,再将<img file="FDA0000802358950000037.GIF" wi="87" he="86" />赋值后的<img file="FDA0000802358950000038.GIF" wi="79" he="86" />入栈,最后获得状态q′;5.5)Δ=Δ<sup>pop</sup>时,op=pop(a,I),在M<sub>M</sub>中有迁移关系Δ<sup>Mpop</sup>与Δ<sup>pop</sup>相对应;此时M<sub>M</sub>的格局进行迁移<img file="FDA0000802358950000039.GIF" wi="1007" he="104" /><img file="FDA00008023589500000310.GIF" wi="1870" he="110" /><img file="FDA00008023589500000312.GIF" wi="1686" he="103" />其中<img file="FDA00008023589500000313.GIF" wi="384" he="87" />为<img file="FDA00008023589500000314.GIF" wi="92" he="86" />和<img file="FDA00008023589500000315.GIF" wi="159" he="86" />的组合域,首先栈顶域<img file="FDA00008023589500000316.GIF" wi="69" he="71" />出栈,得状态<img file="FDA00008023589500000317.GIF" wi="238" he="78" />然后将下一层域<img file="FDA00008023589500000318.GIF" wi="119" he="70" />出栈,转入状态<img file="FDA00008023589500000319.GIF" wi="438" he="87" />最后将<img file="FDA00008023589500000320.GIF" wi="94" he="84" />和<img file="FDA00008023589500000321.GIF" wi="154" he="86" />的组合域<img file="FDA00008023589500000322.GIF" wi="352" he="87" />入栈,转入状态q′;5.6)Δ=Δ<sup>push</sup>时,op=push(a,I),在M<sub>M</sub>中有迁移关系Δ<sup>Mpush</sup>与Δ<sup>push</sup>相<img file="FDA00008023589500000323.GIF" wi="1877" he="180" /><img file="FDA00008023589500000324.GIF" wi="205" he="86" />首先将栈顶域<img file="FDA00008023589500000325.GIF" wi="92" he="84" />出栈,然后再将域<img file="FDA00008023589500000326.GIF" wi="86" he="86" />入栈,最后将含字符a的域<img file="FDA00008023589500000327.GIF" wi="79" he="87" />入栈;5.7)Δ=Δ<sup>inter</sup>时,在M<sub>M</sub>中有迁移关系Δ<sup>Minter</sup>与Δ<sup>inter</sup>相对应;此时M<sub>M</sub>的格局进行迁移<img file="FDA00008023589500000328.GIF" wi="1039" he="95" />其中{R<sub>i</sub>}和{R<sub>j</sub>}分别为栈i和j的域,i和j∈[n]且i≠j;上下文切换时,将栈j从等待栈切换到工作栈,同时将栈i从工作栈切换到等待栈;5.8)Δ=Δ<sup>||</sup>时,在M<sub>M</sub>中有迁移关系Δ<sup>M||</sup>与Δ<sup>||</sup>相对应;此时M<sub>M</sub>的格局进行迁移<img file="FDA00008023589500000329.GIF" wi="1199" he="79" />工作栈集Work[n]内的每个栈,调用相应的栈内迁移转换,转换后格局为&lt;Work[n]′,q′,{R<sub>j</sub>}<sub>j∈[n]</sub>&gt;。
地址 541004 广西壮族自治区桂林市金鸡路1号