CN108228503B - 一种防止总线死锁的方法及装置 - Google Patents
一种防止总线死锁的方法及装置 Download PDFInfo
- Publication number
- CN108228503B CN108228503B CN201611160596.7A CN201611160596A CN108228503B CN 108228503 B CN108228503 B CN 108228503B CN 201611160596 A CN201611160596 A CN 201611160596A CN 108228503 B CN108228503 B CN 108228503B
- Authority
- CN
- China
- Prior art keywords
- deadlock
- matrix
- write address
- slave
- address command
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
- G06F13/4004—Coupling between buses
- G06F13/4027—Coupling between buses using bus bridges
- G06F13/4031—Coupling between buses using bus bridges with arbitration
- G06F13/4036—Coupling between buses using bus bridges with arbitration and deadlock prevention
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Bus Control (AREA)
- Multi Processors (AREA)
Abstract
本发明实施例提供一种防止总线死锁的方法,该方法包括建立动态路由表;根据动态路由表判断总线是否会产生死锁;若总线会产生死锁,确定并阻塞造成死锁的写地址命令。本发明实施例同时还提供一种防止总线死锁的装置。
Description
技术领域
本发明涉及高性能芯片设计领域,尤其涉及一种防止总线死锁的方法及装置。
背景技术
AXI(Advanced eXtensible Interface)总线协议是由ARM公司提出一种高性能高带宽的片上总线协议,在片上***(system-on-chip,SOC)中被广泛采用。AXI总线采取读-写分离,地址/控制与数据分离的传输机制,通过定义读地址通道(AR),读数据通道(R),写地址通道(AW),写数据通道(W),写响应通道(B)五个独立的传输通道,很大程度上提高了传输效率。在基于AXI总线协议的SOC中,多主设备(Master)和多从设备(Slave)之间常通过总线互联Interconnect模块(也称为总线矩阵,即Bus Matrix)实现数据交换。SOC常常由多个Interconnect模块级联构成。Interconnect模块兼容AXI协议所支持的Outstanding传输访问和乱序(Out-of-Order,OoO)访问机制,这在一方面提升了传输吞吐率,但在另一方面,也增加了总线死锁的风险,尤其是在多级Interconnect模块级联的总线***中。
在AXI传输中,Master用ID号来标记每一次传输,Interconnect模块通过扩展每一个Master的ID号以区分不同的Master,对于同一个Master用同一个ID号发出不同的传输,不同的传输必须按照顺序进行,而Slave可以以OoO的方式返回不同ID号的传输。这种机制在多Master同时访问多Slave时可能形成握手信号之间的循环依赖(Cyclic Dependence),从而造成死锁,由于这类死锁是由于Slave在响应通道的乱序机制引起的,故将这类死锁称为“反向通道死锁”。在现有的Interconnect模块级联组成的***中,反向通道死锁可以通过单Slave(Single Slave)或相同ID仅可用于单一Slave(Single Slave Per ID)的机制进行规避,其中,Single Slave Per ID机制在CN102103560A中有相应的描述。
同时,而在Interconnect模块级联组成的***中,虽然AXI协议的outstanding传输访问机制允许Master无需等待上一笔写数据命令完成,就可以发出下一笔写数据命令;但实际中的绝大多数Slave并不支持写间插(write interleave)操作(事实上,AXI 4.0协议也取消了对write interleave的支持),即对于同一个slave,只有当一次传输的写数据接收完毕后,才被允许接收下一次传输的写数据。换句话说,尽管一个Master可以同时在AW通道发起多个地址/控制命令来协商对多个Slave的访问权,但在一个传输周期内,一个Slave只允许和唯一的,被赋予了访问权的Master在W通道进行数据交换。由于以上机制的作用,在多Master多Slave数据交换中,还存在着另一种死锁的风险,即“前向通道死锁”。
图1为现有技术一种典型的“前向通道死锁”示意图。在起始时刻T0,Master0向Slave1和Slave0依次并连续发出了AW01和AW00两笔写地址命令;同时,Master1向Slave0和Slave1依次并连续发出了AW10和AW11两笔写地址命令;由于Slave接口0和Master接口0之间的路径延迟小于SLAVE接口1和Master接口0之间的路径延迟,所以,AW00后发先至,先于AW10抵达Slave0,并获得对Master接口0的访问权,此时,Master接口0打开W通道,等待写数据命令W00;同理,由于Slave接口1和Master接口1之间的路径延迟小于Slave接口0和Master接口1之间的路径延迟,AW11后发先至,先于AW01到达Slave1,并获得对Master接口1的访问权,此时Master接口1打开W通道,等待W11;因为在时间顺序上晚于W01,W00必须等待W01发送完毕才可以发往Master接口0;而此时,由于AW11占据了对Slave1的访问权,W01却只能等待W11发送完毕,才可以发往目的地Master接口1;同理,因为在时间顺序上晚于W10,W11必须等待W10发送完毕才可以发往目的地Master接口1;而此时由于AW00仍然占据对Slave0的访问权(W00一直处于等待状态),W10只能等待W00发送完毕才可以发往目的地Master接口0,于是,循环等待的局面形成。图2为图1产生死锁的循环依赖关系示意图,如图2所示,W00等待W01,W01等待W11,W11等待W10,W10等待W00,总线传输陷入死锁。
为了防止AXI总线前向通道死锁,Interconnect模块采取了单一有效Slave(Single Active Slave,SAS)的机制。SAS机制规定interconnect模块的Slave接口只有当前一笔传输的写数据全部发送完毕之后,才能发起下一笔的写地址命令,从而避免了“当后一笔写传输的写地址命令抵达目的地后,前一笔的写数据仍然阻塞在Slave接口”这一形成前向死锁的必要条件。因此,在多级Switch结构的Interconnect模块以及多个Interconnect模块级联构成的***中,常常采用单/每从设备ID(Single Provider ID,SPI)+SAS的机制,用来同时防止可能出现的前向与反向AXI总线死锁。
SAS机制是以牺牲outstanding传输访问机制中AW通道的传输效率为代价的;对于某些Slave设备而言,更早的收到AW写地址命令(即使此时写数据并未抵达),可以将写响应操作的开销流程提前进行,比如双倍速率同步动态随机存储器(Double Data Rate,DDR)控制器,更早的收到AW写地址命令后可以提前进行行/列交错计算,从而减少写数据在W通道握手的时间。从这个意义上来讲,SAS防死锁机制在一定程度上减少了总线传输的数据吞吐量并且降低了总线传输的数据效率。而对于常常需要将多个Interconnect模块进行级联来建构完整的总线互联的SOC,这无疑增加了各个主从设备路径延迟的差异性,也增加了前向总线死锁发生的概率。而增加这种前向总线死锁发生概率的路径延迟差异,往往并不体现在各Interconnect模块的内部通路上,而是体现在多个Interconnect模块的连接关系上;为了能够完全避免前向死锁,采取的办法常是在所有的Interconnect模块的Slave接口上添加SAS机制。而在实际的应用场景中,大量主从设备之间的数据交换是不存在死锁风险的,而分布式SAS节点的总线互联,由于无法识别出正在发生的访问是否具有潜在死锁风险,只是不加区分的对AW命令进行多次阻塞-放行-阻塞的操作,更加降低了总线的传输效率。
因此,如何有效地识别出正在发生的具有潜在死锁风险的写命令,从而及时阻塞造成死锁的写命令是现如今亟待解决的技术问题。
发明内容
有鉴于此,本发明实施例提供一种防止总线死锁的方法及装置,以能够有效地识别出正在发生的具有潜在死锁风险的写命令,从而及时阻塞造成死锁的写命令。
本发明实施例的技术方案是这样实现的:
一种防止总线死锁的方法,包括:
建立动态路由表,其中,所述动态路由表用来记录主设备Master发出的但未到达从设备Slave的写地址命令的状态信息;
根据所述动态路由表判断总线是否会产生死锁;
若所述总线会产生死锁,确定并阻塞造成死锁的所述写地址命令。
如上所述的方法,所述根据所述动态路由表判断总线是否会产生死锁包括:
根据Master与Slave之间的关系生成关系矩阵;其中,若所述Master向所述Slave发送写地址命令,所述关系矩阵的对应位置为第一标识,若所述Master不向所述Slave发送所述写地址命令,所述关系矩阵的对应位置为第二标识;
根据所述动态路由表和所述关系矩阵判断总线是否会产生死锁。
如上所述的方法,所述根据所述动态路由表和所述关系矩阵判断总线是否会产生死锁,包括:
判断所述关系矩阵是否是死锁矩阵;其中,所述死锁矩阵为所述关系矩阵中能够使所述总线产生死锁的矩阵;
若所述关系矩阵是所述死锁矩阵,判断所述死锁矩阵是否是最简死锁矩阵;其中,所述最简死锁矩阵为所述死锁矩阵中能够使所述总线产生死锁,并且形式最简单的矩阵;
若所述死锁矩阵不是所述最简死锁矩阵,将所述死锁矩阵转换成所述最简死锁矩阵;
根据所述动态路由表和所述最简死锁矩阵判断所述总线是否会产生死锁。
如上所述的方法,所述判断所述关系矩阵是否是死锁矩阵,包括:
判断所述关系矩阵的每一行和每一列是否分别存在至少2个所述第一标识;
若所述关系矩阵的每一行和每一列分别存在至少2个所述第一标识,确定所述关系矩阵是所述死锁矩阵;
若所述关系矩阵的一行或一列不存在至少2个所述第一标识,确定所述关系矩阵不是所述死锁矩阵。
如上所述的方法,所述若所述关系矩阵是所述死锁矩阵,判断所述死锁矩阵是否是最简死锁矩阵,包括:
若所述关系矩阵是所述死锁矩阵,判断所述死锁矩阵的每一行和每一列是否均存在2个所述第一标识;
若所述关系矩阵的每一行和每一列均存在2个所述第一标识,确定所述死锁矩阵是所述最简死锁矩阵;
若所述关系矩阵的一行或一列存在多于2个所述第一标识,确定所述死锁矩阵不是所述最简死锁矩阵。
如上所述的方法,所述若所述死锁矩阵不是所述最简死锁矩阵,将所述死锁矩阵转换成所述最简死锁矩阵,包括:
判断所述i×i阶死锁矩阵是否是所述最简死锁矩阵;
若所述i×i阶死锁矩阵不是所述最简死锁矩阵,将所述i×i阶死锁矩阵转换成所述最简死锁矩阵。
若m×k阶死锁矩阵不是最简死锁矩阵,在所述m×k阶死锁矩阵中选择i行和i列的数,从所选择的i行和i列的数中选取同时包含在所述i行和i列中的数并生成所述i×i阶矩阵;
如上所述的方法,所述若所述i×i阶死锁矩阵不是所述最简死锁矩阵,将所述i×i阶死锁矩阵转换成所述最简死锁矩阵,包括:
若所述i×i阶死锁矩阵不是所述最简死锁矩阵,将所述i×i阶死锁矩阵中存在多于2个所述第一标识的行或列中多余的所述第一标识置位成所述第二标识,使所述i×i阶死锁矩阵的每一行和每一列均存在2个所述第一标识,得到所述最简死锁矩阵。
如上所述的方法,所述写地址命令的状态信息包括源接口的接口名、目的接口的接口名、第一时序收敛寄存器片的信息和第二时序收敛寄存器片的信息,其中,所述第一时序收敛寄存器片的信息为所述写地址命令从所述源接口到达所述目的接口的传输路径中需经过的时序收敛寄存器片的信息,所述第二时序收敛寄存器片的信息为当前时刻所述写地址命令已经过的时序收敛寄存器片的信息,所述源接口是与发送所述写地址命令的所述Master连接的Slave接口,所述目的接口是与接收所述写地址命令的所述Slave相连接的Master接口。
如上所述的方法,所述根据所述动态路由表和所述最简死锁矩阵判断所述总线是否会产生死锁,包括:
根据所述最简死锁矩阵和所述动态路由表获取所述Master向所述Slave发送所述写地址命令的发送时刻;
根据所述最简死锁矩阵和所述动态路由表获取所述Master发送的所述写地址命令到达所述Slave的路径中的延时;
根据所述写地址命令的发送时刻和所述路径中的延时判断所述Master与所述Slave之间的关系是否满足死锁特征;其中,所述死锁特征为第一Master先向第一Slave发送第一写地址命令,后向第二Slave发送第二写地址命令;第二Master先向所述第二Slave发送第三写地址命令,后向所述第一slave发送第四写地址命令;并且所述第二写地址命令先于所述第三写地址命令到达所述第二Slave;所述第四写地址命令先于所述第一写地址命令到达所述第一Slave。
若所述Master与Slave之间的关系满足死锁特征,确定所述总线会产生死锁。
如上所述的方法,所述根据所述最简死锁矩阵和所述动态路由表获取所述Master向所述Slave发送写地址命令的发送时刻,包括:
根据所述最简死锁矩阵在所述动态路由表中获取所述写地址命令的第二时序收敛寄存器片的信息;
获取当前时刻的时刻信息;
根据所述当前时刻的时刻信息和所述第二时序收敛寄存器片的信息,计算所述Master向所述Slave发送写地址命令的发送时刻。
如上所述的方法,所述根据所述最简死锁矩阵和所述动态路由表获取所述Master发送的所述写地址命令到达所述Slave的路径中的延时,包括:
根据所述最简死锁矩阵在所述动态路由表中获取第一时序收敛寄存器片的信息;
根据所述第一时序收敛寄存器片的信息计算所述Master发送的所述写地址命令到达所述Slave的传输路径中的延时。
如上所述的方法,所述根据所述写地址命令的发送时刻和所述路径中的延时判断所述Master与所述Slave之间的关系是否满足死锁特征,包括:
判断所述第一Master向所述第一Slave发送所述第一写地址命令的发送时刻是否小于所述第一Master向所述第二Slave发送所述第二写地址命令的发送时刻;
判断所述第二Master向所述第二Slave发送所述第三写地址命令的发送时刻是否小于所述第二Master向所述第一Slave发送的所述第四写地址命令的发送时刻;
判断所述第二写地址命令到达所述第二Slave的到达时刻是否小于所述第三写地址命令到达所述第二Slave的到达时刻;
判断所述第四写地址命令到达所述第一Slave的到达时刻是否小于所述第一写地址命令到达所述第一Slave的到达时刻;
若所述第一Master向所述第二Slave发送所述第二写地址命令的发送时刻大于所述第一Master向所述第一Slave发送所述第一写地址命令的发送时刻,且所述第二写地址命令到达所述第二Slave的到达时刻小于所述第三写地址命令到达所述第二Slave的到达时刻;并且,所述第二Master向所述第一Slave发送所述第四写地址命令的发送时刻大于所述第二Master向所述第二Slave发送所述第三写地址命令的时刻,且所述第四写地址命令到达所述第一Slave的时刻小于所述第一写地址命令到达所述第一Slave的时刻;确定所述Master与Slave之间的关系满足死锁特征。
如上所述的方法,所述方法根据所述动态路由表判断总线是否会产生死锁,包括:
根据所述动态路由表判断Master与Slave之间的关系是否存在先发后至情况;其中,所述先发后至情况为第一Master向第一Slave发送第一写地址命令的发送时刻小于第二Master向第一Slave发送第二写地址命令的发送时刻,并且所述第一写地址命令到达第一Slave的到达时刻大于所述第二写地址命令到达第一Slave的到达时刻的情况;
若所述Master与Slave之间的关系存在所述先发后至情况,根据所述第二写地址命令、第三写地址命令以及第四写地址命令生成增量型关系矩阵;其中,所述第三写地址命令为发送给第二Slave并且发送时刻大于所述第二写地址命令的发送时刻的写命令;所述第四写地址命令为发送时刻大于所述第三写地址命令的写命令;
根据所述增量型关系矩阵判断总线是否会产生死锁。
如上所述的方法,所述若所述Master与Slave之间的关系存在所述先发后至情况,根据所述第二写地址命令、第三写地址命令以及第四写地址命令生成增量型关系矩阵,包括:
若所述Master与Slave之间的关系存在所述先发后至情况,分别确定所述第二写地址命令、所述第三写地址命令和所述第四写地址命令表示的Master与Slave之间的关系;
若所述Master与Slave之间的关系为所述Master向所述Slave发送写地址命令,在所述增量型关系矩阵的对应位置设置第一标识;
若所述Master与Slave之间的关系为所述Master不向所述Slave发送写地址命令,在所述增量型关系矩阵的对应位置设置第二标识。
如上所述的方法,所述根据所述增量型关系矩阵判断总线是否会产生死锁,包括:
判断所述增量型关系矩阵的每一行和每一列是否分别存在至少2个所述第一标识;
若所述增量型关系矩阵的每一行和每一列分别存在至少2个所述第一标识,确定所述总线是否会产生死锁。
一种防止总线死锁的装置,包括:
预处理模块,用于建立动态路由表,其中,所述动态路由表用来记录主设备Master发出的但尚未到达从设备Slave的写地址命令的状态信息;
判断模块,用于根据所述动态路由表判断总线是否会产生死锁;
处理模块,用于若所述总线会产生死锁,确定并阻塞造成死锁的所述写地址命令。
如上所述的装置,所述判断模块包括:
第一处理单元,用于根据Master与Slave之间的关系生成关系矩阵;其中,若所述Master向所述Slave发送写地址命令,所述关系矩阵的对应位置为第一标识,若所述Master不向所述Slave发送所述写地址命令,所述关系矩阵的对应位置为第二标识;
第一判断单元,用于根据所述动态路由表和所述关系矩阵判断总线是否会产生死锁。
如上所述的装置,所述第一判断单元,具体用于判断所述关系矩阵是否是死锁矩阵;其中,所述死锁矩阵为所述关系矩阵中能够使所述总线产生死锁的矩阵;
若所述关系矩阵是所述死锁矩阵,判断所述死锁矩阵是否是最简死锁矩阵;其中,所述最简死锁矩阵为所述死锁矩阵中能够使所述总线产生死锁,并且形式最简单的矩阵;
若所述死锁矩阵不是所述最简死锁矩阵,将所述死锁矩阵转换成所述最简死锁矩阵;
根据所述动态路由表和所述最简死锁矩阵判断所述总线是否会产生死锁。
如上所述的装置,所述写地址命令的状态信息包括源接口的接口名、目的接口的接口名、第一时序收敛寄存器片的信息和第二时序收敛寄存器片的信息,其中,所述第一时序收敛寄存器片的信息为所述写地址命令从所述源接口到达所述目的接口的传输路径中需经过的时序收敛寄存器片的信息,所述第二时序收敛寄存器片的信息为当前时刻所述写地址命令已经过的时序收敛寄存器片的信息,所述源接口是与发送所述写地址命令的所述Master连接的Slave接口,所述目的接口是与接收所述写地址命令的所述Slave相连接的Master接口。
如上所述的装置,所述处理模块包括:
获取单元,用于根据所述最简死锁矩阵和所述动态路由表获取所述Master向所述Slave发送所述写地址命令的发送时刻;根据所述最简死锁矩阵和所述动态路由表获取所述Master发送的所述写地址命令到达所述Slave的路径中的延时;
第二判断单元,用于根据所述写地址命令的发送时刻和所述路径中的延时判断所述Master与所述Slave之间的关系是否满足死锁特征;其中,所述死锁特征为第一Master先向第一Slave发送第一写地址命令,后向第二Slave发送第二写地址命令;第二Master先向所述第二Slave发送第三写地址命令,后向所述第一slave发送第四写地址命令;并且所述第二写地址命令先于所述第三写地址命令到达所述第二Slave;所述第四写地址命令先于所述第一写地址命令到达所述第一Slave;
第二处理单元,用于若所述Master与Slave的之间关系满足死锁特征,确定所述总线会产生死锁。
如上所述的装置,所述第二判断单元,具体用于判断所述第一Master向所述第一Slave发送所述第一写地址命令的发送时刻是否小于所述第一Master向所述第二Slave发送所述第二写地址命令的发送时刻;
判断所述第二Master向所述第二Slave发送所述第三写地址命令的发送时刻是否小于所述第二Master向所述第一Slave发送的所述第四写地址命令的发送时刻;
判断所述第二写地址命令到达所述第二Slave的到达时刻是否小于所述第三写地址命令到达所述第二Slave的到达时刻;
判断所述第四写地址命令到达所述第一Slave的到达时刻是否小于所述第一写地址命令到达所述第一Slave的到达时刻;
若所述第一Master向所述第二Slave发送所述第二写地址命令的发送时刻大于所述第一Master向所述第一Slave发送所述第一写地址命令的发送时刻,且所述第二写地址命令到达所述第二Slave的到达时刻小于所述第三写地址命令到达所述第二Slave的到达时刻;并且,所述第二Master向所述第一Slave发送所述第四写地址命令的发送时刻大于所述第二Master向所述第二Slave发送所述第三写地址命令的时刻,且所述第四写地址命令到达所述第一Slave的时刻小于所述第一写地址命令到达所述第一Slave的时刻;确定所述Master与Slave之间的关系满足死锁特征。
如上所述的装置,所述判断模块包括:
第三判断单元,用于根据所述动态路由表判断Master与Slave之间的关系是否存在先发后至情况;其中,所述先发后至情况为第一Master向第一Slave发送第一写地址命令的发送时刻小于第二Master向第一Slave发送第二写地址命令的发送时刻,并且所述第一写地址命令到达第一Slave的到达时刻大于所述第二写地址命令到达第一Slave的到达时刻的情况;根据增量型关系矩阵断总线是否会产生死锁;
第三处理单元,用于若所述Master与Slave之间的关系存在所述先发后至情况,根据所述第二写地址命令、第三写地址命令以及第四写地址命令生成增量型关系矩阵;其中,所述第三写地址命令为发送给第二Slave并且发送时刻大于所述第二写地址命令的发送时刻的地址命令;所述第四写地址命令为发送时刻大于所述第三写地址命令的地址命令。
如上所述的装置,所述第三处理单元,具体用于若所述Master与Slave之间的关系存在所述先发后至情况,分别确定所述第二写地址命令、所述第三写地址命令和所述第四写地址命令表示的Master与Slave之间的关系;
若所述Master与Slave之间的关系为所述Master向所述Slave发送写地址命令,在所述增量型关系矩阵的对应位置设置第一标识;
若所述Master与Slave之间的关系为所述Master不向所述Slave发送写地址命令,在所述增量型关系矩阵的对应位置设置第二标识。
本发明实施例提供的防止总线死锁的方法及装置,该方法包括建立用来记录Master发出的但尚未到达Slave的写地址命令的状态信息的动态路由表;根据动态路由表判断总线是否会产生死锁;若总线会产生死锁,确定并阻塞造成死锁的写地址命令;这样能够有效地识别出正在发生的具有潜在死锁风险的写地址命令,进而有针对性地阻止会造成总线死锁的写地址命令,从而实现了防止总线死锁的目的,同时避免了采取统一防死锁机制的造成的数据吞吐量减少的问题,提高了总线的数据传输效率。
附图说明
图1为现有技术一种典型的“前向通道死锁”示意图;
图2为图1产生死锁的循环依赖关系示意图;
图3为本发明实施例提供的一种防止总线死锁的方法的流程示意图;
图4为本发明实施例提供的另一防止总线死锁的方法的流程示意图;
图5为本发明实施例提供的又一种防止总线死锁的方法的流程示意图;
图6为本发明实施例提供的又一种防止总线死锁的方法的流程示意图;
图7为本发明实施例提供的3×4阶死锁矩阵示意图;
图8为本发明实施例提供的由图7所生成的一个3×3阶矩阵示意图;
图9为本发明实施例提供的由图7所生成的另一个3×3阶矩阵示意图;
图10为本发明实施例提供的由图7所生成的又一个3×3阶矩阵示意图;
图11为本发明实施例提供的由图7所生成的又一个3×3阶矩阵示意图;
图12为本发明提供的Interconnect模块级联的***结构示意图;
图13为本发明实施例提供的又一种防止总线死锁的方法的流程示意图;
图14为本发明实施例提供的一个最简死锁矩阵;
图15为本实施例提供的图14的产生死锁的循环依赖关系示意图;
图16为本发明提供的另一个Interconnect模块级联的***示意图;
图17为本发明实施例提供的防止总线死锁的方法的流程图;
图18为本发明实施例提供的防止总线死锁的方法的又一流程示意图;
图19为本发明实施例提供的防止总线死锁的方法的另一流程图;
图20为本发明实施例提供的防止总线死锁的应急机制的示意图;
图21为本发明实施例提供的另一种防止总线死锁的装置的结构示意图;
图22为本发明实施例提供的另一种防止总线死锁的装置的结构示意图;
图23为本发明实施例提供的又一种防止总线死锁的装置的结构示意图;
图24为本发明实施例提供的又一种防止总线死锁的装置的结构示意图;
图25为本发明实施例提供的又一种防止总线死锁的装置的结构示意图。
具体实施方式
图3为本发明实施例提供的一种防止总线死锁的方法的流程示意图,如图3所示,本实施例提供的方法包括以下步骤:
步骤101、建立动态路由表;其中,动态路由表用来记录Master发出的但尚未到达Slave的写地址命令的状态信息。
具体的,步骤101建立动态路由表可以由防止总线死锁的装置实现。需要说明的是,动态路由表是一个不断变化的路由表,它纪录的是Master发出的但尚未到达Slave的写地址命令的状态信息,如果在未来的某一时刻,Master发出写地址命令已经到达了相应的Slave,那么就将该写地址命令的状态信息从动态路由表中删除。
步骤102、根据动态路由表判断总线是否会产生死锁。
具体的,步骤102根据动态路由表判断总线是否会产生死锁可以由防止总线死锁的装置实现。根据动态路由表判断总线是否会产生死锁是指从动态路由表中获取Master发出的但尚未到达Slave的写地址命令的状态信息,根据获取的Master发出的但尚未到达Slave的写地址命令的状态信息判断总线是否会产生死锁。
步骤103、若总线会产生死锁,确定并阻塞造成死锁的写地址命令。
具体的,步骤103若总线会产生死锁,确定并阻塞造成死锁的写地址命令可以由防止总线死锁的装置实现。
本实施例提供的防止总线死锁的方法,建立用来记录Master发出的但尚未到达Slave的写地址命令的状态信息的动态路由表;根据动态路由表判断总线是否会产生死锁;若总线会产生死锁,确定并阻塞造成死锁的写地址命令;这样能够有效地识别出正在发生的具有潜在死锁风险的写地址命令,进而有针对性地阻止会造成总线死锁的写地址命令,从而实现了防止总线死锁的目的,同时避免了采取统一防死锁机制的造成的地址吞吐量减少的问题,提高了总线的数据传输效率。
图4为本发明实施例提供的另一防止总线死锁的方法的流程示意图,如图4所示,本实施例提供的方法包括以下步骤:
步骤201、防止总线死锁的装置建立动态路由表;其中,动态路由表用来记录Master发出的但尚未到达Slave的写地址命令的状态信息。
步骤202、防止总线死锁的装置根据Master与Slave之间的关系生成关系矩阵;其中,若Master向Slave发送写地址命令,关系矩阵的对应位置为第一标识,若Master不向Slave发送写地址命令,关系矩阵的对应位置为第二标识。
需要说明的是,关系矩阵是多个Master与多个Slave之间关系的矩阵,即表示所有Master的哪些Master向所有Slave中的哪些Slave发送写地址命令的矩阵,假如Master的数量为4,Slave的数量为5,4个Master分别表示为Master0、Master1、Master2和Master3,5个Slave分别表示为Slave0、Slave1、Slave2、Slave3和Slave4,那么4个Master和5个Slave之间的关系可以以一个4×5的关系矩阵表示(Master和Slave4分别表示关系矩阵的行和列),如果Master1向Slave2发送写地址命令,那么在关系矩阵中第2行第3列的位置以第一标识进行表示。
还需要说明的是,在关系矩阵中,第一标识一般是以数“1”表示,第二表示一般是以数“0”表示。
步骤203、防止总线死锁的装置根据动态路由表和关系矩阵判断总线是否会产生死锁。
需要说明的是,根据动态路由表和关系矩阵判断总线是否会产生死锁是指根据关系矩阵所表示的Master与Slave之间的关系从动态路由表中获取Master发出的但尚未到达Slave的写地址命令的状态信息,根据获取的Master发出的但尚未到达Slave的写地址命令的状态信息判断总线是否会产生死锁。
步骤204、若总线会产生死锁,防止总线死锁的装置确定并阻塞造成死锁的写地址命令。
需要说明的是,本实施例中与其它实施例中相同步骤或概念的解释可以参照其它实施例中的描述,此处不再赘述。
本实施例提供的防止总线死锁的方法,建立用来记录Master发出的但尚未到达Slave的写地址命令的状态信息的动态路由表;根据Master与Slave之间的关系生成关系矩阵;根据动态路由表和关系矩阵判断总线是否会产生死锁;若总线会产生死锁,确定并阻塞造成死锁的写地址命令;这样能够有效地识别出正在发生的具有潜在死锁风险的写地址命令,进而有针对性地阻止会造成总线死锁的写地址命令,从而实现了防止总线死锁的目的,同时避免了采取统一防死锁机制的造成的地址吞吐量减少的问题,提高了总线的地址传输效率。
图5为本发明实施例提供的又一种防止总线死锁的方法的流程示意图,如图5所示,本实施例提供的方法包括以下步骤:
步骤301、防止总线死锁的装置建立动态路由表;其中,动态路由表用来记录Master发出的但尚未到达Slave的写地址命令的状态信息。
步骤302、防止总线死锁的装置根据Master与Slave之间的关系生成关系矩阵;其中,若Master向Slave发送写地址命令,关系矩阵的对应位置为第一标识,若Master不向Slave发送写地址命令,关系矩阵的对应位置为第二标识。
步骤303、防止总线死锁的装置判断关系矩阵是否是死锁矩阵;其中,死锁矩阵为关系矩阵中能够使总线产生死锁的矩阵。
具体的,判断关系矩阵是否是死锁矩阵包括:判断关系矩阵的每一行和每一列是否分别存在至少2个第一标识;若关系矩阵的每一行和每一列分别存在至少2个第一标识,确定关系矩阵是死锁矩阵;若关系矩阵的一行或一列不存在至少2个第一标识,确定关系矩阵不是死锁矩阵。
需要说明的是,若第一标识以数“1”表示,第二标识以数“0”表示,判断关系矩阵是否是死锁矩阵包括:判断关系矩阵的每一行和每一列是否分别存在至少2个数“1”;若关系矩阵的每一行和每一列分别存在至少2个数“1”,确定关系矩阵是死锁矩阵;若关系矩阵的一行或一列不存在至少2个数“1”,确定关系矩阵不是死锁矩阵。若确定某一关系矩阵不是死锁矩阵,那么说明该关系矩阵反应的多Master和多Slave的关系不会造成总线死锁,相应的,不阻塞关系矩阵中Master向Slave发送的写地址命令。
步骤304、若关系矩阵是死锁矩阵,防止总线死锁的装置判断死锁矩阵是否是最简死锁矩阵;其中,最简死锁矩阵为死锁矩阵中能够使总线产生死锁,并且形式最简单的矩阵。
具体的,若关系矩阵是死锁矩阵,判断死锁矩阵是否是最简死锁矩阵包括:若关系矩阵是死锁矩阵,判断死锁矩阵的每一行和每一列是否均存在2个第一标识;若关系矩阵的每一行和每一列均存在2个第一标识,确定死锁矩阵是最简死锁矩阵;若关系矩阵的一行或一列存在多于2个第一标识,确定死锁矩阵不是最简死锁矩阵。
需要说明的是,若第一标识以数“1”表示,第二标识以数“0”表示,判断死锁矩阵是否是最简死锁矩阵包括:判断死锁矩阵的每一行和每一列是否均存在2个数“1”;若关系矩阵的每一行和每一列均存在2个数“1”,确定死锁矩阵是最简死锁矩阵;若关系矩阵的一行或一列存在多于2个数“1”,确定死锁矩阵不是最简死锁矩阵。
步骤305、若死锁矩阵不是最简死锁矩阵,防止总线死锁的装置将死锁矩阵转换成最简死锁矩阵。
步骤306、根据动态路由表和最简死锁矩阵判断总线是否会产生死锁。
步骤307、若总线会产生死锁,防止总线死锁的装置确定并阻塞造成死锁的写地址命令。
需要说明的是,本实施例中与其它实施例中相同步骤或概念的解释可以参照其它实施例中的描述,此处不再赘述。
本实施例提供的防止总线死锁的方法,建立用来记录Master发出的但尚未到达Slave的写地址命令的状态信息的动态路由表;根据Master与Slave之间的关系生成关系矩阵;判断关系矩阵是否是最简死锁矩阵;若关系矩阵不是最简死锁矩阵,将关系矩阵转换成最简死锁矩阵;根据动态路由表和最简死锁矩阵判断总线是否会产生死锁;若总线会产生死锁,确定并阻塞造成死锁的写地址命令;这样能够有效地识别出正在发生的具有潜在死锁风险的写地址命令,进而有针对性地阻止会造成总线死锁的写地址命令,从而实现了防止总线死锁的目的,同时避免了采取统一防死锁机制的造成的地址吞吐量减少的问题,提高了总线的数据传输效率。
图6为本发明实施例提供的又一种防止总线死锁的方法的流程示意图,如图6所示,在上述图5对应的实施例的基础上,本实施例提供的方法中步骤305包括以下步骤:
具体的,根据m×k阶死锁矩阵得到个i×i阶子矩阵包括:在m×k阶死锁矩阵中选择i行和i列的数,从所选择的i行和i列的数中选取同时包含在i行和i列中的数生成i×i阶矩阵;选取个i×i阶矩阵,得到个i×i阶矩阵。
需要说明的是,图7为本发明实施例提供的3×4阶死锁矩阵示意图,假设第一标识以数“1”表示,第二标识以数“0”表示,当i=3时,如图7所示,在该3×4阶死锁矩阵中选择三行和四列中的三列的数,从选择的数中选取同时包含在所选择的三行和三列中的数,生成一个3×3阶矩阵,遍历选择死锁矩阵中的四列的数,一共生成四个3×3阶矩阵。具体的,图8为本发明实施例提供的由图7所生成的一个3×3阶矩阵示意图,图9为本发明实施例提供的由图7所生成的另一个3×3阶矩阵示意图,图10为本发明实施例提供的由图7所生成的又一个3×3阶矩阵示意图,图11为本发明实施例提供的由图7所生成的又一个3×3阶矩阵示意图。如图8所示,选择3×4阶死锁矩阵的三行和四列中的第一列、第二列、第三列的数,从选择的数中选取同时包含在三行和四列中的第一列、第二列、第三列的数中的数生成一个3×3阶矩阵;如图9所示,选择3×4阶死锁矩阵的三行和四列中的第一列、第三列、第四列的数,从选择的数中选取同时包含在三行和四列中的第一列、第三列、第四列的数中的数生成一个3×3阶矩阵;如图10所示,选择3×4阶死锁矩阵的三行和四列中的第一列、第二列、第四列的数,从选择的数中选取同时包含在三行和四列中的第一列、第二列、第四列的数中的数生成一个3×3阶矩阵;如图11所示,选择3×4阶死锁矩阵的三行和四列中的第二列、第三列、第四列的数,从选择的数中选取同时包含在三行和四列中的第二列、第三列、第四列的数中的数生成一个3×3阶矩阵。
步骤305c、防止总线死锁的装置判断i×i阶死锁矩阵是否是最简死锁矩阵。
具体的,判断i×i阶死锁矩阵是否是最简死锁矩阵是看i×i阶死锁矩阵的每一行和每一列是否存在且只存在2个第一标识。
步骤305d、若i×i阶死锁矩阵不是最简死锁矩阵,防止总线死锁的装置将i×i阶死锁矩阵转换成最简死锁矩阵。
具体的,若i×i阶死锁矩阵不是最简死锁矩阵,将i×i阶死锁矩阵中存在多于2个第一标识的行或列中多余的第一标识置位成第二标识,使i×i阶死锁矩阵的每一行和每一列只存在2个第一标识,得到最简死锁矩阵。
需要说明的是,若i×i阶死锁矩阵不是最简死锁矩阵(即第一标识的个数NE大于2i),在实际将i×i阶死锁矩阵转换成最简死锁矩阵的过程中,可以通过穷举法将某个第一标识置位成第二标识后的i×i阶死锁矩阵一一列出,对于一个i×i阶死锁矩阵,可以列出个标识置位后的i×i阶死锁矩阵,然后在这些个标识置位后的i×i阶死锁矩阵中筛选满足每一行和每一列存在且只存在2个第一标识的死锁矩阵,从而得到i×i阶最简死锁矩阵。
还需要说明的是,本实施例中与其它实施例中相同步骤或概念的解释可以参照其它实施例中的描述,此处不再赘述。
本实施例提供的防止总线死锁的方法,当m×k阶死锁矩阵不是最简死锁矩阵时,对m×k阶死锁矩阵进行一步步处理,最终得到i×i阶最简死锁矩阵,进而根据动态路由表和最简死锁矩阵判断总线是否会产生死锁;若总线会产生死锁,确定并阻塞造成死锁的写地址命令;这样能够有效地识别出正在发生的具有潜在死锁风险的写地址命令,进而有针对性地阻止会造成总线死锁的写地址命令,从而实现了防止总线死锁的目的,同时避免了采取统一防死锁机制的造成的数据吞吐量减少的问题,提高了总线的数据传输效率。
进一步的,写命令的状态信息包括源接口的接口名、目的接口的接口名、第一时序收敛寄存器片的信息和第二时序收敛寄存器片的信息,其中,第一时序收敛寄存器片的信息为写地址命令从源接口到达目的接口的传输路径中需经过的时序收敛寄存器片的信息,第二时序收敛寄存器片的信息为当前时刻写地址命令已经过的时序收敛寄存器片的信息,源接口是与发送写地址命令的Master连接的Slave接口,目的接口是与接收写地址命令的Slave相连接的Master接口。
需要说明的是,在实际情况中,常常对Interconnect模块中的时序收敛的寄存器片和先入先出(First-In First-Out,FIFO)结构赋以唯一编号,以方便管理。第一时序收敛寄存器片的信息和第二时序收敛寄存器片的信息可以通过延时坐标进行表示。具体的,图12为本发明提供的Interconnect模块级联的***结构示意图,如图12所示,该Interconnect模块级联的***存在2个Interconnect模块(总线矩阵),分别为总线矩阵0和总线矩阵1,在总线矩阵0中由Slave接口00、Slave接口01、Master接口00和Master接口01组成一个Swich结构;在总线矩阵1中由Slave接口10、Slave接口11、Master接口10和Master接口11组成一个Swich结构。Master有3个,分别是Master0、Master1和Master2,Slave也有3个,分别是Slave0、Slave1和Slave2;Master0通过总线矩阵0向Slave0发送写命令,并且通过总线矩阵0和总线矩阵1向Slave1发送写地址命令;Master1通过总线矩阵0向Slave0发送写命令,并且通过总线矩阵0和总线矩阵1向Slave1发送写命令;Master2通过总线矩阵1分别向Slave1和Slave2发送写命令。Slave接口00中存在一个时序收敛寄存器片(时序收敛寄存器片0),Master接口00中存在一个时序收敛寄存器片(时序收敛寄存器片1),Master接口01中存在一个时序收敛寄存器片(时序收敛寄存器片2);Slave接口10中存在一个时序收敛寄存器片(时序收敛寄存器片3),Master接口10中存在一个时序收敛寄存器片(时序收敛寄存器片4),Slave接口01到Master接口00的路径中存在一个时序收敛寄存器片(时序收敛寄存器片5),Master接口11中存在一个时序收敛寄存器片(时序收敛寄存器片6),Slave接口11中存在一个时序收敛寄存器片(时序收敛寄存器片7)。假设当前时刻Master0向Slave0发送的写地址命令到达Slave接口00,Master0向Slave1发送的写地址命令到达Master接口01,Master1向Slave0发送的写地址命令到达Master接口00,Master1向Slave1发送的写地址命令到达Master接口01,Master2向Slave1发送的写地址命令到达Slave接口11,Master2向Slave2发送的写地址命令到达Slave接口11。因此,根据图12所示的Interconnect模块级联的***建立的动态路由表如表1所示,其中,延时坐标Regj(i)表示第一时序收敛寄存器片的信息和第二时序收敛寄存器片的信息,i表示该路径上收敛寄存器片的顺序号(从0开始计),j表示相应时序收敛寄存器片的标号。
表1
进一步,在上述实施例的基础上,图13为本发明实施例提供的又一种防止总线死锁的方法的流程示意图,如图13所示,根据动态路由表和最简死锁矩阵判断总线是否会产生死锁,包括:
步骤401、防止总线死锁的装置根据最简死锁矩阵和动态路由表获取Master向Slave发送写地址命令的发送时刻。
具体的,步骤401包括:根据最简死锁矩阵在动态路由表中获取写地址命令的第二时序收敛寄存器片的信息;获取当前时刻的时刻信息;根据当前时刻的时刻信息和第二时序收敛寄存器片的信息,计算Master向Slave发送写地址命令的发送时刻。
需要说明的是,由于在一个Interconnect模块或由多个Interconnect模块级联的***中,每个时序收敛寄存器片造成的时延是一定的,因此只需获取当前时刻的时刻信息,再获取当前时刻写地址命令已经过的时序收敛寄存器片的信息(即第二时序收敛寄存器片的信息),就可以反推出发送写地址命令的发送时刻。
步骤402、防止总线死锁的装置根据最简死锁矩阵和动态路由表获取Master发送的写地址命令到达Slave的路径中的延时。
具体的,步骤402包括:根据最简死锁矩阵在动态路由表中获取第一时序收敛寄存器片的信息;根据第一时序收敛寄存器片的信息计算Master发送的写地址命令到达Slave的路径中的延时。
需要说明的是,根据写地址命令的第一时序收敛寄存器片的信息可以获取写地址命令在传输路径中需经过的时序收敛寄存器片的信息,根据在传输路径中需经过的时序收敛寄存器片的信息就可以计算写地址命令在传输路径中的延时。
步骤403、防止总线死锁的装置根据写地址命令的发送时刻和路径中的延时判断Master与Slave之间的关系是否满足死锁特征;其中,所述死锁特征为第一Master先向第一Slave发送第一写地址命令,后向第二Slave发送第二写地址命令;第二Master先向第二Slave发送第三写地址命令,后向第一slave发送第四写地址命令;并且第二写地址命令先于第三写地址命令到达第二Slave;第四写地址命令先于第一写地址命令到达第一Slave。
需要说明的是,写地址命令的到达时刻可以根据写地址命令的发送时刻加上写地址命令的传输路径中的延时计算得到。
具体的,步骤403包括:判断第一Master向第一Slave发送第一写地址命令的发送时刻是否小于第一Master向第二Slave发送第二写地址命令的发送时刻;判断第二Master向第二Slave发送第三写地址命令的发送时刻是否小于第二Master向第一Slave发送的第四写地址命令的发送时刻;判断第二写地址命令到达第二Slave的到达时刻是否小于第三写地址命令到达第二Slave的到达时刻,判断第四写地址命令到达第一Slave的到达时刻是否小于第一写地址命令到达第一Slave的到达时刻;若第一Master向第二Slave发送第二写地址命令的发送时刻大于第一Master向第一Slave发送第一写地址命令的发送时刻,且且第二写地址命令到达第二Slave的到达时刻小于第三写地址命令到达第二Slave的到达时刻,并且,第二Master向第一Slave发送第四写地址命令的发送时刻大于第二Master向第二Slave发送第三写地址命令的时刻,且第四写地址命令到达第一Slave的时刻小于第一写地址命令到达第一Slave的时刻,确定Master与Slave之间的关系满足死锁特征。图14为本发明实施例提供的一个最简死锁矩阵,以图14为例,死锁特征为:
T03>T01
T03+D03<T23+D23
T10>T12
T12+D12<T32+D32
T20>T23
T20+D20<T10+D10
T31>T32
T31+D31<T01+D01
其中,Tij表示Masteri对Slavej发送写地址命令的发送时刻,Dij表示Masteri对Slavej发送的写地址命令在传输路径中的延时。图15为本实施例提供的图14的产生死锁的循环依赖关系示意图,如图15所示,W10等待W20,W20等待W23,W23等待W03,W03等待W01,W01等待W31,W31等待W32,W32等待W12,W12等待W10,总线传输陷入死锁。
还需要说明的是,任何一个M*N阶死锁矩阵所代表的Master与Slave之间的关系都可能满足死锁特征,死锁特征的表现形式随死锁矩阵的阶数的不同和Master与Slave之间的具体关系的不同而不同。
步骤404、若Master与Slave之间的关系满足死锁特征,防止总线死锁的装置确定总线会产生死锁。
需要说明的是,本实施例中与其它实施例中相同步骤或概念的解释可以参照其它实施例中的描述,此处不再赘述。
本实施例提供的防止总线死锁的方法,建立用来记录Master发出的但尚未到达Slave的写地址命令的状态信息的动态路由表;根据Master与Slave之间的关系生成关系矩阵;判断关系矩阵是否是最简死锁矩阵;若关系矩阵不是最简死锁矩阵,将关系矩阵转换成最简死锁矩阵;根据动态路由表和最简死锁矩阵判断总线是否会产生死锁;若总线会产生死锁,确定并阻塞造成死锁的写地址命令;这样能够有效地识别出正在发生的具有潜在死锁风险的写地址命令,进而有针对性地阻止会造成总线死锁的写地址命令,从而实现了防止总线死锁的目的,同时避免了采取统一防死锁机制的造成的数据吞吐量减少的问题,提高了总线的数据传输效率。
进一步,动态路由表还可以包括汇聚接口的信息,其中,汇聚接口为二条或两条以上的传输路径汇聚的接口。在上述表1的基础上,增加一项汇聚接口的信息和第三时序收敛存取信息,其中,第三时序收敛寄存器片的信息为写地址命令到达汇聚接口所经过的时序收敛寄存器片的信息,根据图12所示的Interconnect模块级联的***建立的动态路由表如表2所示,
表2
新来的写地址命令如果可能会对存在与动态路由表中在过去时刻的写地址命令产生影响,使得原本可以通过第一时序收敛寄存器片的信息计算出的的传输路径的延时变得不可控。具体的,图16为本发明提供的另一个Interconnect模块级联的***示意图,如图16所示,在当前时刻,AW11抵达图示中位置;此时,Master2向Slave1发出了AW20,因为传输路径的延时,AW20会先于AW11抵达图中阴影填充的Master接口,于是AW11和该接口之间的通路会被阻塞,AW11抵达目的地Slave1的延时变得不可控。所以,需要判断新的写地址命令是否会影响当前写地址命令之间的关系:如果新的写地址命令和当前写地址命令会在某一个汇聚接口上汇聚,则须根据动态路由表,判断新的写地址命令是否会提前于(或同时)当前写地址命令抵达汇聚接口,若是,则将该传输路径上的汇聚接口以前的所有写地址命令到在传输路径中的延时更新为原有传输路径中的延时与增量T的和,其中增量T根据实际情况预先设置的;否则,将新的写地址命令的传输路径中的延时置为∞;然后再判断总线是否会产生死锁。
进一步,本发明提供的防止总线死锁的方法还可以包括设置防止死锁的时间裕量,从而提升防止总线死锁方法的防死锁机制的健壮性。相应的,根据路由表和关系矩阵判断***总线是否会发生死锁,包括:根据动态路由表、防止死锁的时间裕量和关系矩阵判断***总线是否会发生死锁。
还需要说明的是,在多个复杂的Interconnect模块级联的***中,动态路由表维度急剧升高,将直接导致最简死锁子阵的判定复杂度呈几何倍数增加。在这种情况下,可以适当收紧Master发送写地址命令的条件,比如,规定同一个Master只能够同时向M个Slave发起写传输,从而降低动态路由表的维度,使得运算复杂度处于可控范围内。同时,可以考虑将整个级联***按照传输效率要求的高低程度进行分解降维处理,以减小计算复杂度:对于传输效率要求较高的子***使用本发明提供的总线死锁的方法;而对于传输效率要求较为宽松的子***则可以使用NIC400固有的SAS机制;最后,还可以利用NIC400在单个矩阵的master接口固有的AW通道和W通道之间应用outstanding传输访问机制(至多只允许两笔AW握手成功但W通道未全部握手成功的传输通过),从而达到对整个***进行分解以达到降维的目的。
图17为本发明实施例提供的防止总线死锁的方法的流程图,如图17所示,该方法包括:首先将Master与Slave关系表示成关系矩阵,然后判断该关系矩阵是否包含最简死锁矩阵,如果该关系矩阵不包含最简死锁矩阵,放行Master向Slave发送的写地址命令,如果该关系矩阵包含最简死锁矩阵,将关系矩阵分解为一个或多个最简死锁矩阵,再判断每个最简死锁矩阵是否满足死锁特征,如果一个或多个最简死锁矩阵满足死锁特征,则阻塞相应的产生死锁的写地址命令。
本实施例提供的防止总线死锁的方法,将Master与Slave关系表示成关系矩阵,然后判断该关系矩阵是否包含最简死锁矩阵,进而根据最简死锁矩阵阻塞确定并阻塞造成死锁的写地址命令;这样能够有效地识别出正在发生的具有潜在死锁风险的写地址命令,进而有针对性地阻止会造成总线死锁的写地址命令,从而实现了防止总线死锁的目的,同时避免了采取统一防死锁机制的造成的数据吞吐量减少的问题,提高了总线的数据传输效率。
图18为本发明实施例提供的防止总线死锁的方法的又一流程示意图,如图18所示,该方法包括:
步骤501、防止总线死锁的装置建立动态路由表;其中,动态路由表用来记录Master发出的但尚未到达Slave的写地址命令的状态信息。
步骤502、防止总线死锁的装置根据动态路由表判断Master与Slave之间的关系是否存在先发后至情况;其中,先发后至情况为第一Master向第一Slave发送第一写地址命令的发送时刻小于第二Master向第一Slave发送第二写地址命令的发送时刻,并且第一写地址命令到达第一Slave的到达时刻大于第二写地址命令到达第一Slave的到达时刻的情况。
步骤503、若Master与Slave之间的关系存在先发后至情况,防止总线死锁的装置根据第二写地址命令、第三写地址命令以及第四写地址命令生成增量型关系矩阵;其中,第三写地址命令为发送给第二Slave并且发送时刻大于第二写地址命令的发送时刻的地址命令;第四写地址命令为发送时刻大于第三写地址命令的地址命令。
需要说明的是,若Master与Slave之间的关系存在先发后至情况,分别确定第二写地址命令、第三写地址命令和第四写地址命令表示的Master与Slave之间的关系;若Master与Slave之间的关系为Master向Slave发送写地址命令,在增量型关系矩阵的对应位置设置第一标识;若Master与Slave之间的关系为Master不向Slave发送写地址命令,在增量型关系矩阵的对应位置设置第二标识。
具体的,若写地址命令AWij的发送时刻(表示从Masteri向Slavej发送的AW命令)先于另一个写地址命令AWkj的发送时刻(表示Masterk向Slavej发送的命令),那么,将发往Slavej并且发送时刻晚于AWkj的发送时刻的写地址命令∑Tmj>TkjAWmj(第三写地址命令),和发往任何Slave并且发送时刻晚于AWmj的送时刻的写地址命令∑Tmk>TmjAWmk(第四写地址命令),以及AWkj(第二写地址命令)所代表的Master与Slave之间的关系在增量型关系矩阵的对应位置以第一标识表示。
步骤504、防止总线死锁的装置根据增量型关系矩阵判断总线是否会产生死锁。
具体的,步骤504包括:判断增量型关系矩阵的每一行和每一列是否分别存在至少2个第一标识;若增量型关系矩阵的每一行和每一列分别存在至少2个第一标识,确定总线是否会产生死锁。
步骤505、若总线会产生死锁,防止总线死锁的装置确定并阻塞造成死锁的写地址命令。
本实施例提供的防止总线死锁的方法,建立用来记录Master发出的但尚未到达Slave的写地址命令的状态信息;根据动态路由表判断Master与Slave之间的关系是否存在先发后至情况;若Master与Slave之间的关系存在先发后至情况,根据第二写地址命令、第三写地址命令以及第四写地址命令生成增量型关系矩阵;进而根据增量型关系矩阵断总线是否会产生死锁,确定并阻塞造成死锁的的写地址命令;这样能够以简单的方法有效地识别出正在发生的具有潜在死锁风险的写地址命令,进而有针对性地阻止会造成总线死锁的写地址命令,从而实现了防止总线死锁的目的,同时避免了采取统一防死锁机制的造成的地址吞吐量减少的问题,提高了总线的地址传输效率。
图19为本发明实施例提供的防止总线死锁的方法的另一流程图,如图19所示,该方法包括:首先判断Master与Slave之间的关系是否存在先发后至情况,如果不存在放行Master向Slave发送的写地址命令,如果存在,建立增量型关系矩阵,然后根据增量型关系矩阵判断总线是否会发生死锁,如果确定会发生死锁,阻塞相应的写地址命令。
图20为本发明实施例提供的防止总线死锁的应急机制的示意图,该机制用于应对因Interconnect模块参数设置不合理(比如入口的Outstanding深度大于路径中的Outstanding深度),而导致的可能发生在AW命令传输过程中,无竞争访问而出现通路阻塞的状况(自阻塞)。一旦这种情况出现,则会破坏动态路由表中的时序关系和目的地队列表中的预估顺序,形成死锁可能。如图20所示,该机制包括:判断是否由总线是否发生自阻塞,若发生了自阻塞,判断动态路由表中是否存在和被造成自阻塞的写地址命令同Master但不同Slave,且进入Interconnect时间晚于该写地址命令的的其他写地址命令,如果存在,则阻塞该写地址命令的Master后来发出的写地址命令,如果不存在,则阻塞其他发往该写地址命令的Slave写地址命令。
图21为本发明实施例提供的另一种防止总线死锁的装置的结构示意图,如图21所示,该装置6包括:
预处理模块61,用于建立动态路由表,其中,动态路由表用来记录主设备Master发出的但尚未到达从设备Slave的写地址命令的状态信息;
判断模块62,用于根据动态路由表判断总线是否会产生死锁;
处理模块63,用于若总线会产生死锁,确定并阻塞造成死锁的写地址命令。
本实施例提供的防止总线死锁的装置,建立用来记录Master发出的但尚未到达Slave的写地址命令的状态信息的动态路由表;根据动态路由表判断总线是否会产生死锁;若总线会产生死锁,确定并阻塞造成死锁的写地址命令;这样能够有效地识别出正在发生的具有潜在死锁风险的写地址命令,进而有针对性地阻止会造成总线死锁的写地址命令,从而实现了防止总线死锁的目的,同时避免了采取统一防死锁机制的造成的地址吞吐量减少的问题,提高了总线的地址传输效率。
图22为本发明实施例提供的另一种防止总线死锁的装置的结构示意图,如图22所示,判断模块62包括:
第一处理单元621,用于根据Master与Slave之间的关系生成关系矩阵;其中,若Master向Slave发送写地址命令,关系矩阵的对应位置为第一标识,若Master不向Slave发送写地址命令,关系矩阵的对应位置为第二标识;
第一判断单元622,用于根据动态路由表和关系矩阵判断总线是否会产生死锁。
进一步,第一判断单元622,具体用于判断关系矩阵是否是死锁矩阵;其中,死锁矩阵为关系矩阵中能够使总线产生死锁的矩阵;若关系矩阵是死锁矩阵,判断死锁矩阵是否是最简死锁矩阵;其中,最简死锁矩阵为死锁矩阵中能够使总线产生死锁,并且形式最简单的矩阵;若死锁矩阵不是最简死锁矩阵,将死锁矩阵转换成最简死锁矩阵;根据动态路由表和最简死锁矩阵判断总线是否会产生死锁。
第一判断单元622,还用于判断关系矩阵的每一行和每一列是否分别存在至少2个第一标识;若关系矩阵的每一行和每一列分别存在至少2个第一标识,确定关系矩阵是死锁矩阵;若关系矩阵的一行或一列不存在至少2个第一标识,确定关系矩阵不是死锁矩阵。
第一判断单元622,还用于若关系矩阵是死锁矩阵,判断死锁矩阵的每一行和每一列是否均存在2个第一标识;若关系矩阵的每一行和每一列均存在2个第一标识,确定死锁矩阵是最简死锁矩阵;若关系矩阵的一行或一列存在多于2个第一标识,确定死锁矩阵不是最简死锁矩阵。
第一判断单元622,还用于若m×k阶死锁矩阵不是最简死锁矩阵,根据m×k阶死锁矩阵得到个i×i阶子矩阵;其中,m、k均为大于1的整数,l=min(m,k),i=2、3…l;从个i×i阶子矩阵中筛选出i×i阶死锁矩阵;判断i×i阶死锁矩阵是否是最简死锁矩阵;若i×i阶死锁矩阵不是最简死锁矩阵,将i×i阶死锁矩阵转换成最简死锁矩阵。
第一判断单元622,还用于若m×k阶死锁矩阵不是最简死锁矩阵,在m×k阶死锁矩阵中选择i行和i列的数,从所选择的i行和i列的数中选取同时包含在i行和i列中的数并生成i×i阶矩阵;选取个i×i阶矩阵,得到个i×i阶矩阵。
第一判断单元622,还用于若i×i阶死锁矩阵不是最简死锁矩阵,将i×i阶死锁矩阵中存在多于2个第一标识的行或列中多余的第一标识置位成第二标识,使i×i阶死锁矩阵的每一行和每一列均存在2个第一标识,得到最简死锁矩阵。
进一步,写地址命令的状态信息包括源接口的接口名、目的接口的接口名、第一时序收敛寄存器片的信息和第二时序收敛寄存器片的信息,其中,第一时序收敛寄存器片的信息为写地址命令从源接口到达目的接口的传输路径中需经过的时序收敛寄存器片的信息,第二时序收敛寄存器片的信息为当前时刻写地址命令已经过的时序收敛寄存器片的信息,源接口是与发送写地址命令的Master连接的Slave接口,目的接口是与接收写地址命令的Slave相连接的Master接口。
图23为本发明实施例提供的又一种防止总线死锁的装置的结构示意图,如图23所示,处理模块63包括:
获取单元631,用于根据最简死锁矩阵和动态路由表获取Master向Slave发送写地址命令的发送时刻;根据最简死锁矩阵和动态路由表获取Master发送的写地址命令到达Slave的路径中的延时;
第二判断单元632,用于根据写地址命令的发送时刻和路径中的延时判断Master与Slave之间的关系是否满足死锁特征;其中,死锁特征为第一Master先向第一Slave发送第一写地址命令,后向第二Slave发送第二写地址命令;第二Master先向第二Slave发送第三写地址命令,后向第一slave发送第四写地址命令;并且第二写地址命令先于第三写地址命令到达第二Slave;第四写地址命令先于第一写地址命令到达第一Slave。
第二处理单元633,用于若Master与Slave之间的关系满足死锁特征,确定总线会产生死锁。
获取单元631,具体用于根据最简死锁矩阵在动态路由表中获取写地址命令的第二时序收敛寄存器片的信息;获取当前时刻的时刻信息;根据当前时刻的时刻信息和第二时序收敛寄存器片的信息,计算Master向Slave发送写地址命令的发送时刻。根据最简死锁矩阵在动态路由表中获取第一时序收敛寄存器片的信息;根据第一时序收敛寄存器片的信息计算Master发送的写地址命令到达Slave的传输路径中的延时。
第二判断单元632,具体用于判断第一Master向第一Slave发送第一写地址命令的发送时刻是否小于第一Master向第二Slave发送第二写地址命令的发送时刻;判断第二Master向第二Slave发送第三写地址命令的发送时刻是否小于第二Master向第一Slave发送的第四写地址命令的发送时刻;判断第二写地址命令到达第二Slave的到达时刻是否小于第三写地址命令到达第二Slave的到达时刻,判断第四写地址命令到达第一Slave的到达时刻是否小于第一写地址命令到达第一Slave的到达时刻;
若第一Master向第二Slave发送第二写地址命令的发送时刻大于第一Master向第一Slave发送第一写地址命令的发送时刻,且第二写地址命令到达第二Slave的到达时刻小于第三写地址命令到达第二Slave的到达时刻;并且,第二Master向第一Slave发送第四写地址命令的发送时刻大于第二Master向第二Slave发送第三写地址命令的时刻,且第四写地址命令到达第一Slave的时刻小于第一写地址命令到达第一Slave的时刻;确定Master与Slave之间的关系满足死锁特征。
本实施例提供的防止总线死锁的装置,建立用来记录Master发出的但尚未到达Slave的写地址命令的状态信息的动态路由表;根据Master与Slave之间的关系生成关系矩阵;判断关系矩阵是否是最简死锁矩阵;若关系矩阵不是最简死锁矩阵,将关系矩阵转换成最简死锁矩阵;根据动态路由表和最简死锁矩阵判断总线是否会产生死锁;若总线会产生死锁,确定并阻塞造成死锁的写地址命令;这样能够有效地识别出正在发生的具有潜在死锁风险的写地址命令,进而有针对性地阻止会造成总线死锁的写地址命令,从而实现了防止总线死锁的目的,同时避免了采取统一防死锁机制的造成的数据吞吐量减少的问题,提高了总线的数据传输效率。
图24为本发明实施例提供的又一种防止总线死锁的装置的结构示意图,如图24所示,判断模块62包括:
第三判断单元623,用于根据动态路由表判断Master与Slave之间的关系是否存在先发后至情况;其中,先发后至情况为第一Master向第一Slave发送第一写地址命令的发送时刻小于第二Master向第一Slave发送第二写地址命令的发送时刻,并且第一写地址命令到达第一Slave的到达时刻大于第二写地址命令到达第一Slave的到达时刻的情况;根据增量型关系矩阵断总线是否会产生死锁;
第三处理单元624,用于若Master与Slave之间的关系存在先发后至情况,根据第二写地址命令、第三写地址命令以及第四写地址命令生成增量型关系矩阵;其中,第三写地址命令为发送给第二Slave并且发送时刻大于第二写地址命令的发送时刻的地址命令;第四写地址命令为发送时刻大于第三写地址命令的地址命令。
进一步,第三处理单元624,具体用于若Master与Slave之间的关系存在先发后至情况,分别确定第二写地址命令、第三写地址命令和第四写地址命令表示的Master与Slave之间的关系;若Master与Slave之间的关系为Master向Slave发送写地址命令,在增量型关系矩阵的对应位置设置第一标识;若Master与Slave之间的关系为Master不向Slave发送写地址命令,在增量型关系矩阵的对应位置设置第二标识。。
第三判断单元623,具体用于判断增量型关系矩阵的每一行和每一列是否分别存在至少2个第一标识;若增量型关系矩阵的每一行和每一列分别存在至少2个第一标识,确定总线是否会产生死锁。
本实施例提供的防止总线死锁的装置,建立用来记录Master发出的但尚未到达Slave的写地址命令的状态信息;根据动态路由表判断Master与Slave之间的关系是否存在先发后至情况;若Master与Slave之间的关系存在先发后至情况,根据第二写地址命令、第三写地址命令以及第四写地址命令生成增量型关系矩阵;进而根据增量型关系矩阵断总线是否会产生死锁,确定并阻塞造成死锁的写地址命令;这样能够以简单的方法有效地识别出正在发生的具有潜在死锁风险的写地址命令,进而有针对性地阻止会造成总线死锁的写地址命令,从而实现了防止总线死锁的目的,同时避免了采取统一防死锁机制的造成的数据吞吐量减少的问题,提高了总线的数据传输效率。
在实际应用中,所述预处理模块61、判断模块62、第一处理单元621、第一判断单元622、第三判断单元623、第三处理单元624、处理模块63、获取单元631、第二判断单元632、第二处理单元633,均可由位于缓存空间的管理装置中的中央处理器(Central ProcessingUnit,CPU)、微处理器(Micro Processor Unit,MPU)、数字信号处理器(Digital SignalProcessor,DSP)或现场可编程门阵列(Field Programmable Gate Array,FPGA)等实现。
图25为本发明实施例提供的又一种防止总线死锁的装置的结构示意图,如图25所示,该装置7包括:
Interconnect模块71,用于运行Master向Slave发送的写地址命令。
监测模块72,用于监测Interconnect***模块71的运行情况。
判断模块73,用于根据监测模块72所监测的情况判断Interconnect***中是否发产生总线死锁。
阻塞模块74,用于阻塞引起总线死锁的写地址命令。
在实际应用中,Interconnect模块71、监测模块72、判断模块73、阻塞模块74,均可由位于缓存空间的管理装置中的CPU、MPU、DSP或FPGA等实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、***、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (20)
1.一种防止总线死锁的方法,其特征在于,所述方法包括:
建立动态路由表,其中,所述动态路由表用来记录主设备Master发出的但未到达从设备Slave的写地址命令的状态信息;
根据Master与Slave之间的关系生成关系矩阵;其中,若所述Master向所述Slave发送写地址命令,所述关系矩阵的对应位置为第一标识,若所述Master不向所述Slave发送所述写地址命令,所述关系矩阵的对应位置为第二标识;
判断所述关系矩阵是否是死锁矩阵;其中,所述死锁矩阵为所述关系矩阵中能够使所述总线产生死锁的矩阵;
若所述关系矩阵是所述死锁矩阵,判断所述死锁矩阵是否是最简死锁矩阵;其中,所述最简死锁矩阵为所述死锁矩阵中能够使所述总线产生死锁,并且形式最简单的矩阵;
若所述死锁矩阵不是所述最简死锁矩阵,将所述死锁矩阵转换成所述最简死锁矩阵;
根据所述动态路由表和所述最简死锁矩阵判断所述总线是否会产生死锁;
若所述总线会产生死锁,确定并阻塞造成死锁的所述写地址命令。
2.根据权利要求1所述的方法,其特征在于,所述判断所述关系矩阵是否是死锁矩阵,包括:
判断所述关系矩阵的每一行和每一列是否分别存在至少2个所述第一标识;
若所述关系矩阵的每一行和每一列分别存在至少2个所述第一标识,确定所述关系矩阵是所述死锁矩阵;
若所述关系矩阵的一行或一列不存在至少2个所述第一标识,确定所述关系矩阵不是所述死锁矩阵。
3.根据权利要求2所述的方法,其特征在于,所述若所述关系矩阵是所述死锁矩阵,判断所述死锁矩阵是否是最简死锁矩阵,包括:
若所述关系矩阵是所述死锁矩阵,判断所述死锁矩阵的每一行和每一列是否均存在2个所述第一标识;
若所述关系矩阵的每一行和每一列均存在2个所述第一标识,确定所述死锁矩阵是所述最简死锁矩阵;
若所述关系矩阵的一行或一列存在多于2个所述第一标识,确定所述死锁矩阵不是所述最简死锁矩阵。
6.根据权利要求4所述的方法,其特征在于,所述若所述i×i阶死锁矩阵不是所述最简死锁矩阵,将所述i×i阶死锁矩阵转换成所述最简死锁矩阵,包括:
若所述i×i阶死锁矩阵不是所述最简死锁矩阵,将所述i×i阶死锁矩阵中存在多于2个所述第一标识的行或列中多余的所述第一标识置位成所述第二标识,使所述i×i阶死锁矩阵的每一行和每一列均存在2个所述第一标识,得到所述最简死锁矩阵。
7.根据权利要求1所述的方法,其特征在于,所述写地址命令的状态信息包括源接口的接口名、目的接口的接口名、第一时序收敛寄存器片的信息和第二时序收敛寄存器片的信息,其中,所述第一时序收敛寄存器片的信息为所述写地址命令从所述源接口到达所述目的接口的传输路径中需经过的时序收敛寄存器片的信息,所述第二时序收敛寄存器片的信息为当前时刻所述写地址命令已经过的时序收敛寄存器片的信息,所述源接口是与发送所述写地址命令的所述Master连接的Slave接口,所述目的接口是与接收所述写地址命令的所述Slave相连接的Master接口。
8.根据权利要求7所述的方法,其特征在于,所述根据所述动态路由表和所述最简死锁矩阵判断所述总线是否会产生死锁,包括:
根据所述最简死锁矩阵和所述动态路由表获取所述Master向所述Slave发送所述写地址命令的发送时刻;
根据所述最简死锁矩阵和所述动态路由表获取所述Master发送的所述写地址命令到达所述Slave的路径中的延时;
根据所述写地址命令的发送时刻和所述路径中的延时判断所述Master与所述Slave之间的关系是否满足死锁特征;其中,所述死锁特征为第一Master先向第一Slave发送第一写地址命令,后向第二Slave发送第二写地址命令;第二Master先向所述第二Slave发送第三写地址命令,后向所述第一Slave发送第四写地址命令;并且所述第二写地址命令先于所述第三写地址命令到达所述第二Slave;所述第四写地址命令先于所述第一写地址命令到达所述第一Slave;
若所述Master与Slave之间的关系满足死锁特征,确定所述总线会产生死锁。
9.根据权利要求8所述的方法,其特征在于,所述根据所述最简死锁矩阵和所述动态路由表获取所述Master向所述Slave发送写地址命令的发送时刻,包括:
根据所述最简死锁矩阵在所述动态路由表中获取所述写地址命令的第二时序收敛寄存器片的信息;
获取当前时刻的时刻信息;
根据所述当前时刻的时刻信息和所述第二时序收敛寄存器片的信息,计算所述Master向所述Slave发送写地址命令的发送时刻。
10.根据权利要求8所述的方法,其特征在于,所述根据所述最简死锁矩阵和所述动态路由表获取所述Master发送的所述写地址命令到达所述Slave的路径中的延时,包括:
根据所述最简死锁矩阵在所述动态路由表中获取第一时序收敛寄存器片的信息;
根据所述第一时序收敛寄存器片的信息计算所述Master发送的所述写地址命令到达所述Slave的传输路径中的延时。
11.根据权利要求10所述的方法,其特征在于,所述根据所述写地址命令的发送时刻和所述路径中的延时判断所述Master与所述Slave之间的关系是否满足死锁特征,包括:
判断所述第一Master向所述第一Slave发送所述第一写地址命令的发送时刻是否小于所述第一Master向所述第二Slave发送所述第二写地址命令的发送时刻;
判断所述第二Master向所述第二Slave发送所述第三写地址命令的发送时刻是否小于所述第二Master向所述第一Slave发送的所述第四写地址命令的发送时刻;
判断所述第二写地址命令到达所述第二Slave的到达时刻是否小于所述第三写地址命令到达所述第二Slave的到达时刻;
判断所述第四写地址命令到达所述第一Slave的到达时刻是否小于所述第一写地址命令到达所述第一Slave的到达时刻;
若所述第一Master向所述第二Slave发送所述第二写地址命令的发送时刻大于所述第一Master向所述第一Slave发送所述第一写地址命令的发送时刻,且所述第二写地址命令到达所述第二Slave的到达时刻小于所述第三写地址命令到达所述第二Slave的到达时刻;并且,所述第二Master向所述第一Slave发送所述第四写地址命令的发送时刻大于所述第二Master向所述第二Slave发送所述第三写地址命令的时刻,且所述第四写地址命令到达所述第一Slave的时刻小于所述第一写地址命令到达所述第一Slave的时刻;确定所述Master与Slave之间的关系满足死锁特征。
12.根据权利要求1所述的方法,其特征在于,所述方法根据所述动态路由表判断总线是否会产生死锁,包括:
根据所述动态路由表判断Master与Slave之间的关系是否存在先发后至情况;其中,所述先发后至情况为第一Master向第一Slave发送第一写地址命令的发送时刻小于第二Master向第一Slave发送第二写地址命令的发送时刻,并且所述第一写地址命令到达第一Slave的到达时刻大于所述第二写地址命令到达第一Slave的到达时刻的情况;
若所述Master与Slave之间的关系存在所述先发后至情况,根据所述第二写地址命令、第三写地址命令以及第四写地址命令生成增量型关系矩阵;其中,所述第三写地址命令为发送给第二Slave并且发送时刻大于所述第二写地址命令的发送时刻的写命令;所述第四写地址命令为发送时刻大于所述第三写地址命令的写命令;
根据所述增量型关系矩阵判断总线是否会产生死锁。
13.根据权利要求12所述的方法,其特征在于,所述若所述Master与Slave之间的关系存在所述先发后至情况,根据所述第二写地址命令、第三写地址命令以及第四写地址命令生成增量型关系矩阵,包括:
若所述Master与Slave之间的关系存在所述先发后至情况,分别确定所述第二写地址命令、所述第三写地址命令和所述第四写地址命令表示的Master与Slave之间的关系;
若所述Master与Slave之间的关系为所述Master向所述Slave发送写地址命令,在所述增量型关系矩阵的对应位置设置第一标识;
若所述Master与Slave之间的关系为所述Master不向所述Slave发送写地址命令,在所述增量型关系矩阵的对应位置设置第二标识。
14.根据权利要求13所述的方法,其特征在于,所述根据所述增量型关系矩阵判断总线是否会产生死锁,包括:
判断所述增量型关系矩阵的每一行和每一列是否分别存在至少2个所述第一标识;
若所述增量型关系矩阵的每一行和每一列分别存在至少2个所述第一标识,确定所述总线是否会产生死锁。
15.一种防止总线死锁的装置,其特征在于,所述装置包括:
预处理模块,用于建立动态路由表,其中,所述动态路由表用来记录主设备Master发出的但尚未到达从设备Slave的写地址命令的状态信息;
判断模块,包括第一处理单元和第一判断单元,其中,
所述第一处理单元,用于根据Master与Slave之间的关系生成关系矩阵;其中,若所述Master向所述Slave发送写地址命令,所述关系矩阵的对应位置为第一标识,若所述Master不向所述Slave发送所述写地址命令,所述关系矩阵的对应位置为第二标识;
所述第一判断单元,用于判断所述关系矩阵是否是死锁矩阵;其中,所述死锁矩阵为所述关系矩阵中能够使所述总线产生死锁的矩阵;
若所述关系矩阵是所述死锁矩阵,判断所述死锁矩阵是否是最简死锁矩阵;其中,所述最简死锁矩阵为所述死锁矩阵中能够使所述总线产生死锁,并且形式最简单的矩阵;
若所述死锁矩阵不是所述最简死锁矩阵,将所述死锁矩阵转换成所述最简死锁矩阵;
根据所述动态路由表和所述最简死锁矩阵判断所述总线是否会产生死锁;
处理模块,用于若所述总线会产生死锁,确定并阻塞造成死锁的所述写地址命令。
16.根据权利要求15所述的装置,其特征在于,所述写地址命令的状态信息包括源接口的接口名、目的接口的接口名、第一时序收敛寄存器片的信息和第二时序收敛寄存器片的信息,其中,所述第一时序收敛寄存器片的信息为所述写地址命令从所述源接口到达所述目的接口的传输路径中需经过的时序收敛寄存器片的信息,所述第二时序收敛寄存器片的信息为当前时刻所述写地址命令已经过的时序收敛寄存器片的信息,所述源接口是与发送所述写地址命令的所述Master连接的Slave接口,所述目的接口是与接收所述写地址命令的所述Slave相连接的Master接口。
17.根据权利要求15所述的装置,其特征在于,所述处理模块包括:
获取单元,用于根据最简死锁矩阵和所述动态路由表获取所述Master向所述Slave发送所述写地址命令的发送时刻;根据所述最简死锁矩阵和所述动态路由表获取所述Master发送的所述写地址命令到达所述Slave的路径中的延时;
第二判断单元,用于根据所述写地址命令的发送时刻和所述路径中的延时判断所述Master与所述Slave之间的关系是否满足死锁特征;其中,所述死锁特征为第一Master先向第一Slave发送第一写地址命令,后向第二Slave发送第二写地址命令;第二Master先向所述第二Slave发送第三写地址命令,后向所述第一Slave发送第四写地址命令;并且所述第二写地址命令先于所述第三写地址命令到达所述第二Slave;所述第四写地址命令先于所述第一写地址命令到达所述第一Slave;
第二处理单元,用于若所述Master与Slave的之间关系满足死锁特征,确定所述总线会产生死锁。
18.根据权利要求17所述的装置,其特征在于,
所述第二判断单元,具体用于判断所述第一Master向所述第一Slave发送所述第一写地址命令的发送时刻是否小于所述第一Master向所述第二Slave发送所述第二写地址命令的发送时刻;
判断所述第二Master向所述第二Slave发送所述第三写地址命令的发送时刻是否小于所述第二Master向所述第一Slave发送的所述第四写地址命令的发送时刻;
判断所述第二写地址命令到达所述第二Slave的到达时刻是否小于所述第三写地址命令到达所述第二Slave的到达时刻;
判断所述第四写地址命令到达所述第一Slave的到达时刻是否小于所述第一写地址命令到达所述第一Slave的到达时刻;
若所述第一Master向所述第二Slave发送所述第二写地址命令的发送时刻大于所述第一Master向所述第一Slave发送所述第一写地址命令的发送时刻,且所述第二写地址命令到达所述第二Slave的到达时刻小于所述第三写地址命令到达所述第二Slave的到达时刻;并且,所述第二Master向所述第一Slave发送所述第四写地址命令的发送时刻大于所述第二Master向所述第二Slave发送所述第三写地址命令的时刻,且所述第四写地址命令到达所述第一Slave的时刻小于所述第一写地址命令到达所述第一Slave的时刻;确定所述Master与Slave之间的关系满足死锁特征。
19.根据权利要求15所述的装置,其特征在于,所述判断模块包括:
第三判断单元,用于根据所述动态路由表判断Master与Slave之间的关系是否存在先发后至情况;其中,所述先发后至情况为第一Master向第一Slave发送第一写地址命令的发送时刻小于第二Master向第一Slave发送第二写地址命令的发送时刻,并且所述第一写地址命令到达第一Slave的到达时刻大于所述第二写地址命令到达第一Slave的到达时刻的情况;根据增量型关系矩阵断总线是否会产生死锁;
第三处理单元,用于若所述Master与Slave之间的关系存在所述先发后至情况,根据所述第二写地址命令、第三写地址命令以及第四写地址命令生成增量型关系矩阵;其中,所述第三写地址命令为发送给第二Slave并且发送时刻大于所述第二写地址命令的发送时刻的地址命令;所述第四写地址命令为发送时刻大于所述第三写地址命令的地址命令。
20.根据权利要求19所述的装置,其特征在于,
所述第三处理单元,具体用于若所述Master与Slave之间的关系存在所述先发后至情况,分别确定所述第二写地址命令、所述第三写地址命令和所述第四写地址命令表示的Master与Slave之间的关系;
若所述Master与Slave之间的关系为所述Master向所述Slave发送写地址命令,在所述增量型关系矩阵的对应位置设置第一标识;若所述Master与Slave之间的关系为所述Master不向所述Slave发送写地址命令,在所述增量型关系矩阵的对应位置设置第二标识。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611160596.7A CN108228503B (zh) | 2016-12-15 | 2016-12-15 | 一种防止总线死锁的方法及装置 |
PCT/CN2017/085136 WO2018107658A1 (zh) | 2016-12-15 | 2017-05-19 | 一种防止总线死锁的方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611160596.7A CN108228503B (zh) | 2016-12-15 | 2016-12-15 | 一种防止总线死锁的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108228503A CN108228503A (zh) | 2018-06-29 |
CN108228503B true CN108228503B (zh) | 2020-11-10 |
Family
ID=62557938
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611160596.7A Active CN108228503B (zh) | 2016-12-15 | 2016-12-15 | 一种防止总线死锁的方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN108228503B (zh) |
WO (1) | WO2018107658A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114265872B (zh) * | 2022-02-24 | 2022-05-24 | 苏州浪潮智能科技有限公司 | 一种用于总线的互联装置 |
CN117331872B (zh) * | 2023-11-30 | 2024-02-09 | 珠海市芯动力科技有限公司 | 防止总线死锁的方法及相关装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6480917B1 (en) * | 1999-08-19 | 2002-11-12 | International Business Machines Corporation | Device arbitration including peer-to-peer access arbitration |
CN1690995A (zh) * | 2004-04-27 | 2005-11-02 | 英特尔公司 | 将事务分离到不同的虚拟信道 |
CN101303682A (zh) * | 2008-06-25 | 2008-11-12 | 杭州华三通信技术有限公司 | 通过pci总线传输数据的装置、代理访问装置及方法 |
CN101308477A (zh) * | 2008-06-13 | 2008-11-19 | 华为技术有限公司 | ***总线的防死锁方法、装置及片上*** |
CN106055501A (zh) * | 2015-04-03 | 2016-10-26 | 发那科株式会社 | 具有连接联锁总线与分支总线的桥式电路的总线*** |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101667152A (zh) * | 2009-09-23 | 2010-03-10 | 华为技术有限公司 | 计算机***及计算机***的总线监控方法 |
CN102103560A (zh) * | 2009-12-16 | 2011-06-22 | 中兴通讯股份有限公司 | 用于***总线的防死锁方法及装置 |
-
2016
- 2016-12-15 CN CN201611160596.7A patent/CN108228503B/zh active Active
-
2017
- 2017-05-19 WO PCT/CN2017/085136 patent/WO2018107658A1/zh active Application Filing
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6480917B1 (en) * | 1999-08-19 | 2002-11-12 | International Business Machines Corporation | Device arbitration including peer-to-peer access arbitration |
CN1690995A (zh) * | 2004-04-27 | 2005-11-02 | 英特尔公司 | 将事务分离到不同的虚拟信道 |
CN101308477A (zh) * | 2008-06-13 | 2008-11-19 | 华为技术有限公司 | ***总线的防死锁方法、装置及片上*** |
CN101303682A (zh) * | 2008-06-25 | 2008-11-12 | 杭州华三通信技术有限公司 | 通过pci总线传输数据的装置、代理访问装置及方法 |
CN106055501A (zh) * | 2015-04-03 | 2016-10-26 | 发那科株式会社 | 具有连接联锁总线与分支总线的桥式电路的总线*** |
Non-Patent Citations (1)
Title |
---|
"μC/OS-Ⅱ优先级反转与死锁问题的解决";彭磊等;《计算机应用与软件》;20110830;第200-202页 * |
Also Published As
Publication number | Publication date |
---|---|
CN108228503A (zh) | 2018-06-29 |
WO2018107658A1 (zh) | 2018-06-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11650895B2 (en) | Distributed hardware tracing | |
US9823983B2 (en) | Electronic fault detection unit | |
US7558895B2 (en) | Interconnect logic for a data processing apparatus | |
EP3217292B1 (en) | Atomic access to object pool over rdma transport network | |
US7500045B2 (en) | Minimizing memory barriers when enforcing strongly-ordered requests in a weakly-ordered processing system | |
US8793699B2 (en) | Negating initiative for select entries from a shared, strictly FIFO initiative queue | |
CN107430566B (zh) | 直接存储器访问描述符处理 | |
CN101501592A (zh) | 在过程控制***中用于用户可配置资源仲裁的***和方法 | |
JPH06223042A (ja) | マルチプロセッサ・システムにおいて割込みを管理するための装置及び方法 | |
US20060242308A1 (en) | Node synchronization for multi-processor computer systems | |
US20200117990A1 (en) | High performance computing system for deep learning | |
KR20200139829A (ko) | 네트워크 온칩 데이터 처리 방법 및 장치 | |
EP3682382B1 (en) | Quantum error correction | |
US11176297B2 (en) | Detection and isolation of faults to prevent propagation of faults in a resilient system | |
CN108228503B (zh) | 一种防止总线死锁的方法及装置 | |
EP2904765B1 (en) | Method and apparatus using high-efficiency atomic operations | |
CN110196826B (zh) | 一种死锁判断方法及装置 | |
US9916129B1 (en) | Flow control for direct memory access transfers | |
CN103457594A (zh) | 用于异步状态机的判优器 | |
Slastikhin et al. | The simulation model of the system with aggregated channels and redundant transmissions on the multiple access level. | |
JP2010118020A (ja) | リクエスト順序制御システム、リクエスト順序制御方法およびリクエスト順序制御プログラム | |
KR100854662B1 (ko) | 로봇 제어 모듈의 프로세스 연결 방법 | |
KR101476585B1 (ko) | 다중화 기기간 데이터 선별을 위한 시리얼 버스 프로토콜 구현 방법 및 장치 | |
JPH02307150A (ja) | 分散アービトレーション方式 | |
JP2013196176A (ja) | 排他制御システム、排他制御方法および排他制御プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |