一、同类资源分配不当引起死锁
系统中有m个资源,被n个进程共享,每个进程都要求k个资源。
当m < n*k时,即:资源数<进程所要求的总数时,可能会引起死锁。(但是不一定!)
例如:m=5,n=3,k=3,
若系统采用的分配策略是:轮流地为每个进程分配,则第一轮系统先为每个进程分配一台,还剩下两台;第二轮系统再为两个进程各分配一台,此时,系统中已无可供分配的资源,使得各个进程都处于等待状态导致系统发生死锁。
【注意】:
当有 n 个进程、m 个资源、且每个进程所需要的资源数为k,
并且系统采用的分配策略是轮流地为每个进程分配资源时,(软考题目都是这个策略)判断是否会发生死锁的公式如下:
m >= n * (k-1) + 1
为真就不会发生死锁、为假就会发生死锁。
二、真题
真题1:
真题2:
真题3:
真题4:
真题5:
真题6:
真题7:
二、进程资源图
2-1、可化简的进程资源图
- 先申请资源,再分配资源;
- 先分配资源,再申请资源;
- 边分配,边申请。(×)
提问方式一:图中哪些进程是阻塞的,哪些进程是非阻塞的。
提问方式二:是否可以化简,是的话,化简顺序是什么?
如图,P1进程非阻塞,执行完成后,将释放资源。
可化简,则非死锁。
2-2、不可化简的进程资源图
不可以化简,是死锁的。
2-3、真题
真题1:
真题2:
真题3:
真题4:
三、死锁的处理
死锁的处理策略主要有4种:
- 鸵鸟策略(即不理睬策略)、
- 预防策略、
- 避免策略
- 检测与解除死锁。
3-1、死锁避免
死锁预防是设法破坏产生死锁的 4 个必要条件之一,严格防止死锁的产生。
死锁避免则不那么立格地限制产生死锁的必要条件。最著名的死锁避免算法是 Diikstra 提出的银行家算法,死锁避免算法需要很大的系统开销。
银行家算法对于进程发出的每一个系统可以满足的资源请求命令加以检测,如果发现分配资源后系统进入不安全状态,则不予分配;若分配资源后系统仍处于安全状态,则实施分配。
与死锁预防策略相比,它提高了资源的利用率,但检测分配资源后系统是否安全增加了系统开销。
所谓安全状态,是指系统能按某种顺序如< P1,P2,......,Pn >来为每个进程分配其所需资源,直到最大需求,使每个进程都可顺序完成。通常称< P1,P2,......,Pn >序列为安全序列。若系统不存在这样一个安全序列,则称系统处于不安全状态。
3-2、真题
真题1:
真题2: