2、死锁

厨子大约 3 分钟操作系统原创面试题死锁程序厨

2.死锁

2.0 死锁产生的条件

死锁产生的原因是竞争资源

请求和保持:请求新资源,保持住占有资源

互斥:某一时刻下,一个资源只能一个进程所占有

不可剥夺:获得的资源没有使用完时,别人不可以抢走

循环等待:没有获得新资源,绝不死心。

2.1 处理死锁的方法

鸵鸟法:顾名思义,对死锁不管不问

预防死锁:设置某些限制条件,破坏死锁产生的四个条件之一

避免死锁:资源分配的动态过程中,用某种方法防止系统进入不安全状态,从而避免死锁的发生。

检测死锁:专门喊个人来检测死锁是否存在。

2.2 死锁预防

破坏四个条件之一

互斥条件:不太可能通过这个来解决

请求和保持:静态分配,进程运行之前先分配所有资源给他

不可剥夺:也可以通过这个来解决,当某个资源长时间不能获得需要的新资源时,则放弃他的所有资源

循环等待:我认为从循环等待下手比较好,当等待一段时间还没有获得资源时,则放弃等待。

2.3 死锁避免

安全状态

给进程分配资源之前,先判断是否给其分配后,会导致系统进入不安全状态,如果不会则进行分配。

另外需要注意的是,不是进入不安全状态就一定会产生死锁,而是可能产生死锁。

银行家算法

需要定义很多数据结构

最大需求矩阵:最大需求

可用资源向量:可用资源

分配矩阵:分配了多少

需求矩阵:还需要多少

具体执行如下

申请资源Ri代表每个进程申请的资源数目。那么需要注意三个地方

申请资源数目,不能小于需要的资源数目,也不能大于含有的资源数目,然后再进行预分配,分配过之后进行安全检查,判断是否有可能使其进入不安全状态。

监督人

2.4 死锁的检测和解除

死锁检测

资源分配图

我们可以通过资源分配图来检测进程的资源占用情况及申请情况,进而来判断是否产生了死锁。

死锁解除

可以通过,剥夺资源,进程回退,进程撤销来解除死锁。

2.5 死锁和饿死

进程调度不公平的时候,容易发生进程饿死的情况