目录
一、基本概念
- 1.死锁是指两个以上的进程互相都要使用对方已占有的资源,导致资源无法继续运行下去的现象。
- 2.例如:吃饭需要使用2根筷子,张三有一根筷子,李四也有一根筷子,张三对李四说让李四的筷子给张三,张三吃完后再给李四,李四也是这么说的,然后双方一直僵持,导致都没吃上饭
二、死锁的条件
- 1.死锁的四个必要条件为:互斥条件,保持和等待条件,不可剥夺条件,环路等待条件,四个条件缺一不可,同时满足才能形成死锁
- 2.互斥条件:一个资源每次只能被一个进程使用,如果资源是共享的,所有进程都可以使用,就不会产生死锁的现象。一根筷子要么被张三使用,要么被李四使用
- 3.保持和等待条件:一个进程因请求其它资源被阻塞时,也不释放已获得的资源。保持自己持有的资源,等待他人释放资源。张三持有一根筷子,等待李四给筷子;李四持有一根筷子,等待张三给筷子
- 4.不剥夺条件:有些系统资源是不可剥夺的,当进程已获得不可剥夺的资源,系统不能强行收回,只能等进程完成时自己释放。张三还差一根筷子,不能强行抢李四的筷子,必须得等李四主动给才行
- 5.环路等待条件:若干个进程形成资源申请环路,每个都占用对方要申请下一个资源。张三要李四的筷子,李四要张三的筷子,形成环状;若王五也有一根筷子给了张三,则破坏了环状,可以破除死
三、解决死锁
3.1 预防死锁
- 1.破坏导致死锁的4个必要条件之一就可以预防死锁,属于事前检查
- 2.预先静态分配法:用户申请资源时,申请所需的全部资源,破坏保持和等待条件,不需要等待其它进程释放的资源。一次性给张三2根筷子,吃完后释放掉2根筷子,然后一次性给李四2根筷子
- 3.资源有序分配法:将资源分层排序,保证不形成环路,得到上一层资源后,才能够申请下一层资源。给筷子加上编号,1号筷子和2号筷子,首先给张三分配1号筷子,李四等待,然后给张三分配2号筷子,张三吃完后,释放1号筷子,分配1号筷子给李四,张三释放2号筷子,分配2号筷子给李四
3.2 避免死锁
- 1.避免是指进程在每次申请资源时判断这些操作是否安全,属于事前检查
- 2.银行家算法:对进程发出的资源请求进行检测,如果发现分配资源后系统进入不安全状态,则不予分配,否则分配。安全但会增加系统的开销
3.3 检测死锁
- 1.使用死锁检测方法,此方法对资源的分配不加限制,允许死锁产生。但系统定时运行一个死锁检测程序,如果检测到死锁则去解除
3.4 解除死锁
- 1.资源剥夺法:从一些进程那强行剥夺足够数量的资源分配给死锁进程
- 2.撤销进程法:根据某种策略逐个地撤销死锁进程,直到解除死锁为止
四、进程管理
- 1.进程管理是操作系统的核心,设计不当会出现死锁问题。
- 2.如果进程在等待一件不可能发生的事,进程就死锁了
- 3.如果多个进程产生死锁,就会造成系统死锁
- 4.系统不可能发生死锁的最小资源数:(w-1)*m+1<=n
- 5.每个进程都需要w个资源,一共m个进程,在极端情况下,每个进程都分配到了w-1个资源,所以都无法完成任务,则会死锁,再给其中任意一个进程分配1个资源,那么该进程拿到了w个资源,则可以完成任务,释放掉资源后,其它进程也可以依次拿到w个资源完成任务
五、最小资源数计算
5.1 例题1
-
1.系统有5个进程:A、B、C、D、E。这5个进程都需要4个系统资源。如果系统至少有多少个资源,则不可能发生死锁。
-
2.一定死锁的情况:某个进程分配了3个资源,其它进程均没有分配到资源。极端情况下,所有资源都给一个进程,对于A,需要4块钱才能办事,给A零到三块钱,都不会办事的。因此资源小于4时,一定会发生死锁。
-
3.可能正常执行的情况:极端情况下,4个资源都分配给同一个进程,即
-
4.可能死锁的情况,极端情况下,15个资源平均分配给5个进程,即每个进程分配到3个资源,即
-
5.因此资源数在4到15个时,可能死锁,可能正常执行
-
6.当资源数大于15时,必定不会死锁,即
-
7.假设第16号资源给到进程B,进程B得到资源后,运行完,释放了4个资源,再将释放资源分配其它任意进程,其它进程均可完成任务,释放所持有的资源
-
8.因此资源数大于15时,必定不会死锁