- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2.8死锁
2.8死锁问题回顾数据库系统中活锁与死锁活锁:可能无限等待事务T1请求封锁数据对象R后,事务T2也请求封锁R,于是T2等待,接着T3也请求封锁R,T1释放R上的锁,系统首先批准T3的请求,T2继续等待,同理,T4、T5等等后请求,系统先处理,T2有可能永远等下去。死锁:永远无限等待事务T1封锁了数据A,事务T2封锁了数据B。之后T1又申请封锁数据B,因T2已经封锁了B,于是T1等待T2释放B上的锁。接着T2又申请封锁A,因T1已封锁了A,T2也只能等待T1释放A上的锁。这样就出现了T1、T2相互等待的局面,这两个事务永远不能结束。死锁的定义死锁进程:两个或两个以上的进程在执行过程中,因争夺资源而造成的一中相互等待的现象,若无外力作用,他们都将无法推进下去。称此时系统处于死锁状态或系统产生了死锁,这些永远在相互等待的进程称为死锁进程。演示动画:/czxt1/showindex/449/7死锁的定义哲学家就餐问题简介:五个哲学家围坐在圆桌旁,他们的生活方式是交替地进行思考和进餐;圆桌上摆放着5把叉子和5个装有通心粉的盘子。规定第i号哲学家固定坐在第i把椅子上(i=0,1,2,3,4),且每个科学家必须两手分别拿起他旁边的两把叉子,才能吃通心粉;假定通心粉取之不尽死锁的定义哲学家就餐问题的启示:思考:P(S[i]);拿起左边的叉子;P(S[(i+1)mod5]);拿起右边的叉子;吃通心粉;放下左边的叉子;V(S[i]);放下右边的叉子;V(S[(i+1)mod5]);分析:如果五位哲学家因为饥饿同时拿起了左边的叉子,当他们申请拿右手叉子时,均因无叉子可拿而阻塞,且永远阻塞。因此陷入死锁状态死锁的定义解决办法: 思考: P(mutex); P(S[i]); 拿起左边的叉子; P(S[(i+1)mod5]); 拿起右边的叉子; 吃通心粉; 放下左边的叉子; V(S[i]); 放下右边的叉子; V(S[(i+1)mod5]); V(mutex);分析:限定至多四位哲学家可以同时去拿左边的叉子,这样能保证最终至少有一为哲学家可以拿到左右两边的叉子,进餐结束放下叉子,从而使其他哲学家能够进餐产生死锁的原因(1)竞争临界资源当系统中供多个进程共享的临界资源的数目不能满足诸多进程的需要时,会引起诸多进程对资源的竞争而产生死锁思考:竞争临界资源引发的死锁为什么不能在多道程序系统中解决?多道程序系统是在计算机内存中同时存放几道相互独立的程序,使它们在管理程序控制之下,相互穿插的运行。 该系统无法改变程序运行所需要的资源,因此还是会出现争夺临界资源的现象。(2)进程推进顺序不当进程在运行过程中,请求和释放资源的顺序不当,也同样会导致死锁的产生。产生死锁的必要条件1、互斥条件2、占有并请求条件3、不可剥夺条件4、循环等待条件只要这四个条件中的一个条件不成立,就不会发生死锁。死锁的预防死锁的预防是通过破坏产生死锁的必要条件之一,使系统中不发生死锁。1、静态资源分配法——破坏占有并请求条件每一个进程开始前,一次性申请其在整个运行过程中的全部资源。优点:简单安全易实现缺点:资源被严重浪费2、有序资源使用法——破坏循环等待条件资源编号,每个进程只能按编号的升序申请资源。优点:利用率比静态资源分配法有所提高。缺点:难以给出合适的变好,不便于系统增添新设备,不便于拥护编程,且仍有一定的资源浪费现象。死锁的避免1、安全状态某一时刻系统能按某种进程顺序来为每个进程分配其所需的资源,直至最大需求,使每个进程均可顺利完成,则称此时系统的状态为安全状态。这样的序列为安全序列。实质:序列中每个进程到运行完成还需要的资源量不超过系统当前剩余的资源量与所有在序列中排在它前面的进程当前所占有的资源量之和。若在某一时刻,系统中不存在一个安全序列,则称系统处于不安全状态注意:(1)安全状态可能不唯一(2)安全状态是非死锁状态,而不安全状态不一定是死锁状态死锁的避免2、银行家算法实质:设法保证系统动态分配资源后不进入不安全状态,以避免可能产生的死锁。即每当进程提出资源请求且系统的资源能够该满足请求时,系统将判断如果满足此次资源请求系统状态是否安全,如果安全则给该进程分配资源,否则不分配资源,申请资源的进程将阻塞。数据结构:available:可用资源向量max:最大需求矩阵need:需求矩阵allocation:分配矩阵request:请求向量死锁的避免算法描述:1)若requestineedi,则进程Pi出错2)若requestiavailable,则进程Pi阻塞3)系统试着把资源分配给进程Pi,并对相印数据结构做如下修改:available-requesti;allocationi+requesti;needi-requesti4)系统执行安全性检测子算法,以判断试分配后系统状态是否安
文档评论(0)