- 死锁:指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。
- 活锁:指的是任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试、失败、尝试、失败。
- 活锁和死锁的区别:处于活锁的实体是在不断的改变状态,所谓的“活”,而处于死锁的实体表现为等待;活锁有可能自行解开,死锁则不能。
- 死锁产生的原因:竞争不可抢占资源引起死锁、竞争可消耗资源引起死锁、进程推进顺序不当引起死锁
- 产生死锁的必要条件:
- 互斥条件:在一段时间内,某资源只能被一个进程占用。
- 请求和保持条件:进程每次申请它所需要的一部分资源,在申请新的资源的同时,继续占用已分配的资源。
- 不可抢占条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行剥夺,而只能由获得该资源的进程自愿释放。
- 循环等待(环路等待)条件:在发生死锁时,必然存在一个进程等待队列{P1,P2,....,Pn},其中P1等待P2占有的资源,P2等待P3占有的资源,····,Pn等待P1占有的资源,形成一个进程等待的环路。环路中每一个进程已占有的资源同时被另一个进程所申请,即前一个进程占有后一个进程所请求的资源。
- 死锁预防:具体就是破坏产生死锁的4个必要条件之一:
- 破坏“互斥”条件:申请的资源不被一个进程所独占。
- 破坏“不可剥夺”条件:若一个进程申请某些资源,首先系统应检查这些资源是否可用,如果可用,就分配给该进程。
- 破坏“请求和保持”条件:每个进程在开始执行前就申请它所需要的全部资源,或者当系统能满足进程的资源申请要求且把资源一次性分配给该进程后,该进程才能开始执行。
- 破坏“循环等待”条件:采用资源有序分配策略,将系统中所有资源顺序编号,按照编号顺序进行,否则系统不予分配资源。(“资源有序分配法”)
- 死锁检测与恢复:死锁检测不须事先采取任何限制性措施,也不必检查系统是否已经进入不安全区,此方法允许系统在运行过程中发生死锁。但可通过系统所设置的检测机构,及时地检测出死锁的发生,并精确地确定与死锁有关的进程和资源。当检测到系统中已发生死锁时,须将进程从死锁状态中解脱出来。常用的实施方法是撤销或挂起些进程,以便回收一些资源,再将这些资源分配给已处于阳塞状态的进程,使之转为就绪状态,以继续运行。可以定时为进程设置还原点,若运行受阻则退回还原点。
- 死锁避免:使用银行家算法
- 解除死锁的方法:剥夺某些进程所占有的资源、撤消某些进程、重新启动系统。
- 为解除死锁就要剥夺资源,考虑使用最经济合理的算法,必须考虑的因素有:
- 进程的优先级
- 进程已经运行了多长时间,该进程完成其任务还需要多长时间
- 该进程使用的资源种类和数量是多少,这些资源能简单地被剥夺吗
- 为完成其任务进程还需要多少资源
- 有多少进程要被撤销
- 该进程被重新启动运行的次数是多少
- 死锁定理:当且仅当当前状态的资源分配图是不可完全化简的
- 不安全状态一定导致死锁,但不安全状态不一定是死锁状态。即,系统若处于不安全状态则可能发生死锁,安全状态一定不会死锁。
- 哲学家进餐问题预防死锁的办法:
- 仅当某哲学家左右两边的筷子都可用时,才允许他取筷子
- 最多允许4个哲学家可以同时申请进餐
- 奇数号的哲学家先取左边的筷子,偶数的则先取右边的筷子
- 给其中某一个哲学家增配1只筷子
- 为每位哲学家的左右两只筷子各设置一个信号量,哲学家同时对两个信号量执行P、V操作
- 哲学家进餐问题恢复死锁的办法:
- 某一位哲学家主动放下右手的筷子
- 某哲学家暴力夺取邻近哲学家的筷子
- 进程饥饿:指当等待时间给进程推进和响应带来明显影响。当饥饿到一定程度的进程在等待到即使完成也无实际意义的时候称为饥饿死亡。而进程的优先级决定了进程进入运行状态的先后。
- 对于系统中的独占设备,为预防出现死锁,应采用的最佳分配策略是:静态分配,分配时加锁
- 计算安全序列:(很重要)

其余章节进我主页进行查看