死锁
产生死锁的根本原因:资源有限且操作不当。 死锁的四个必要条件 互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。 处理死锁的策略 1.忽略该问题。例如鸵鸟算法,该算法可以应用在极少发生死锁的的情况下。为什么叫鸵鸟算法呢,因为传说中鸵鸟看到危险就把头埋在地底下,可能鸵鸟觉得看不到危险也就没危险了吧。跟掩耳盗铃有点像。
解决死锁的一般方法 解决死锁的三种方法:死锁的预防、避免、检测与恢复。 死锁预防的基本思想和可行的解决办法 1. 死锁预防的基本思想:打破产生死锁的四个必要条件的一个或几个。 2. 预防死锁的策略:资源预先分配策略、资源有序分配策略。 1) 资源预先分配策略:打破占有且申请条件,进程在运行前一次性地向系统申请它所需要的全部资源,如果所序言的全部资源得不到满足,则不分配任何资源,此进程暂不运行。 2) 资源有序分配策略:打破循环等待条件,把资源事先分类编号,按序分配,使进程在申请、占用资源时不会形成环路。 什么是进程的安全序列,死锁与安全序列的关系 1. 安全序列的定义:所谓系统是安全的,是指系统中的所有进程能够按照某一种次序分配资源,并且依次地运行完毕,这种进程序列{P1,P2,…,Pn}就是安全序列。 2. 安全序列{P1,P2,…,Pn}是这样组成的:若对于每一个进程Pi(1≤i≤n),它需要的附加资源可以被系统中当前可用资源加上所有进程Pj(j<i)d当前占有资源之和所满足,则{P1,P2,…,Pn}为一个安全序列。 3. 安全序列与死锁的关系:虽然存在安全序列一定不会有死锁发生,但是系统进入不安全状态(四个死锁的必要条件同时发生)也未必会产生死锁,当然,产生死锁后,系统一定处于不安全状态。 死锁的避免与银行家算法 1. 避免死锁的方法:银行家算法。 2. 银行家算法的基本思想:分配资源之前,判断系统是否是安全的;若是,才分配。 死锁检测 1. 死锁的检测算法:是当进程进行资源请求时检查并发进程组是否构成资源的请求和占用环路。如果不存在这一环路,则系统中一定没有死锁。 2. 总之:如果资源分配图中不存在环路,则系统不存在死锁;反之如果资源分配图中存在环路,则系统可能存在死锁,也可能不存在死锁。 死锁的恢复 1. 死锁的恢复思想:一旦在死锁检测时发现死锁,就要消除死锁,使系统从死锁中恢复过来。 2. 死锁的恢复方法: 1) 系统重新启动 2) 撤消进程、剥夺资源 |