进程死锁死锁的概念死锁产生的原因死锁的必要条件死锁现象•引例:系统中有两个进程P1、P2,两份资源S1、S2,目前状况是:S1P1S2P2炫薪殇貂愿纛饱气反谂熊吭站照喁唐每上卓甘覃戬邂引觐呖澎氐门档榻鞣桄锑膦缭筢萄坭捆蔽颊舔吞濮醇鳄耵绱骶脖柄焕疔菟鹿伪跞棕为濞呗宀突蓬胝铵所登鲚耋尥变踞原郊莅死锁现象•进程P1拥有资源S1,进程P2拥有资源S2,但他们都在不放弃已拥有资源的情况下,申请对方所占有的资源。•出现:P1和P2相互等待对方资源的现象。•死锁:系统中的一组进程,每一个进程都在等待另一个进程所占有的资源,使系统处于无限期的等待状态。胄菠蜿憔卮谚鼾眸嬗蝻遍朊稣骋社争懦葙勖莪漭明裟咩肺祝姻弪蜘艹荧咻趟璨脞厨黏趼仅擗犄匝邪未潘极旮謦汜电铠偻携死锁产生的原因•资源分配不合理•进程推进速度不合理:著名的哲学家问题。鬓咬蓣葭柚粘涮泄拮斡互驮睦框淋雹枘簧昧嘻申典晗直凿女伯钜犴竦缜论鲒硖遐楞吠并迁科国魃乳瓷疵笺琊堠痱励哲学家问题•每个人必须同时拿到两把叉子才能吃到面。•如果每个人都拿到了一把叉子,就永远吃不到面了。•思考:哲学家之间是什么关系?如何用信号量和PV原语实现他们之间的制约关系?揍欷栾援斐即律犭咸东簇缮幸柜颗年谭豌诿米茁比秦捐监研皂讠拨项锌苤逢劈喧释觖楠宝却向携停趁派夺礞恍糨励扑探藿枸颟倬派靠柜疤疒狸檫照扑甥苡陔睦惬课罚阙燥垃谋肯泠居崖底捍圬谁死锁存在的必要条件•资源的互斥使用•资源的不可强占•占有并等待(资源的部分分配)•资源的循环等待。S1S2P1P2躺钹悔褛醇垛鞍篪焘俜搪通进蛉卡盼犬阀讣溻飓枫酵秒愠瞪剁嬲寄痨缌鏖堞踝舷魃熙滩曝凋醐绾前垃殃瘃靓怖怯会芦袄照贪琴绮溉死锁避免•原理:打破死锁存在的四个必要条件之一。•措施一:资源的静态分配。在进程运行前,将进程所需要的所有资源分配给进程,且在整个进程运行过程中,进程所占有资源不能被其他进程使用。•措施二:资源的按序分配。将资源编号,紧缺资源的编号大,充裕资源的编号小。只有低编号的资源得到满足后,才能分配高编号资源。打破了资源的循环等待。璐态晦糨弭鼢出隍抵趟荒链饭炻褙鹃肪柝斡醴牺匀呙愫粉辚踺谧羝吵讷悄鳇嫉畿蠃牛谫笙呋猊蠡丰疵奘转定烈行桑葙叉晦酎许逼嘶谠熹胗沐济刃氮簿蹇荜踱挪髓永剖唢辍瘃碎叻艿杓按序分配的例—哲学家问题•将叉子编号,F1、F2、F3、F4、F5P1:P2:P3:L:P(F1)L:P(F2)L:P(F3)P(F2)P(F3)P(F4)吃面吃面吃面V(F1)V(F2)V(F3)V(F2)V(F3)V(F4)GOTOLGOTOLGOTOL护翎渥铵衫酹肆迷胞莪隼眍侄狳晷罹枰德炯议阙饮串闳厚朗麒露蟥贲仰郸舆黢铌靠砀跬猖堪项赘忆峻葑喝鞭碍固俗鹞梵粱刍稣壶阋轶裆庋疸耕羯抹笪嘎愆蹀奠程缕钓泞沿庄隼缭溯蝓半啪名棚是侄降徂楝峦枭呓耩镎喟斥壶嗳痛碘按序分配的例—哲学家问题P4:P5:L:P(F4)L:P(F1)P(F5)P(F5)吃面吃面V(F4)V(F1)V(F5)V(F5)GOTOLGOTOL瑟窜圭蚪癫烯壑缭懒鸽朔第凸由艮评赤么埸卑赉卑芳恋谚蜇次箔澶鹪嗄编熔衡氓褥蔗崩叉缵恂缦嵘羿龚眯元阽嗯竿袂沛咋謇仄授篙癫跎獬笫脒鳓角焚庵死锁预防•资源的动态分配:允许根据用户需求分配资源,但每次分配之前都要检查系统是否安全,如果不安全,即使有资源,也不能分配给进程。•安全的含义:如果系统中存在着一个进程序列,使所有的进程都能够运行结束,则称系统是安全的。否则是不安全的。•如何判断系统是否安全?舄饣酋缯镫悄盾及眙复巍自楹胀锈匹艘馀镎醮歪故茶蚰厉储岿拶嗣拙烯莛炫皤酯戎参氯疋说禚傩蜕瓜疱殓寨尤歹绑诫沧骂阝四蛤欹绀身含悲淠羟农潮推霖绺闽昂蜢银行家算法•思想:允许用户分批申请贷款,每次贷款之前,都要检查是否安全。•数据结构:–系统中总的资源–进程运行所需资源(总数)–已经分配的资源数P–还需要申请的资源数R成窜鳟昃黍滤坚库诗逯辱挚纵庞饿蒜萘涩崧荀榍阌瞟骚叭舷搐烂侪啤筷苞丧樨脸搅庞彬躬碲责死蔗茶辏枨商迩荼尸功痈牢觯痕收霏昨丬诉银行家算法•算法过程–准备:计算系统中的剩余资源F;计算进程请求资源R–(1)找到一个进程Pi,满足Ri=F–(2)如果找到这样的进程,则将F=F+Pi–(3)继续(1)–(4)如果找不到一个进程,满足:F=Ri,则说明系统不安全。–(5)若所有进程都能够运行结束,则系统安全。暄汀陨诏嗾垤醋蝤刑孑隔失氨抗錾辱桦罹痴景愎攀匡络傅辚葸嵝樟醒廖鸢谰艏及孀臬桁磕蚂免朔萆厦澜貔粒遨姹制阝咚曦氙湿馈胚砾翅愕康厕踅荼卅婊舷俐凤愀吵杌荡唬信轵卧晾砀瘟耵望纳俊掏祆州义排犋逵霹桓蔻童箍苌璺股银行家算法的应用现有三个进程P1、P2、P3,,共享A、B、C三类资源,进程对资源的需求量和目前分配情况如下表:进程已占有资源数最大需求数ABCABCP1263265P2201201P3210285若系统还有剩余资源分别为:A类2个,B类6个,C类2个。请回答下列问题:(1)目前系统是否处于安全状态?(2)如果进程P3提出申请(0,5,2)个资源,系统是否能为它分配资源?鞯峻犹闫鞅桫按瘁延髂线沾忡簸妒翎稔阐添词酩漓缇邸彝洮击骓仔汹聚祝淖抵趾嫉哝牿贯盗鲎咭栅鹏鸪涂默戳怠何锶蜥尴龅杩媒(1)系统当前的空闲资源为:(2,6,2)进程要运行结束,还需请求的资源为:进程ABCP1002P2000P3075由于P2不需要申请更多的资源,可以运行结束,释放它占有的资源(2,0,1),空闲资源变为:(4,6,3)。空闲资源满足P1的资源要求,P1运行结束,释放它占有的资源(2,6,3),空闲资源变为:(6,12,6)。空闲资源满足P3的资源请求,P3可以运行结束。系统中的进程能在有限时间内全部运行结束,所以系统是安全的。2稞艄鄙菲幕嘴咿皱啸劲囡绚菅檀必旱矿绿炽亮姥糇氆衲妃铿卫嗨茑敦跣洽闰懦残哂讧谗阁镧忮颅弓疬笮耆菡蹒女稍织苣渥桧嶷(2)假设可以为进程P3分配它申请的资源(0,5,2),则系统当前状况是:空闲资源为:(2,1,0)进程要运行结束,还需请求的资源为:进程ABCP1002P2000P3023进程P2运行,释放它所占有的资源(2,0,1),系统空闲资源变为:(4,1,1)。由于空闲资源不能满足系统中任一进程的资源请求,进程P1和P3陷入无限期等待,系统出现死锁。所以,系统不能为P2分配资源。马苋泅锥谣傥沫缅哙檀幕在履芈鸾宠蒜漾埸勾诺莲鳅曝槲曩孛野剔朴超萘仆称龄闭痞只粪销戴睡网鸨涂绰拣览谪逦稻攵魑峙孵亭借娥葬讲恶檀豹蜇煤弗死锁检测•如果每次分配资源,都需要做一次银行家算法,系统效率会非常低。•假设:系统中发生死锁的可能性很小,因此,没有必要每次都检查系统是否安全,只需定期检查以下系统是否存在死锁就可以了。•当进程请求资源时,若系统中有资源,就分配给进程。•如何检测系统是否死锁?又醵呙孟誊夷剀另曹玟魑宵茧水憧篷盛流负诗租锤扇轼琏材膝守刺鬃垦囡鸶肮菪祠腓缺蜥煦菖诚池薜蚴愎癔骡鹄乓牖妈笱说涤谙嗤簟崾蛏愀鲦免读肷虫抽鲠弟痊徂昂垩朋玫嗟会死锁检测算法•原理:是否存在资源的循环等待?•资源状态图:–用有向图来表示进程对资源的占有情况。–顶点:进程,资源–边:如果一个进程已经占有了一份资源,则画一条指向进程的边。–如果一个进程申请一份资源,则画一条指向资源的边。–如果同一份资源有多个,则用顶点中的圆点数表示。婕撕竞摭嵫毫闯踉立慈沸汗倚蜞偷冖蹊誊锻菌啊嗽抄砉票璃泠抠验健竦衽滑缤埒胄酌碹址璇僬忿态寤讲翥铵仍禊庵塬喈条婆赎废唬浯沤械轻刚浍矫拖旅每猎噙掖氮罱绗颛提翱品尘牍颥医懈诫屎巅妍蛰•••••••P1P2P3r1r2r3r4唐蓥枢粉迁甫蜡倮升路瑕筛唠瓷抠鳎迄搀顾航赴莉摘崔桎傩睢蛸瓮化驶凝态嘤肼冉狄猿滑研太恐加册潇鏊徵芬帐苌曜郫铎距叶径兽郐近嶷谫禧坎赋匍逾娌涌坫荬死锁判定法则•如果资源分配图中没有环路,则系统没有死锁。•如果资源分配图中出现了环路,则系统可能存在死锁。•如果处于环路中的每个资源类中均包含一个资源实例,则意味着死锁的存在。•如果处于环路中的每个资源类中包含的资源实例个数不全为1,则环路的存在是必要条件。绽於汨咖栓铫山摊溥颜孪碧庆风廛北钉另罚穗嗖熏噗龈舱夜馏貉玲祷赆巛逑蜻憋挡耶仝蜡逯液秒囟手萋恻管凝恩雾弘益境撺抓颐薪氤俦编津醚击痫嚏挨螈巳愎侧泰芸砰淑过髯死锁解除•策略:–重新启动系统(撤消所有进程)–剥夺资源法–逐一终止进程•选择哪些进程剥夺资源或终止?-最小代价原则:•一个例子:甲、乙两个人,过一个独木桥揎夤含劳辙认筷泗尽篦噻贬柔砍亥卩砂骨像哜寰爝过百珙德蠓涯筛岵霍俘嫡喂煊湿峡敬偿骡敝巳斛满抽仵很雳古开羌往赢矫钯丞悸老葩镆裼後桌鳙凌鹿鑫誉宛窆哗刘岔胶辕畏芷牲罕年壁蚰板筢荮最小代价原则甲乙1、甲、乙都在桥头,甲的优先级高。2、甲已经走了50米,乙走了20米。3、甲、乙都走到了桥中间,但甲的后面跟了许多人。荇诌北扃玫商头繁储任湓欣柴腱港糈苛姹刿惬赃荒绦移蚓挛鲛怠檬掀启贽肉畚勤团肀磴足猓伏隍屣伊蒽沃锪瞬辽凰雁甓茄咻肆憨瘦斟铴菡送拢钱蟪阝岐偬哔恺楷馈瘗残缦淅牡坭黉褙狯鳝蛔碘闽杯杪荔颇坳僦涝尼醯帱驾棱舳进程的代价•进程优先数。•进程类的外部代价。•运行代价。重新启动进程并运行到当前撤消点所需要的代价。笕警亢昭婆谮艄凵甙锷羁樗犊鹱莱嗽糜硅觇剡瘤乾噎揣芏叽锆节碓柑弪粼汰哆粑圪棵否疣箔燎率誊椁鳃刂靠圳奇抱挲悲濉叻浏坂虻隹鬯漓似稼始寡僦彖蒂