计算机基础知识

操作系统拾遗--死锁与死锁避免预防检测

2019-02-24  本文已影响0人  FrankerSung

0. 概念

死锁:一组进程中的每一个进程都在等待只有这组进程中的进程才能触发的事件,就像两个人玩拼图,各自拿了对方想要的一块拼图,又不主动把拿到的放回拼图池里,导致两个人都拼不好拼图。

安全序列:指对当前申请资源的进程排出一个序列,保证按照这个序列分配资源能使进程最终都能完成。

1. 死锁产生的原因与条件

1.1. 死锁的原因:
通常是资源不够用或资源使用不当。如竞争不可抢占资源、竞争可消耗资源可能引起死锁

1.2. 产生死锁的必要条件

2. 解决死锁的办法

策略:

2.1. 死锁预防

只要破坏上述四个必要条件中的一个即可。

2.2. 死锁避免

在资源分配之前,计算分配是否能让系统处于安全状态[能否找到安全序列]。

下面说说常用的死锁避免算法---Dijkstra的银行家算法“
假设有当前系统中有n个进程,m种资源

用到的数据结构(二维数组/矩阵+一维数组):
int n,m; // n个进程,m种资源
int Available[1..m]; // 资源当前可用数
int Allocation[1..n][1..m]; // 已分配给每个进程的各种资源数量
int Need[1..n][1..m]; // 当前每个进程还需分配的各种资源数量

// 判断系统安全性算法用到的两个数组
int Work[1..m];  // 当前可分配的各类资源数
boolean Finish[1..n];  // 系统是否拥有足够的资源使其完成运行

两个步骤

银行家算法图解

图片来自 https://blog.csdn.net/qq_33414271/article/details/80245715

2.3 死锁检测与恢复
2.3.1 死锁检测

在单个实例化的资源类型中,如果系统中正在形成一个循环,那么肯定会出现死锁。
在多实例资源类型图中,检测周期不够。 我们必须通过将资源分配图转换为分配矩阵和请求矩阵来在系统上应用安全算法。

2.3.2 死锁恢复

参考
https://www.yiibai.com/os/os-deadlock-detection-and-recovery.html

上一篇下一篇

猜你喜欢

热点阅读