2、死锁
大约 3 分钟操作系统原创面试题死锁程序厨
2.死锁
2.0 死锁产生的条件
死锁产生的原因是竞争资源
请求和保持:
请求新资源,保持住占有资源
互斥:
某一时刻下,一个资源只能一个进程所占有
不可剥夺:
获得的资源没有使用完时,别人不可以抢走
循环等待
:没有获得新资源,绝不死心。
2.1 处理死锁的方法
鸵鸟法:
顾名思义,对死锁不管不问
预防死锁
:设置某些限制条件,破坏死锁产生的四个条件之一
避免死锁
:资源分配的动态过程中,用某种方法防止系统进入不安全状态,从而避免死锁的发生。
检测死锁:
专门喊个人来检测死锁是否存在。
2.2 死锁预防
破坏四个条件之一
互斥条件:不太可能通过这个来解决
请求和保持:静态分配,进程运行之前先分配所有资源给他
不可剥夺:也可以通过这个来解决,当某个资源长时间不能获得需要的新资源时,则放弃他的所有资源
循环等待:我认为从循环等待下手比较好,当等待一段时间还没有获得资源时,则放弃等待。
2.3 死锁避免
安全状态
给进程分配资源之前,先判断是否给其分配后,会导致系统进入不安全状态,如果不会则进行分配。
另外需要注意的是,不是进入不安全状态就一定会产生死锁,而是可能产生死锁。
银行家算法
需要定义很多数据结构
最大需求矩阵:最大需求
可用资源向量:可用资源
分配矩阵:分配了多少
需求矩阵:还需要多少
具体执行如下
申请资源Ri代表每个进程申请的资源数目。那么需要注意三个地方
申请资源数目,不能小于需要的资源数目,也不能大于含有的资源数目,然后再进行预分配,分配过之后进行安全检查,判断是否有可能使其进入不安全状态。
监督人
2.4 死锁的检测和解除
死锁检测
资源分配图
我们可以通过资源分配图来检测进程的资源占用情况及申请情况,进而来判断是否产生了死锁。
死锁解除
可以通过,剥夺资源,进程回退,进程撤销来解除死锁。
2.5 死锁和饿死
进程调度不公平的时候,容易发生进程饿死的情况
