操作系统 第五章 死锁(一)
作者:互联网
死锁(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、客户申请的贷款数量不超过它自己拥有的最大值时,银行要尽量满足客户需求。
标签:操作系统,申请,系统,破坏,死锁,第五章,进程,资源 来源: https://www.cnblogs.com/fate-/p/13210198.html