死锁的概念?死锁的原因?
1、死锁多进程或者多线程相的环境下,相互等待资源而产生的一种僵持状态。如果不添加外力进行干扰的话,那么这个状态会一直持续下去。
2、死锁产生的原因:
系统资源不足
相互竞争资源
请求资源顺序不当
产生死锁的必要条件?怎么处理死锁?
死锁的必要条件:
1、互斥条件。资源是独占的排他使用。进程互斥的使用资源,及在任何时刻一个资源只能有一个进程使用。其他进程要想使用这个资源,必须等待这个进程释放这个资源后,才能进行使用
2、不可剥夺条件:这里指的是进程所获得的资源在未使用完毕之前,不可能被其他进行进程所强行剥夺。
3、请求和保持条件:进程在每次申请新的资源时,会继续占有已经分配的资源。
4、循环等待:前一个进程所申请的资源被后一个进程所拥有。出现此状态:P1等待P2 占有的资源,P2 等待 P3 占有的资源,……… Pn 等待 P1 占有的资源。
解决死锁的方法:
预防死锁阶段:
(a)、可以静态分配资源。在程序执行之前,预先分配好资源
(b)、给系统资源编号,稀缺的资源编号较大,必须按照严格的资源编号进行。一个进程只有在得到资源较小的编号后,才能申请资源较大的编号。
©、如果当前进程已经拥有某些资源,但是申请其他资源一直申请不到,就释放当前拥有的资源。
避免死锁阶段:
进程在分配资源时,先计算一下分配资源的安全性。若此次分配可能会不会导致系统进入不安全状态的话,就将资源分配给进程。否则,进程等待。典型代表死锁避免算法:银行家算法
解除死锁:
1、强行剥夺资源:强行从其他进程剥夺足够数量的资源来给死锁进程,来解除死锁状态。
2、撤销进程:直接撤销死锁进程,直到有资源可用时或者死锁解除时。
预防死锁的方法、避免死锁的方法
采用资源静态分配,破坏“部分分配”条件
允许进程剥夺使用其他进程占用的资源,破坏“不可剥夺”条件
采用资源有序分配法,破坏“环路”条件
互斥条件无法破坏。