操作系统中的死锁检测

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

死锁的检测【 4 】 . 关于 j a v a多线程程序 中的死锁检测, 无 论是静态
方 法【 5 ' 6 】 还是 动态方法[ 7 , 8 1 ,过去都 已经做 过大量研 究.
而且 目前 已经有 比较成熟 的工具可 以直接检查 i a v a 程
序 中的死锁,如 i s t a c k 、 l o c k s t a t 等.由于操作系统代码
l 引言
为了充分发挥 c p u 多核的性能, 并发程序设计 已 经十分广 泛,但是开 发并 发程序面 临很 多挑 战,死锁 就是其 中的一 个. 在设备驱 动错 误 中有 1 9 %的错误是
由于并 发导致 的【 l J ,在 这些并发 错误 中 7 2 %( 6 7 / 9 3 )  ̄

图 2描述 了本文采用的获得锁 持有者算法: ( 1 )当进程加锁的时候, 将 i a , l o c kt y pe ,r e s o u r c e
_ —
图1 描述 了本文采用 的死锁检测算法 : ( 1 )每 隔一 定时间( s e a r c hc y c l e指 定) 检 查锁 持有
计 算 机 系 统 应 用
部分介绍如何获 得锁 的等待 者. 第 5部分根据第 3 、4 部分的结果判 断是否形成循环等待 图. 第 6部分是实 验 结果.第 7部分将对论文进行总结.
任何源程序和库 函数. s y s t e mt a p既可 以在 函数 的入 口处进行探测, 也可 以在 函数 的出 口处进行探测.若在加锁 函数 退出的地 方进行 探测,那 么就可 以获得锁 的持有者信 息,因为 只有成功获得锁,进程( 本论文对线程与进程不区分对 待) 才能从加锁 函数中退 出,否则便处于等待状态 . 为 了 唯一 标 识 进 程 加 锁 和 解 锁 操 作 ,使 用 由进 程 号 ( p 、锁类型( 1 o c kt y p e ) 、资源地址( r e s o u r c ea d d r ) 组
s h o w t h a t t h e me t h o d h a s o n l y 1 % i n f l u e n c e t o t h e p e r f o m a r nc e . a n d d o e s n o t n e e d t o mo di f y Li n u x k e r n e l a nd d e t e c t e d

要:本文提供 了一种检测操作系统 中死锁 的方法.该方 法包含 三个步骤: ( 1 ) 通过检测进程加锁与解锁是否 匹
配 来获得锁 的持有者; ( 2 ) 从异常进程 中筛选 出锁 的等待者; ( 3 ) 通过检 查锁 的持有者 与等待者是否会形成循环等待 图来判定死锁.通过实验发现,该方法对系统性能的影响小于 l %,而且不需要修改 内核源 码和源 程序. 关键词: 操作 系统;死锁检测 ; 并发程序;异常进程
在应用到 J D K 时发现 了 1 0 0 , 0 0 0多个死锁,实际只有
7 0个 . 动态检测是在程序 运行时,检查可能发生 的死 锁,但是动态监测性能开销大,不适 用于 内核、 驱动 中
① 基 金 项 目: 国家 自然科 学基 金( 6 l 2 7 2 1 3 l , 6 1 2 0 2 0 5 3 ) ;  ̄ E 苏 省 自然科学  ̄
p r o g r a m s o u r c e c od e .
Ke y wor d s : op e r mi n g s ys t e m; d e a d l o c k d e t e c t i o n; c o nc u r r e n t p r o ra g ms ; a b n o r ma l p r o c e s s e s


5 wh i l e( 1 ) {
s l e e p( s e a r c h c y c l e )
收稿时间: 2 0 1 3 - 0 3 . 3 1 ; 收到修改稿时间: 2 0 1 3 04 - - 2 8
1 4 专 论・ 综述 S p e c i a l I s s u e
2 0 1 3年 第 2 2 卷 第 1 0期
h t t p : / / w w w. c - S - a . o r g . c a
( S B K2 0 1 2 4 0 1 9 8 )
死 锁检测的方法分 为静态 和动态两 种. 静 态检 测 通过工具来分析待检测程序 的源代码来找 出可 能要发 生死锁 的程序位 置,这种方 法不适用 于检测代码量 大 的程序,而且 很不准确 . 文 献【 3 1 提供 的静态检测方 法
A b s t r a c t : T h i s p a p e r i n t r o d u c e s a me t h o d t o d e t e c t o p e r mi n g s y s t e m d e a d l o c k . T h e me t h o d c o n s i s t s o f t h r e e s t a g e s : ( 1 ) i f n d i n g t h e l o c k - h o l d e r s b y d e t e c t i n g w h e t h e r he t l o c k s a n d u n l o c k s a r e p a i r e d . ( 2 ) i f n d i n g he t l o c k — w a i t e r s b y i f l t e r i n g
t h e a b n o r ma l p r o c e s s . ( 3 ) t h e me t h o d wi l l o c c u r d e a d l o c k wa r n i n g i f t h e r e i s a c y c l e i n t h e wa i t s — f o r g r a p h . T h e r e s u l t s
_
a d d r > 插入死锁检测程序维护的链表 H O L DE R L I S T中. ( 2 )当进 程解 锁 时,将 i d , l o c kt y pe ,r e s o u r c e
_

者链表 HO L D E R L I S T是否为空. ( 2 )若 不为空 则检 查这些 锁 的持 有者 是不是 锁 的
1 w h i l e ( 1 ) {
( 3 )当死锁检查周期 s e a r c h
时间到 的时候,
便可 以从 H OL D E R L I S T中获得锁的持有者.
1 wh e nt h r e a dl o c k


3 4 5
s l e e p ( s e a r c h — c y c l e )
等待者.
a d d r > 从H O L D E R L I S T链表中删除. 那么 H OL DE R L I S T 链表 中保存 的便是那 些只有成 功加锁而没有 解
锁 的进 程 .
( 3 )若检查结果为 t u r e ,则检查这 些锁的持有者与 等待者之 间是 否会形成一个循环等待 图. ( 4 )如果存在循环等待 图则说 明发生 了死锁 .
_ _
2 死锁检测算法
当进 程发 生死锁 时,进程 既是锁 的持 有者 ,也是
锁 的等待 者,而且进 程 间会 形成一个 循 环等待 图出锁
的等待 者,然后进 一步判断它们之 间是 否形成 一个循
环等待 图.
成 的三 元 组 磁 f 0 c k t y pe , r e s o u r c e a d d r > .
计 算 机 系 统 应 用
h t t p : / / ww w. c - S - a . o r g . c n
2 0 1 3年 第 2 2卷 第 1 O期
操作系统 中的死锁检测①
张海 鹏 。 ,李 曦l ,
( 中 国科学技术大学 计算机科 学与 技术学院, 合肥 2 3 0 0 2 7 ) ( 中 国科学技术大学 苏州研究 院,苏州 2 1 5 1 2 3 )
i n s e r t< p i d, l ck t o y p e, r e s o u r c e


a d d r >t o t t O L D E R_ L I S T

3wh e nt h r e a du n l ck o
4 6
7 8
el d e t e< p i d ,l ck t o y p e, r e s o u r c e a d d r >f r o m HOLDE R LI S T
死锁有关,文献【 2 】 通 过对 4 大开源 软件: My S Q L 、 A p a c h e 、 Mo z i l l a 和O p e n O f i c e 中的并发错误进行分析,
发现 3 0 %( 3 1 / 1 0 5 ) 的错误是 由死锁造 成的.
量大 、对 性能敏感,过去关 于操 作系统死锁 方面 的研
究 比较少.死锁检 测工具 p l u s e t 9 】 是在操作系 统层 实现
的,但 是该工 具只能检 测应用程序 中 的死 锁,并不 能 检测操作系统本身 的死锁. 本论文将使 用一种动态检测 死锁的方 法,可 以准 确 检测 出操作系统 中的死 锁. 本论文 提供 的方法对操 纵系 统性能 的影响小于 l %,而且不 需要修 改 内核源 码和任何 的应用程序. 本论 文安排如下:第 2部分介绍本文采用的死锁 检 测的算 法. 第3 部分介绍如何获得锁 的持有者.第 4
i f HOLDE R Ll S T n o t NULL s e a r c ht h el ck o h o l d e r sf r o r nHOL DER LI S T i f l ck o h o l d e r s a r e I ck o wa i t e r s
De a dl o c k De t e c t i o n i n Ope r a t i ng S y s t e m
Z H A NG Ha i . P e n g . L I Xi I ' 2
。 ( S c h o o l o f C o m p u t e r S c i e n c e a n d T e c h n o l o g y , Un i v e r s i t y o f S c i e n c e a n d T e c h n o l o y g o f C h i n a , H e f e i 2 3 0 0 2 7 , C h i n a ) ( S u z h o u I n s t i t u t e f o r Ad v nc a e d S ud t y , Un i v e r s i y t o f S c i e n c e a n d T e c h n o l o g y o f C h i n a , S u z h o u 2 1 5 1 2 3 , C h i n a )
相关文档
最新文档