- 【死锁】:指两个或两个以上进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都无法推进下去
- 进程在使用资源之前必须申请,使用之后必须释放
- 如果所申请的资源正在被使用,则系统将进程推入该资源的等待队列
- 死锁的必要条件:
1、【互斥】:至少有一个资源必须处于非共享模式,即一次只有一个进程使用;
2、【占有并等待】:一个进程必须占有至少一个资源,并等待另一个资源,而该资源为其他进程所占有
3、【非抢占】:资源不能被抢占,即资源只能在进程完成任务后自动释放
4、【循环等待】:有一组进程{P0,P1,~,Pn},P0等待的资源被P1占有, P1等待的资源被P2占有,~,Pn等待的资源被P0占有;
必须在以上4个条件同时满足才会出现死锁 - 【资源分配图】:图中用圆形表示进程,矩形表示资源,用边必须资源的分配情况或者是进程申请资源的方向;
如果分配图没有缓,那么系统就没有进程死锁; 如果有环,就有可能存在死锁,不一定有! - 处理死锁问题
1、可使用协议以预防或避免死锁,确保系统不会进入死锁状态
2、可允许系统进入死锁状态,然后检测它,并加以恢复
3、可忽视这个问题,认为死锁不可能在系统内发生 - 只要确保至少一个必要条件不成立,就能预防死锁的发生
1、互斥:一般不能通过否定互斥来预防死锁
2、占有并等待:在一个进程申请其他资源之前,必须释放其现分配的所有资源
3、非抢占:当一个进程处于等待时,如果其他进程申请其拥有的资源,那么该进程的资源可以被抢占; 一个进程要重新执行,她必须分配到其所申请的资源,并恢复其在等待时被抢占的资源
4、循环等待:对所有的资源类型进行完全排序,且要求每个进程必须按照递增的顺序来申请资源 - 【死锁避免】:根据进程可能申请的每种资源类型实例的最大需求的事先信息,构造一个算法以确定系统绝不会进入死锁状态; 死锁避免算法动态地检测资源分配状态以确保循环等待条件不可能成立
- 【安全状态】:如果系统能按某个顺序为每个进程分配资源并能避免死锁。那么系统状态是安全的
- 【安全序列】:进程顺序<P1,P2,~,Pn>,如果对于每个Pi, Pi仍然可以申请的资源数小于当前可用资源加上所有进程Pj(j < i)所占有的资源,那么这一顺序称为安全序列; 如果存在安全序列,则系统是处于安全状态
- 【资源分配图算法】:在图中设三种边,“需求边”、“分配边”、“申请边”(只有当每种资源只有一个实例的时候适合)
需求边:表示进程P可能在将来某个时候申请资源R,但是用虚线表示
申请边:当进程P申请资源R时,需求边P->R 变成了申请边
分配边:只有在将申请边P->R变成分配边R->P而不会导致资源分配图形成环时,才允许申请;
当进程释放资源时,分配边变为需求边 - 【银行家算法】:当新进程进入系统时,它必须说明其可能需要的每种类型实例的最大数量; 当用户申请一组资源时,系统必须确定这些资源的分配是使系统仍然为安全状态的话就可以分配,否则进程必须等待;
- 【等待图】:是资源分配图的变种,删除所有资源类型节点,合并适当边;(仅适合于资源实例仅有一个)
更确切的说是等待图中的有PI 到 PJ的边意味着进程PI在等待进程PJ释放一个PI所需要的资源;
当且仅当等待图中有一个环,系统中存在死锁 - 死锁恢复的方法
【进程终止】:(1)终止所有死锁进程、(2)一次只终止一个进程直到取消死锁循环为止
【资源抢占】:通过抢占资源以取消死锁,逐步从进程中抢占资源给其他进程使用,直到死锁环被打开
《操作系统概念-第七版》概念复习笔记第7章
最新推荐文章于 2022-03-29 18:00:32 发布