[发明专利]一种基于petri网的死锁检测方法在审
申请号: | 201410660535.1 | 申请日: | 2014-11-18 |
公开(公告)号: | CN104461871A | 公开(公告)日: | 2015-03-25 |
发明(设计)人: | 顾乃杰;黄双玲;叶鸿;冯光辉 | 申请(专利权)人: | 合肥康捷信息科技有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 安徽省合肥新安专利代理有限责任公司 34101 | 代理人: | 何梅生 |
地址: | 230000 安徽省合肥市望江西路和创新大*** | 国省代码: | 安徽;34 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公开了一种基于petri网的死锁检测方法,petri网是由若干个库所、变迁、有向弧和令牌构成的;死锁类型分为读写锁、条件变量、信号量和栅栏;其特征是根据死锁类型分别或同时对待检测代码进行死锁检测并按照如下步骤进行:1、构建待检测代码对应的待检测petri网;2、对待检测petri网进行死锁检测。本发明能检测由读写锁、条件变量、信号量和栅栏引发的死锁,使得基于petri网的死锁检测更加的全面。 | ||
搜索关键词: | 一种 基于 petri 死锁 检测 方法 | ||
【主权项】:
一种基于petri网的死锁检测方法,所述petri网是由若干个库所、变迁、有向弧和令牌构成的;所述库所与变迁通过所述有向弧进行连接,根据所述有向弧方向,将所述库所分为所述变迁的输入库所和变迁的输出库所;当所述变迁的输入库所拥有令牌,则表示所述变迁被允许执行;所述死锁的类型分为读写锁、条件变量、信号量和栅栏;其特征是,根据所述死锁的类型对待检测代码按如下步骤进行死锁检测:步骤1、构建所述待检测代码对应的待检测petri网:步骤1.1、对所述待检测代码编写所述读写锁的配置文件、所述条件变量的配置文件、所述信号量的配置文件和所述栅栏的配置文件;所述读写锁的配置文件包括:读写锁处理函数和读写锁变量;所述条件变量的配置文件包括:条件变量处理函数、互斥锁变量和条件变量;所述信号量的配置文件包括:信号量处理函数和信号量;所述栅栏的配置文件包括:栅栏处理函数和栅栏变量;步骤1.2、对所述读写锁的配置文件、所述条件变量的配置文件、所述信号量的配置文件和所述栅栏的配置文件分别提取所述读写锁变量、互斥锁变量、条件变量、信号量和栅栏变量;并创建与所述读写锁变量相对应的库所、与所述互斥锁变量相对应的库所,与所述条件变量相对应的库所、与所述信号量相对应的库所以及与所述栅栏变量相对应的库所;步骤1.3、对所述读写锁变量所对应的库所分别添加读写锁变量的辅助数据结构;所述读写锁变量的辅助数据结构用于存储所述读写锁变量的状态;所述读写锁变量的状态包括:加锁类型、资源数和加锁线程列表;对所述条件变量所对应的库所分别添加条件变量的辅助数据结构;所述条件变量的辅助数据结构用于存储所述条件变量的状态;所述条件变量的状态为:是否满足条件;对所述信号量所对应的库所分别添加信号量的辅助数据结构;所述信号量的辅助数据结构用于存储所述信号量的状态;所述信号量的状态为:信号量的值;对所述栅栏变量所对应的库所分别添加栅栏变量的辅助数据结构;所述栅栏变量的辅助数据结构用于存储所述栅栏变量的状态;所述栅栏变量的状态包括:等待的线程个数、等待线程列表和可执行线程列表;步骤1.4、将所述读写锁的配置文件中的每个读写锁处理函数对应于所述petri网中的一个读写锁的变迁,并分别绘制所述读写锁处理函数的petri网模型;将所述条件变量的配置文件中的每个条件变量处理函数对应于所述petri网中的一个条件变量的变迁,并分别绘制所述条件变量处理函数的petri网模型;将所述信号量的配置文件中的信号量处理函数对应于所述petri网中的一个信号量的变迁,并分别绘制所述信号量处理函数的petri网模型;将所述栅栏的配置文件中的栅栏处理函数对应于所述petri网中的一个栅栏的变迁,并分别绘制所述栅栏处理函数的petri网模型;步骤1.5、创建待构建petri网中所述待检测代码执行的初始函数main对应的库所,利用所述待检测代码中所包含的函数调用关系的先后顺序,以及所述函数调用关系中包含的读写锁处理函数、条件变量处理函数、信号量处理函数和/或栅栏处理函数;分别将所述读写锁处理函数的petri网模型、所述条件变量处理函数的petri网模型、所述信号量处理函数的petri网模型和/或所述栅栏处理函数的petri网模型依次添加到所述待构建petri网中,从而形成待检测petri网;步骤2、对所述待检测petri网进行死锁检测:步骤2.1、初始化所述待检测petri网的状态并进行存储,使得所述待检测代码中的初始函数main对应的库所拥有令牌;所述读写锁变量对应的库所拥有令牌;定义一个缓存栈;步骤2.2、模拟执行所述待检测petri网,从所述待检测代码中初始函数main对应的库所开始执行;步骤2.3、判断所述待检测petri网中,是否存在被允许执行的变迁;若存在,则执行步骤2.4;否则执行步骤2.6;步骤2.4、将所述被允许执行的变迁存入所述缓存栈中并标记为未执行状态;步骤2.5、将所述缓存栈中的栈顶元素对应的变迁标记为已执行状态并执行;所述已执行变迁对应的输入库所的令牌转移到输出库所上,所述待检测petri网的状态得到更新;存储所述更新的待检测petri网的状态后返回步骤2.3执行;步骤2.6、判断所述待检测petri网中是否存在未执行状态的变迁,若存在,则表示存在死锁,并给出所有已执行状态的变迁,检测停止;否则,执行步骤2.7;步骤2.7、将所述缓存栈中标记已执行状态的变迁出栈,直到遇到未执行状态的变迁为止;若所述出栈过程中没有遇到未执行状态的变迁,则表示所述待检测petri网中不存在死锁,检测停止;否则将所述栈顶元素对应的变迁标记为已执行状态并执行;所述已执行的变迁对应的输入库所的令牌转移到输出库所上,所述待检测petri网的状态得到更新;存储所述更新的待检测petri网的状态后返回步骤2.3执行。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于合肥康捷信息科技有限公司,未经合肥康捷信息科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201410660535.1/,转载请声明来源钻瓜专利网。