计算机操作系统零散笔记——关于死锁(二)

据上一篇隔了好久,现在开始回来看看怎么解决死锁


怎么解决死锁

要么破坏死锁产生的必要条件之一。
比如攻击死锁的互斥条件
要么
下面这两种方式

  • Deadlock prevention 死锁预防
  • Deadlock avoidance 死锁避免

或者就是
死锁的避免与回复
要么就用看啥去傻傻的鸵鸟算法

鸵鸟算法

大多数操作系统都用的鸵鸟算法。
假装看不到,就是不去解决它。忽略潜在问题的一种算法策略。使用这个算法的前提是:问题出现的概率很低。

死锁问题都是交给程序员解决的而不是操作系统。

关于死锁的prevention 预防

预防,也就是说从前期的条件来决定死锁永远不会发生

分时 Time-sharing
虚拟合并 Virtual-combination

窗口的重叠与合并方法。
其实并不是那个窗口真的叠盖上了那个窗口,而是操作系统操作了哪个进程窗口只显示哪部分。

关于虚拟合并还有一个例子,就是声音
QQ音乐的声音和爱奇艺视频的声音我们现在都知道是可以一起放的。但我们就一个声卡,怎么做到的?
操作系统会给每个设备分配虚拟声卡,然后虚拟声卡会汇总给混音器。然后再给声卡传过去。但此时的声音已经不是原来的声音了只不过是混合后的。

spooling 缓冲池

常用于只能串行的设备。譬如打印机


关于死锁的避免 avoidance

大多用的死锁的避免。
避免,就是是死锁有发生的可能,让发生的一瞬间的时候让他不发生。

死锁的发生是以资源的请求和分配为出发点的,当分配发生后死锁就形成了。
死锁的避免就是在任何资源请求的时候来做一个判断,若这个请求满足之后,接下来的系统会不会死锁,若会,那就不满足该请求,若不会就满足这个请求。

但是我们无法准确的知道一个进程到底需要多少资源

有两个状态

  • 安全状态:一定不会死锁
  • 非安全状态 :未必一定死锁,就是死锁的概率会很大

在这里插入图片描述

不知道咂摸解释,像图二,就是形成了死锁,所以不能给A再多分配1了。

资源分配图,图论算法
银行家算法

在这里插入图片描述


众所周知,在死锁的避免 每次都需要判断一下,而且死锁是个概率问题,并且呢概率一般不大,这样的话就对系统的额外负荷就高了。

于是就有了这个策略

死锁的检测和恢复

只要有进程请求资源,但凡这个资源有剩余,就给。并且周期性的检查有没有出现死锁,若出现了,就来解决。

Recovery scheme 恢复的策略即可
实践中,真正发生死锁的话,是按一下方式检测的

进程工作的时候,每工作一段时间就向外发送一个消息,就是告诉外面说我现在在工作,过一段时间发一个过一点时间发一个 ,有一个进程,是专门用来收集这些消息的,当过了好久还得不到任何消息时,就可以知道进程出问题了,不一定就是死锁了,但一定有问题了。

这个进程就叫看门狗 那些发消息的,叫做喂狗进程

  • watch dog 看门狗
  • 喂狗进程

那检测完了,该怎么恢复呢?
丢弃、放弃的策略。

其实死锁的检测和恢复就是容错技术的一种体现。
就是允许错误发生,当错误发生后,我们可以解决它。

杀死进程,但是杀光太浪费了
于是一点一点杀,先杀一个,看判断还有没有死锁,还有的话,继续杀,以此类推

关键就是要先杀谁?
最重要的就是要最小化我们的代价

rollback 回滚
就是把正常的状态保存下来,然后出错后可以回到这个点。但是这样做要保证有随机因素再,不然怎么回滚都回到了最初的原点就没有用了。

具体怎么最小化我们的代价?
这就很复杂很难,目前理解这个问题是目标。

死锁完。

发布了75 篇原创文章 · 获赞 26 · 访问量 7659

猜你喜欢

转载自blog.csdn.net/qq_40962234/article/details/104633338