- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机操作系统
6 并发程序设计– 6.6 死锁
6.6.4 死锁的检测
死锁的检测
解决死锁问题的另一条途径是死锁检
测方法
这种方法对资源的分配不加限制,但
系统定时运行一个“死锁检测”程序,
判断系统内是否已出现死锁,若检测
到死锁则设法加以解除
死锁的检测
检测的一种方法:可设置两张表格来记录进
程使用资源的情况
等待资源表记录每个被阻塞进程等待的资源
占用资源表记录每个进程占有的资源
进程申请资源时,先查该资源是否为其它进
程所占用;若资源空闲,则把该资源分配给
申请者且登入占用资源表;否则,则登入进
程等待资源表
死锁的检测
资源 占用进程
r1 P1 进程 等待资源
r2 P2 P1 r1
r3 P3 P2 r2
r4 P4 P3 r3
r5 P5 … …
… …
死锁的检测
死锁检测程序定时检测这两张表,若有进程
Pi等待资源rk,且rk被进程Pj 占用,则说Pi
和Pj具有“等待占用关系”,记为W(Pi, Pj)
死锁检测程序反复检测这两张表,可以列出
所有的“等待占用关系”
如果出现W(Pi, Pj), W(Pj, Pk), ……, W(Pm,
Pn), W(Pn, Pi)时,显然,系统中存在一组循
环等待资源的进程:Pi, Pj, Pk, ……, Pm, Pn,
也就是说出现了死锁
死锁检测的数据结构
把两张表格中记录的进程使用和等待资源的情况
用一个矩阵A来表示
进程 P1 P2 Pn
进程
P1 b11 b12 bn2
P2 b21 b22 bn2
... ... ... ...
Pn bn1 bn2 bn2
1 当Pi等待被Pj 占用的资源时
其中bij= 0 当Pi与Pj不存在等待占用关系时
死锁检测的算法
死锁检测程序可用Warshall 的传递闭包算法
检测是否有死锁发生,即对矩阵A构造传递
闭包A*[bij]
A*[bij] 中的每个bij是对A[bij]执行如下算法:
for k:=1 to n do
for i:=1 to n do
for j:=1 to do
bij:= bij (bik bkj)
死锁检测后的解决办法
可以采用重新启动进程执行的办法,恢
复工作应包含重启动一个或全部进程,
以及从哪一点开始重启动
全部卷入死锁从头开始启动,但这样的
代价是相当大的
在进程执行过程中定时设置校验点,从
校验点开始重执行
中止一个卷入死锁的进程,以后重执行
本人专注于k12教育,英语四级考试培训,本人是大学本科计算机专业毕业生,专注软件工程计算机专业,也可承接计算机专业的C语言程序设计,Java开发,Python程序开发。
原创力文档


文档评论(0)