死锁产生的原因、必要条件以及解决办法

1、死锁的概念:在计算机系统中有很多一次只能有一次进程使用的资源,比如:打印机打印文件。但是在多道程序设计的环境下,若干进程往往要共享这类资源,而且一个进程所需要的资源不止一个,在这种情况下,就会出现若干进程去竞争有限的资源,又因为推进顺序不当,从而构成多个进程循环等待它方所占用的资源而无限期僵持的局面,这样的一种状态就叫死锁

2、产生死锁的根本原因:

2.1 资源有限。系统提供的资源太少了,远不能满足并发进程对资源的需求。

2.2 进程推进顺序不当。程序设计得不合理,造成进程推进的顺序不当,也会出现死锁。

3、产生死锁的四个必要条件:

互斥条件。即某个资源在一段时间内只能被一个进程使用,而不能同时被两个或两个以上的进程所占有。

不可抢占条件。在某个进程的资源没有使用完之前,资源申请者不能强行抢占这个进程所占有的资源,只能由该资源占有者的进程自动释放。

占有同时申请条件。进程至少已经占有一个资源,但又同时申请新的资源,由于想申请的资源正在被其它进程占有,所以此时该进程会发生阻塞。但是,它在等待新资源之时,仍会继续占有自身之前已占有的资源。

循环等待条件。存在一个进程等待序列{P1,P2,…,Pn},其中P1等待P2所占有的某一资源,P2等待P3所占有的某一源,…,而Pn等待P1所占有的的某一资源,形成一个进程循环等待环。

以上四个条件缺一不可,否则死锁无法发生。

4、死锁的预防(排除死锁的静态策略):

破坏四个必要条件其中一个。

〈1〉打破互斥条件。即允许进程同时访问某些资源。

〈2〉打破不可抢占条件。即允许进程强行从占有者那里夺取某些资源。

〈3〉打破占有且申请条件。可以实行资源预先分配策略。

〈4〉打破循环等待条件,实行资源有序分配策略。

5、死锁的避免(排除死锁的动态策略):

对进程所发出的每一个申请资源命令加以动态地检查,并根据检查结果决定是否进行资源分配。就是说,在资源分配过程中若预测有发生死锁的可能性,则加以避免。

(1)安全序列

我们首先引入安全序列的定义:所谓系统是安全的,是指系统中的所有进程能够按照某一种次序分配资源,并且依次地运行完毕,这种进程序列{P1,P2,…,Pn}就是安全序列。如果存在这样一个安全序列,则系统是安全的;如果系统不存在这样一个安全序列,则系统是不安全的。

(2)银行家算法

银行家算法是从当前状态出发,逐个按安全序列检查各客户谁能完成其工作,然后假定其完成工作且归还全部贷款,再进而检查下一个能完成工作的客户,…。如果所有客户都能完成工作,则找到一个安全序列,银行家才是安全的。

6、死锁的检测与恢复(实际操作系统中采取的方法):

死锁检测与恢复是指系统设有专门的机构,当死锁发生时,该机构能够检测到死锁发生的位置和原因,并能通过外力破坏死锁发生的必要条件,从而使得并发进程从死锁状态中恢复出来。

猜你喜欢

转载自blog.csdn.net/weixin_41163113/article/details/85037800
今日推荐