织梦 网站教程,空间转移 wordpress,建设银行网站怎样查询贷款信息查询,特别好的企业网站程序死锁的概念以及产生死锁的原因
一组进程中#xff0c;每个进程都无限等待被该组进程中另一进程所占有的资源#xff0c;因而永远无法得到的资源#xff0c;这种现象称为进程死锁#xff0c;这一组进程就称为死锁进程,如果死锁发生#xff0c;会浪费大量系统资源#xff…死锁的概念以及产生死锁的原因
一组进程中每个进程都无限等待被该组进程中另一进程所占有的资源因而永远无法得到的资源这种现象称为进程死锁这一组进程就称为死锁进程,如果死锁发生会浪费大量系统资源甚至导致系统崩溃。 死锁产生的必要条件
产生死锁必须同时满足以下四个条件只要其中任一条件不成立死锁就不会发生。
互斥条件进程要求对所分配的资源如打印机进行排他性控制即在一段时间内某 资源仅为一个进程所占有。此时若有其他进程请求该资源则请求进程只能等待。不剥夺条件进程所获得的资源在未使用完毕之前不能被其他进程强行夺走即只能 由获得该资源的进程自己来释放只能是主动释放)。请求和保持条件进程已经保持了至少一个资源但又提出了新的资源请求而该资源 已被其他进程占有此时请求进程被阻塞但对自己已获得的资源保持不放。循环等待条件存在一种进程资源的循环等待链链中每一个进程已获得的资源同时被 链中下一个进程所请求 解决死锁的方法 死锁预防和死锁避免
死锁预防
防止死锁的发生只需破坏死锁产生的四个必要条件之一即可。
1) 破坏互斥条件
如果允许系统资源都能共享使用则系统不会进入死锁状态。但有些资源根本不能同时访问如打印机等临界资源只能互斥使用。所以破坏互斥条件而预防死锁的方法不太可行而且在有的场合应该保护这种互斥性。
2) 破坏不剥夺条件
当一个已保持了某些不可剥夺资源的进程请求新的资源而得不到满足时它必须释放已经保持的所有资源待以后需要时再重新申请。这意味着一个进程已占有的资源会被暂时释放或者说是被剥夺了或从而破坏了不可剥夺条件。
该策略实现起来比较复杂释放已获得的资源可能造成前一阶段工作的失效反复地申请和释放资源会增加系统开销降低系统吞吐量。这种方法常用于状态易于保存和恢复的资源如CPU的寄存器及内存资源一般不能用于打印机之类的资源。
3) 破坏请求和保持条件
釆用预先静态分配方法即进程在运行前一次申请完它所需要的全部资源在它的资源未满足前不把它投入运行。一旦投入运行后这些资源就一直归它所有也不再提出其他资源请求这样就可以保证系统不会发生死锁。
这种方式实现简单但缺点也显而易见系统资源被严重浪费其中有些资源可能仅在运行初期或运行快结束时才使用甚至根本不使用。而且还会导致“饥饿”现象当由于个别资源长期被其他进程占用时将致使等待该资源的进程迟迟不能开始运行。
4) 破坏循环等待条件
为了破坏循环等待条件可釆用顺序资源分配法。首先给系统中的资源编号规定每个进程必须按编号递增的顺序请求资源同类资源一次申请完。也就是说只要进程提出申请分配资源Ri则该进程在以后的资源申请中只能申请编号大于Ri的资源。
这种方法存在的问题是编号必须相对稳定这就限制了新类型设备的增加尽管在为资源编号时已考虑到大多数作业实际使用这些资源的顺序但也经常会发生作业使甩资源的顺序与系统规定顺序不同的情况造成资源的浪费此外这种按规定次序申请资源的方法也必然会给用户的编程带来麻烦。
死锁避免
避免死锁同样是属于事先预防的策略但并不是事先釆取某种限制措施破坏死锁的必要条件而是在资源动态分配过程中防止系统进入不安全状态以避免发生死锁。这种方法所施加的限制条件较弱可以获得较好的系统性能。
1. 系统安全状态
避免死锁的方法中允许进程动态地申请资源但系统在进行资源分配之前应先计算此次资源分配的安全性。若此次分配不会导致系统进入不安全状态则将资源分配给进程 否则让进程等待。
所谓安全状态是指系统能按某种进程推进顺序( P1, P2, …, Pn)为每个进程Pi分配其所需资源直至满足每个进程对资源的最大需求使每个进程都可顺序地完成。此时称 P1, P2, …, Pn 为安全序列。如果系统无法找到一个安全序列则称系统处于不安全状态。
假设系统中有三个进程P1、P2和P3,共有12 台磁带机。进程P1总共需要10台磁带机P2和P3 分别需要4台和9台。假设在T0时刻进程P1、P2 和P3已分别获得5合、2台和2台尚有3台未分配见表2-15。 则在T0时刻是安全的因为存在一个安全序列P2、Pl、P3即只要系统按此进程序列分配资源则每个进程都能顺利完成。若在T0时刻后系统分配1台磁带机给P3则此时系统便进入不安全状态因为此时已无法再找到一个安全序列。
并非所有的不安全状态都是死锁状态但当系统进入不安全状态后便可能进入死锁状态反之只要系统处于安全状态系统便可以避免进入死锁状态。
2. 银行家算法
银行家算法是最著名的死锁避免算法。它提出的思想是把操作系统看做是银行家操作系统管理的资源相当于银行家管理的资金进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源当进程首次申请资源时要测试该进程对资源的最大需求量如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源否则就推迟分配。当进程在执行中继续申请资源时先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量若能满足则按当前的申请量分配资源否则也要推迟分配。 死锁的检测和解除