1.死锁的必要条件
-
互斥条件
进程互斥使用资源,资源具有独占性 -
不剥夺条件
进程在访问资源前不能被其它进程强行剥夺 -
部分分配条件
区别于全部分配, 进程边申请资源,临时需要临时分配 -
环路条件
多个进程构成环路:环中每个进程已占用的资源被前一进程申请,而自己所申请的资源又被环中后一进程占用着
若限定最多4人同时吃饭,就可以避免死锁
因为:4个人,有5只筷子,有个人就有一双筷子可以吃饭
2.解决死锁的策略
-
预防死锁
-
避免死锁
-
检测死锁
-
恢复死锁
-
(1)预防死锁
通过设置某些限制条件,破坏死锁4个必要条件中的一个或多个, 来防止死锁
缺点:较易实现,但是由于限制太严格,导致资源利用率和吞吐量降低
-
预先静态分配法
目的:破坏部分分配条件;
策略:进程运行前将所需资源一次性全部分配给他。 因此,进程在运行过程中不再提出资源请求,从而避免出现阻塞或者死锁;
特点:执行可能被延迟:所需资源不能全部满足时;应用开销增大:运行前估算资源需求;资源利用率低:资源被占而不用
改进: 资源分配的单位由进程改为程序步; -
有序资源分配法
目的:破坏环路条件,使得环路无法构成;
策略: 系统中的每个资源分配一个唯一的序号;进程每次申请资源时,只能申请序号更大的资源!!
特点:按有序资源分配法分配资源,并发进程不会死锁;
资源分配策略: 分配资源时,检查资源序号是否符合 递增 规定;
-
(2)避免死锁
不事先采取限制 去破坏产生死锁的条件,而是在资源分配过程中,用某种方法去评估若分配资源是否会让系统进入死锁状态, 若是,则拒绝此次分配资源,从而避免死锁的发生
方法:银行家算法;
缺点:只需要较弱的限制条件,可获得较高的资源利用率和系统吞吐量。 实现较难。 -
(3)检测和恢复死锁
允许死锁发生,但是可通过监测机制及时监测出死锁状态,并精确确定与死锁有关的进程和资源,然后采取适当措施,将系统中已发生的死锁清除,将进程从死锁送状态中解脱出来。
缺点:监测方法复杂,实现难度大;挥发方法靠人工,撤销一些进程,回收资源再分配;
3.Windows,Linux采用了何种的死锁解决方案?
- 采用鸵鸟策略
现代操作系统没有解决死锁问题,而是留给用户来解决;
就像鸵鸟一样,遇到问题,就把头插入土里