发布时间:2015-03-06所属分类:科技论文浏览:1241次
摘 要: 摘要:当一个进程申请资源得不到满足时,可从另一个拥有这种资源的进程那里去抢夺,然后继续运行。这种策略可以预防死锁的发生是由于其破坏了非抢夺式分配的条件,从而系统中的所有进程必然不会发生死锁。 关键词:计算机系统,预防技术,处理器, 计算机论文发
摘要:当一个进程申请资源得不到满足时,可从另一个拥有这种资源的进程那里去抢夺,然后继续运行。这种策略可以预防死锁的发生是由于其破坏了“非抢夺式分配”的条件,从而系统中的所有进程必然不会发生死锁。
关键词:计算机系统,预防技术,处理器,计算机论文发表
预防死锁发生的有效方法,但是它们也有不足之处。例如,静态分配策略和按序分配资源策略都有可能会出现进程在占有了资源后在相当一段时间里并不使用的情况,从而导致了系统资源利用率的下降;剥夺式分配资源策略在当前却只适合于应用在对处理器和主存资源的分配,适用范围较小。
在死锁预防的策略中,通常的做法是防止死锁发生的四个条件中的任意一个发生。但是死锁预防的缺点是降低了资源利用率和系统吞吐率。解决死锁的另一个方法是死锁避免,在死锁避免中,需要知道如何请求资源,它动态检查资源分布状态,以保证没有循环等待发生。实际上,死锁避免算法的一个潜在问题是需要及时地收集到一致的全局状态信息,一般来说,在分布系统中,很少使用死锁避免,因为它对请求进程和可用资源的数量这些信息的要求太严格了,而且对系统进行安全性状态的检查也会涉及到大量的计算,这些都会引起巨大的开销。当死锁不可避免地发生的时候,采取相应的死锁检测算法进行检测与处理。
1 分布式计算系统中的死锁
分布式计算机系统是一种具有多处理器并且各个处理器之间通过互连网络构建成一个具有整体功能的计算机系统。系统工作的原理是采用分布式计算结构,即将传统计算机系统内中央处理器处理的任务分散给相应的各个处理器,实现不同功能的各个处理器可以相互协调合作,达到共享系统中外设与软件的效果。系统具有的优点是加快了处理的速度,简化了主机的逻辑结构,特别适合于应用在工业生产线自动控制和企事业单位的管理,同时具有成本低和易于维护的特点,并且成为计算机应用领域发展中的一个重要方向。但是,在分布式环境下,由于通讯延迟的不确定性、地域的分布性以及资源和数据的高度共享性等影响因素的存在,使得死锁预防和检测变得极为困难。
1.1 死锁的定义
在分布式计算系统中,有两个以上的进程在并发执行,每个进程都在等待被其它的进程所占用的系统资源(每个进程都在等待其它的进程释放所持有的锁)而不能继续运行,即导致系统中任何一个进程都无法运行下去(死循环),这就产生了死锁[1]。
1.2 死锁发生的条件
Peterson[2]指出了发生死锁的必要条件,确切地说,当且仅当以下四个条件同时成立时,死锁才会发生。
1) 互斥。同一个资源在同一时刻最多只能被一个进程占用。
2) 占有并等待。必然有一个进程至少占用了系统中的一个资源,同时在等待获取被其他进程占用的资源。
3) 不可剥夺。一个进程不能剥夺被其他进程占用的资源。
4) 循环等待。在等待图中有一个循环。
其中条件4) 是关于一组进程的特定动态行为的陈述[3]。
2 分布式计算系统中死锁的预防
2.1 一般方法
1) 静态分配资源
这种方法是要求进程必须在开始执行前就申请它所需要的全部资源,并且只有当系统能满足进程的资源申请要求并把资源分配给进程之后,该进程才开始执行。这种策略可以预防死锁的发生是由于其破坏了“占有且等待资源”和“循环等待资源”的条件,从而系统中的所有进程必然不会发生死锁。
2) 按序分配资源
这种方法是指在系统中的每一个资源都会给出一个编号。分配资源的时候作了以下规定:任何进程在申请两个以上资源时,总是按照编号的大小顺序申请。这种策略可以预防死锁的发生是由于其破坏了“循环等待资源”的条件,从而系统中的所有进程必然不会发生死锁。
2.2 基于时间戳的方法
这里主要介绍两种基于时间戳的死锁预防方法。
1) “伤害-等待”的方法
该方法基于剥夺方法。其主要思想是:当进程Pi请求的系统资源正被进程Pj占有时,只有当进程Pi比Pj年轻(即它们的时间戳关系是Li>Lj)时,进程Pi才能处于等待状态;否则进程Pj会被取消(即Pj被Pi伤害)并带有同一时间戳重新启动,而Pi则可以获得锁后继续执行。该方法是以进程启动的时间戳来快速判断进程的优先级,并以此决定进程是应该终止、继续执行还是等待。
2) “等待-死亡”的方法
该方法基于非剥夺方法。其主要思想是:当进程Pi请求的系统资源被进程Pj占有时,只有当进程Pi比Pj老(即它们的时间戳关系是Li 3 分布式计算系统中死锁的检测
基于事先预防死锁的方法基本上都会增加系统的开销,降低资源的利用率,因此在实践中并不太适用。在分布式系统中,为了降低系统开销,在分配资源时会不加限制,只要系统中有剩余的资源,总是把资源分配给申请者。显然,这样的结果是可能会出现死锁。那么,为了使系统能够正常工作,在系统中会采用定时运行一个“死锁检测”程序的方法,当检测到死锁时该程序再将会设法将其排除。在分布式系统中的死锁检测法不会造成很多不必要的进程流产,但是也会增加了系统的额外开销和复杂度。
在分布式的死锁检测算法[4]中,每个机器都保持它们的独立性,一个局部的失效不会对算法产生致命的影响。通常可以将其划分成两种:第一种是每个机器都有一个全局等待图的复制,即每个机器都有一个关于分布式系统的全局视图;第二种是把系统的全局等待图分解后分布在不同的机器上。
Knapp提出把分布式的死锁检测算法分成如下四类[5]。
1) 路径推动算法。该算法的基本思想是:首先在每个机器上都构建形式简单的全局等待图,当进行死锁检测时,各个机器就将全局等待图的复制发送给一定数量的邻近节点,若局部复制有更新则会被传播下去。重复以上这一过程,直到某个节点获得了足够的信息并能够构造出一个全局等待图并可以判断出系统是否存在死锁的结论。
2) 边跟踪算法。该算法的基本思想是:通过沿分布式网络结构图的边发送一种叫探测器的特殊信息来检测是否存在回路。当一个发起者得到一个与自己发送的探测器相匹配的探测器时,它就可以知道它是在该结构图中的一个回路里。
3) 扩散计算。该算法的基本思想是:若怀疑系统发生死锁的时候,进程管理器将会通过向依赖于它的进程发送查询启动一个扩散进程,使得系统不会生成全局等待图。当处于发送查询信息时,扩散计算就会增加;当接收回答之后,扩散计算就会减少。最后由所得信息,发起者会检测到死锁的发生。
4) 全局状态检测。该算法的基本思想是:通过建立一个统一的全局状态但不需要暂停当前的计算来获得一个一致的全局等待图。
濠电姷鏁告慨鐑藉极閸涘﹥鍙忓ù鍏兼綑閸ㄥ倿鏌i悢宄扮盎闁兼澘娼″鍫曞醇濞戞ê顬夊┑鐐叉噽婵灚绌辨繝鍥ч柛灞剧煯婢规洟姊洪崨濠庢疁濞存粌鐖煎濠氬Ω閳哄倸浜為梺绋挎湰缁嬫垿顢旈敓锟�:闂傚倸鍊搁崐鎼佸磹妞嬪海鐭嗗〒姘e亾鐎规洦鍨堕獮鎰償閵忥紕褰块梺鐟板悑閻n亪宕瑰ú顏勭煑闊洦绋掗悡鐔兼煏韫囧﹥鍤夌憸鐗堝笒缁€鍕煟濡偐甯涢柣鎾存礋閺岀喐瀵肩€涙ɑ閿梺鍝勵儑閸犳牠寮诲☉姘e亾閿濆骸浜炲褜鍓熼弻鏇㈠炊瑜嶉顓犫偓娈垮櫘閸o絽鐣烽崼鏇椻偓鏍敊閼恒儱纾冲┑顔硷工椤嘲鐣烽悢纰辨晝闁靛洦濡搁崶銊у幐闁诲繒鍋犻褔鍩€椤掍胶澧辩紓鍌涙崌閹崇偤濡烽妷褏鐛┑鐘灱濞夋盯寮甸鍕柧濠靛倸鎲¢埛鎺懨归敐鍫燁仩閻㈩垱鐩弻鐔哄枈閸楃偘绨藉┑鈥冲级閸旀瑥顕i幘顔藉亹闁归鐒︾紞妤呮⒒娴e憡鎯堥柛鐕佸亰閹囧幢濞嗘垳绗夐梺鎸庣箓濡稓绮绘ィ鍐╃厱闁斥晛鍠氬▓娆撴倵濮橆厽绶查棁澶嬬節婵犲倸顏╅柛鏂诲€濆Λ浣瑰緞閹邦厾鍙嗗┑鐘绘涧濡瑩骞栭幇鐗堢厱闁哄倹顑欓崕鎰庨崶褝韬い銏$☉椤繈骞戦幇顒佸創闂傚倷绀侀幖顐︽儗婢跺本宕叉繝闈涙閺嗭附銇勮箛鎾村櫤濠殿垱鎸抽弻娑樷槈濮楀牆濮涙繛瀛樼矋閻楃姴顫忕紒妯肩懝闁逞屽墴閸┾偓妞ゆ帒鍊告禒婊堟煠濞茶鐏︾€规洏鍨藉畷銊︾節娴h櫣鐣鹃梻浣虹帛閸旀牕岣垮▎鎴犵當鐟滃繒妲愰幒妤婃晩閻熸瑥瀚悵鏇㈡⒑闂堟稓澧崇紓宥勭閻e嘲顫滈埀顒佷繆閹间焦鏅滅紓浣癸供濡劑姊婚崒姘偓椋庢濮橆兗缂氶柤濮愬€愰崑鎾绘濞戞氨鍔悗瑙勬磸閸ㄦ椽濡堕敐澶婄闁靛ě灞芥櫍闂傚倷鑳舵灙缂佺粯锚铻為悹鎭掑妽瀹曟煡鏌涢埄鍏︽粍绂嶅⿰鍫熺厵闂侇叏绠戦弸娑㈡煛鐎n亪顎楅棁澶嬬節婵犲倸鏆欓柍閿嬫⒒缁辨帗娼忛妸锕€闉嶉梺鐟板槻閹冲繘藝閻楀牊鍎熸俊顖滅帛濞呭啴姊婚崒娆戝妽闁诡喖鐖煎畷婵嗩吋閸滀焦瀵岄梺鑺ッˇ浠嬪吹閺囥垺鐓欓柟顖涙緲琚氶梺绋款儏鐎氫即寮婚敐澶婄闁惧浚鍋呭畷鍐差渻閵堝棙鐓ユい锔诲灦閳ユ棃宕橀鍢壯囨煕閳╁喛渚涙慨濠傛健濮婅櫣绮欏▎鎯у壉闂佸憡姊瑰ú鐔兼晲閻愭祴鏀介悗锝庘偓顓涙櫊閺屽秹宕崟顐熷亾婵犳艾鐭楅柛鈩冦仜閺€浠嬫煟閹邦厽缍戦柣蹇ョ畱閻f繈鏁愰崨顔间淮闂佽鍠氶崑銈夊蓟閵娧€鍋撻敐鍐ㄥ缂併劌顭峰娲传閸曨剙顦╁銈冨妼濡鍩㈠鍡欑瘈闁告洏鍔屾禍鐐箾閸繄浠㈤柡瀣ㄥ€曢…鑳槼妞ゃ劌锕悰顕€宕卞☉妯肩潉闂佸壊鍋呯换宥呩缚婵犲洦鈷戦柡鍌樺劜濞呭懘鏌涢悤浣镐喊妞ゃ垺姊圭€佃偐鈧稒菤閹风粯绻涙潏鍓у埌闁硅绻濋獮鍡涘醇閵夛妇鍘辨繝鐢靛Т婵亶宕烽鐐茬柧闂傚倷绶氬ḿ褑鍣归梺绋挎湰缁本鏅舵ィ鍐┾拻濞达綀娅g敮娑㈡煕閺冣偓濞叉牞鐏掓繝鐢靛Т濞层倝鎮块鈧弻娑樷槈濡吋鎲奸梺缁樻尵婵兘鎯€椤忓牆绾ч柛顭戝枦閸╃偞绻濋埛鈧崒姘ギ闂佸搫鐭夌紞浣逛繆閻戣棄唯闁挎洍鍋撴繛鍫燁殜濮婃椽宕崟顒佹嫳缂備礁顑嗛崹鍧楀春閵忊剝鍎熼柕濞垮劤閻も偓婵$偑鍊栫敮鎺楀磹妞嬪孩顫曟慨妞诲亾婵﹦绮粭鐔煎焵椤掆偓宀h儻顦查摶鐐翠繆閵堝懏鍣归柣銈庡枛闇夐柛蹇撳悑缂嶆垹绱掗悩闈涙灈闁诡喗顨呴埥澶娾枍閾忣偄鐏﹂柛鎺戯功閳ь剟娼ч幗婊呭婵傚憡鍊甸柨婵嗛楠炴鐥鈩冪【闂囧绻濇繝鍌氼伀濠⒀冪仛閹便劍绻濋崘鈹夸虎濡ょ姷鍋為崝鏍箚閺冨牊鏅查柛灞句緱濞兼棃姊婚崒娆戭槮闁圭⒈鍋婇幃褍饪伴崼婵堫槶濠殿喗蓱婢у酣宕戦幘缁橆棃婵炴垶鐗曟禒顕€鎮楃憴鍕闁挎洏鍨介妴浣糕枎閹炬潙娈愰梺鍐叉惈閸燁偊鎮欐繝鍌楁斀闁绘ê鐏氶弳鈺佲攽椤旂虎妫庡褎绻堝铏圭矙濞嗘儳鍓遍梺鍦规晶钘壩i幇鏉跨闁归绀侀幃鎴︽⒑缁洖澧查柨鏇楁櫅铻為柛鎰靛枟閳锋垹鐥鐐村櫤闁绘繍浜弻鐔兼偡閻楀牆鏋犻悗娈垮櫘閸嬪﹪鐛Ο鑲╃<婵☆垳绮鐔兼⒒娴h姤纭堕柛锝忕畵楠炲繘鏁撻敓锟�.闂傚倸鍊搁崐鎼佸磹妞嬪海鐭嗗〒姘e亾鐎规洦鍨跺畷绋课旀担绯曞亾閸洘鐓曟い鎰Т閸旀岸鏌i幒鎴犱粵闁靛洤瀚伴獮鎺戭吋閸ヨ埖袦濠电姭鎷冪仦鐣屼画缂備胶绮粙鎾寸閿曞倸纾兼慨姗堢到娴滅偓绻濋棃娑卞剰闁藉啰鍠栭弻銊モ槈濡警浠遍梺绋款儐閹瑰洭寮幇顓熷劅闁炽儴灏欓弫鏍⒒娴h銇熼柛妯恒偢椤㈡牗寰勯幇顒冩憰濠电偞鍨堕崺鍐磻閹剧粯鏅查幖瀛樼箘閺佹牠鏌℃担鍝ュⅵ闁诡喗顨呴埢鎾诲垂椤旂晫浜為梻浣告啞椤ㄥ棙绻涙繝鍥ュù锝囩《濡插牊淇婇鐐存暠闁诲骸顭峰娲偡闁箑娈舵繝娈垮櫘閸欏啫顕g粙搴撴瀻闁瑰墽琛ラ幏缁樼箾鏉堝墽鎮奸弸顏堟煙椤旇棄鐏︾紒缁樼箞婵偓闁宠棄鎳撻埀顒佸椤ㄣ儵鎮欑拠褍浼愬銈嗘尭閵堢ǹ鐣烽崼鏇炵厸闁告劦浜濆▓浠嬫⒒閸屾瑧顦﹂柟纰卞亞缁棃寮婚妷銉ь槷闁瑰吋鐣崝宀勬偂濠靛鐓涢柛鎰╁妼閳ь剛鏁诲畷鎴﹀箻閼姐倕绁﹂梺鍓茬厛閸犳牗鎱ㄦ惔鈾€鏀介柍钘夋娴滄繃銇勯妸銉伐闁伙絿鍏樻慨鈧柕鍫濇噽椤斿﹤鈹戞幊閸婃捇鎳楅崼鏇炲偍闁归棿鐒﹂埛鎴︽煕閹炬潙绲诲ù婊€绮欓弻娑氣偓锝庝簻椤忣亪鏌¢崨顓犲煟妞ゃ垺宀搁崺鈧い鎺嗗亾妞ゎ偄绻橀幖鍦喆閸曨偅鐎梻浣瑰缁诲倸螞濞嗘挻鍋熸慨妯垮煐閸婄敻鎮峰▎蹇擃仾缂佸矁娉曠槐鎾愁吋閸曨収妲銈嗘穿缂嶄礁鐣峰⿰鍕闁荤喐澹嗛敍蹇涙⒒娓氣偓濞佳囥偑閸偂绻嗛柛銉㈡櫇閻捇鏌涢幘妤€鎳愰敍婵嬫⒑缁嬫寧婀伴柣鐔村姂椤㈡瑦寰勯幇顓犲幈闁诲函缍嗛崑鍛暦瀹€鍕厸鐎光偓鐎n剛袦濡ょ姷鍋涢澶愬箖濞嗘挸骞㈡俊顖濇娴煎矂姊虹拠鈥虫灍妞ゃ劌锕妴浣割潩鐠鸿櫣鍔﹀銈嗗笒鐎氼剟鎷戦悢鍏肩叆婵犻潧妫欐刊鍏肩箾鐏忔牗娅婇柡宀嬬秮楠炴﹢宕樺顔煎Ψ闂備浇顕х换鎰涘▎鎴炲床婵炴垯鍨洪弲鏌ユ煕濞戝崬鏋熼柟顔界懇濮婃椽骞愭惔銏狀槱婵炲瓨绮犳禍顏堝箖娴兼惌鏁婇柣锝呯灱閹虫繈姊洪柅鐐茶嫰婢у鈧鍣崑濠囩嵁濡偐纾兼俊顖滅帛椤忕喖姊绘担鑺ョ《闁革綇绠撻獮蹇涙晸閿燂拷,闂傚倸鍊搁崐鎼佸磹妞嬪海鐭嗗〒姘e亾妤犵偛顦甸弫鎾绘偐閸愯弓鐢绘俊鐐€栭悧婊堝磻濞戙垹鍨傞柛宀€鍋為悡鏇熴亜椤撶喎鐏ュù婊呭仦閵囧嫰鍩¢崘銊ュ箣闂佸搫鏈惄顖炪€侀弴銏″亹闁肩⒈鍏涢幃锝夋⒑鐠囨煡顎楅柣蹇斿哺閹繝鏁撻悩鑼舵憰闂侀潧艌閺呮粓宕戦崱娑欑厱閻忕偛澧介埥澶嬨亜韫囥儲瀚�闂傚倸鍊搁崐宄懊归崶顒夋晪鐟滃繘鍩€椤掍胶鈻撻柡鍛Т閻e嘲螣閼姐倗鐦堝┑顔斤供閸樻悂骞愰崘顔解拺闁告稑锕ユ径鍕煕鐎n偅宕岄柟铏崌瀹曠ǹ螖娴e搫寮伴梻濠庡亜濞村嫮寰婇懞銉ь洸闁哄稁鐏愰悷鎵冲牚闁告洦鍘鹃悡鈧梺鍓х帛閻楃娀寮婚妸銉㈡斀闁糕剝锚濞咃綁姊洪崫鍕棤闁稿鍊濆濠氬Ω閵夈垺顫嶉梺鎯ф禋閸嬪嫰顢旈敓锟�濠电姷鏁告慨鐑藉极閹间礁纾绘繛鎴欏灪閸嬨倝鏌曟繛褍鍟悘濠囨倵閸忓浜鹃梺鍛婃处閸撴瑦绂嶉柆宥嗏拺闁告稑锕g欢閬嶆煕閻樺啿鍝洪柕鍡楁嚇瀵濡烽敂鎯у箥闂備胶绮崹鍫曟晝閳轰讲鏋旈柡鍐ㄥ€荤壕濂告煃瑜滈崜鐔风暦閸楃偐妲堟繛鍡樺灥楠炴绻濈喊妯活潑闁搞劎鏁诲畷鎴﹀箛椤旇姤娈板┑鐐村灟閸ㄦ椽鎮¢悢鍝ョ瘈闁割煈鍋呯亸浼存倵濮樼偓瀚�.
SCISSCIAHCI