[操作系统] 死锁预防和死锁避免

死锁预防

限制申请方式

  互斥

  占用并等待

  不抢占

    杀死占用资源的进程

  循环等待 对所有资源类型进行排序,并要求每个进程按照资源的顺序进行申请

 

死锁避免

  需要系统具有一些额外的先验信息提供。
    1. 最简单和最有效的模式是要求每个进程声明它可能需要的每个类型资源的最大数目。
    2. 资源的分配状态是通过限定提供与分配的资源数量,和进程的最大需求。
    3. 死锁避免算法动态检查的资源分配状态,以确保永远不会有一个环形等待状态。

  判断分配之后是否是安全状态,若是,则分配

  系统安全状态:指所有进程,存在安全序列

  处于安全状态=》 没有死锁

  不安全状态=》可能死锁

  避免死锁的话=》确保系统永远不会进入不安全状态

 

银行家算法

  前提条件

    1. 多个实例

    2. 每个进程都能最大限度的利用资源

    3. 当一个进程请求一个资源,就不得不等待

    4. 当一个进程获得所有资源,就必须再一段有限的时间内释放他们

  基于上述条件,算法长师寻找每一个进程获得的最大资源并且结束的进程请求执行时序,来决定状态是否安全。不存在这样执行时序,就是不安全的。

  

  数据结构

    n=进程数量,m=资源类型数量

    Max(总需求量):n*m矩阵,如果Max[i,j] = k,表示进程Pi最多请求资源类型Rj的k个实例

    Available(剩余空闲量):长度为m的向量。如果Available[j]=k,有k个类型Rj的资源实例可用

    Allocation(已分配量):n*m矩阵。如果Allocation[i,j]=k,则Pi当前非赔了k个Rj的实例

    need(未来需要量):n*m矩阵,如果Need[i,j]=k,则Pi可能需要至少k个Rj实例完成任务    

    Need[i,j]=Max[i,j]-Allocation[i,j];

 

  

作者:cjdty

出处:https://www.cnblogs.com/cjdty/p/10950462.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Startu  阅读(3484)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
more_horiz
keyboard_arrow_up light_mode palette
选择主题
点击右上角即可分享
微信分享提示