操作系统 第五章 死锁(一)

死锁(deadlock)定义:

在多道程序中,由于多个并发进程共享系统的资源,如果使用不当可能会造成一种僵局,即当某个进程提出资源的使用请求后,使得系统中一些进程处于无休止的阻塞状态,在无外力的作用下,这些进程将无法继续进行下去,这就是死锁。

产生死锁的环境:

1、多道程序设计技术

2、多个并发进程

3、资源共享(独占)

4、没有外力可以借助

使用不当造成的死锁示例

1、P、V操作不当

 2、竞争资源

  多个进程共享不可抢占的资源就可能引起死锁

3、进程申请顺序不当

发生进程的四个必要条件(1971年提出)

1、互斥条件

2、不剥夺条件

3、请求和保持

4、循环等待

死锁的危害

轻则系统资源利用率严重下降,重则系统崩溃

解决死锁的策略:

死锁的预防

静态的方法;在进程执行前采取的措施,通过设置某些限制条件,去破坏产生死锁的四个必要条件之一,防止发生死锁。

死锁的避免

动态的方法;在进程执行过程中采取的措施,不需事先采取限制措施破坏产生死锁的必要条件,而是在进程申请资源时用某种方法去防止系统进入不安全状态,从而避免发生死锁。

死锁的检测和解除

这种方法预先并不采用任何限制措施,允许系统在运行过程中发生死锁。但可通过系统设置的检测机构及时检测死锁的发生,如检测到死锁,则采用撤销进程等死锁解除方法使系统正常工作。

死锁的检测和解除的提出原因:预防策略虽然可以杜绝死锁发生,但是它提出的策略可能会或多或少影响到系统效率。

思想:可以容忍死锁的发生,事后处理。

优点:灵活,效率高。

破坏死锁产生的必要条件

破坏互斥条件

这种方法是通过使用SPOOLing来解决问题的,SPOOLing让这个打印机变成了一个虚拟设备,当打印机正在被进程使用时,别的进程来申请,此时这个进程不会被阻塞,而是会在SPOOLing系统这提交一个申请表,相当于是在这排队,这样就间接破坏了死锁的互斥条件。 

局限:破坏“互斥”比较困难,而且对很多资源行不通。

破坏不可剥夺条件

思想:允许进程还未执行完成时释放已经占有的资源

方法:

1、已经占有部分资源,还需要资源,如果得不到满足,则释放自己所占有的所有资源,以后再申请。

2、正在使用资源,有高优先级的进程请求相同资源,则低优先级进程放弃资源。

局限:实现困难,为例恢复现场需要耗费很多时间和空间,因此只适合类似CPU、存储器这样的资源。

破坏请求和保持条件

常常采用静态策略:进程创建时就由系统分配了所有需要的资源,然后才执行,并且以后没有资源申请要求,进程执行完后,释放资源。

缺点:系统效率低,并发性下降,资源浪费严重。

破坏循环等待条件:

方法:给资源编号,进程必须按序申请资源。

局限:

1、资源编号困难:尽管资源的按序分配方法消除了死锁的问题,但给资源编号很困难,很难满足每一个进程的要求。

2、资源的编号很难和进程申请资源的顺序一致:资源顺序分配法是按资源编号申请资源,可能与实际使用资源的顺序不一致,使得一些先申请的资源因暂时不用,而长时间闲置,降低了系统资源利用率。

结论:

死锁的预防是以破坏死锁产生的必要条件为基本方法,从而防止死锁发生的。其中由于对资源的申请加上了诸多的限制,因此这种策略虽有一定的效果,但其资源的利用率和效率比较低,很难令人满意。

死锁的避免

思想

允许死锁产生的条件存在,但通过动态的、明智的选择----在分配资源之前,系统判断假若满足进程的要求是否会发生死锁,如果会,资源就不予分配,从而确保永远不会到达死锁点,避免死锁的发生。

优点:比预防此略更为灵活实用,允许更多的并发,其资源利用率和效率也更高。

系统的状态

安全状态:指在某个时刻,当多个进程动态的申请资源时,如果存在一种顺序,使得系统按照这种顺序逐次地为每个进程分配资源后,每个进程都可以在最终得到最大需求量后,依次顺利地完成。

与安全状态相反的就是不安全状态。

避免死锁的关键就是:让系统在动态分配资源的过程中,不要进入不安全状态,

 单银行家算法(Banker's  Algorithm)

基本思想:借用了银行借贷系统的分配策略,基于这样的一些规则:

1、第一次申请需要声明最大资金需求量

2、满足最大需求后要及时归还资金

3、客户申请的贷款数量不超过它自己拥有的最大值时,银行要尽量满足客户需求。

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/fate-/p/13210198.html