操作系统4——死锁
死锁的概念
死锁的定义:指多个进程因竞争共享资源而造成的一种僵局,若无外力作用,这些进程都将永远不能再向前推进。如果死锁发生,会浪费大量系统资源,甚至导致系统崩溃。
一组进程中,每个进程都无限等待被该组进程中另一进程所占有的资源,因而永远无法得到的资源,这种现象称为进程死锁,这一组进程就称为死锁进程。
死锁的结论:
- 参与死锁的进程最少是两个;
- 参与死锁的进程至少有两个已经占有资源;
- 参与死锁的所有进程都在等待资源;
- 参与死锁的进程是当前系统中所有进程的子集;
可重用资源:可以被多个进程多次使用,一次只能分配给一个进程使用,不允许共享
消耗性资源:只可使用一次的资源;即由一个进程产生,被另一进程使用后就再也无用的资源,也称为临时性资源
可抢占资源:CPU,内存,不会引起死锁
不可抢占资源:打印机、磁带机等
产生死锁的原因:竞争资源;进程间推进顺序非法
产生死锁的必要条件:
- 互斥条件:进程对所分配到的资源进行排它性的使用
- 请求和保持条件:进程已经至少保持了一个资源,但又提出了新的资源请求,而该资源又已被其他进程占有
- 不剥夺条件:进程已获得的资源在未使用完之前不能被剥夺
- 环路等待条件:在发生死锁时,必然存在一个进程--资源循环等待的环形链
处理死锁的基本方法:
- 1、预防死锁:通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或几个条件,来防止发生死锁。
- 2、避免死锁:不须采用各种限制措施去破坏产生死锁的必要条件,防止系统进入不安全状态,从而避免发生死锁,只需在事先加以较弱的限制条件。
- 3、检测死锁:不须检查系统是否已进入不安全区,允许系统在运行过程中发生死锁。
- 4、 解除死锁:常用的实施方法是撤消或挂起一些进程,以便回收一些资源,再将这些资源分配给已处于阻塞状态的进程,使之转为就绪状态,以继续运行。
预防死锁的方法:破坏“请求和保持”条件;破坏“不剥夺”条件;破坏“循环等待”条件。
避免死锁的方法:银行家算法
资源分配图:方框表示资源,圆点表示资源实例,
分配边:资源实例—>进程的一条有向边;申请边:进程—>资源类的一条有向边
定理:(1)如果资源分配图中没有环路,则系统中没有死锁。
(2)如果图中存在环路则系统中可能存在死锁。
(3)若每个资源类中只包含一个资源实例,则存在环路就一定存在死锁。