您的位置:首页 > 健康 > 美食 > 手机如何建设网站_品牌vi是什么意思_什么软件可以刷网站排名_抖音关键词搜索排名收费

手机如何建设网站_品牌vi是什么意思_什么软件可以刷网站排名_抖音关键词搜索排名收费

2024/12/23 9:26:32 来源:https://blog.csdn.net/zxjiaya/article/details/143492802  浏览:    关键词:手机如何建设网站_品牌vi是什么意思_什么软件可以刷网站排名_抖音关键词搜索排名收费
手机如何建设网站_品牌vi是什么意思_什么软件可以刷网站排名_抖音关键词搜索排名收费

文章目录

    • 死锁的四个条件
    • 预防死锁
    • 避免死锁
      • 基本概念
      • 算法流程
        • 1. 初始化
        • 2. 检查请求
        • 3. 试探性分配
        • 4. 安全性检查
        • 5. 最终分配
      • 示例
      • 优缺点
    • 死锁的检测和解除
    • 死锁其它知识点

死锁的四个条件

死锁的发生一般需要满足以下四个条件,称为“死锁的必要条件”:

  1. 互斥条件
    资源在同一时间只能被一个进程占用。例如,在一个打印任务执行时,打印机资源只能被该任务独占,其他任务无法使用。

  2. 占有且等待条件
    一个进程已经持有了某些资源,但又请求其他资源,而这些资源正被其他进程持有。此时,该进程处于等待状态,但并不释放它已经拥有的资源。

  3. 不可剥夺条件
    进程已获得的资源在未完成使用前不能被剥夺,只有在任务结束后,资源才能被释放。例如,任务A持有资源X,并且在等待完成之前,其他进程不能强制收回资源X。

  4. 循环等待条件
    存在一组进程组成的等待环路,即进程A等待进程B占有的资源,进程B等待进程C占有的资源,直到某个进程等待进程A占有的资源,形成一个环路。例如,任务A等待任务B的资源,任务B等待任务C的资源,而任务C又等待任务A的资源。

满足这四个条件时,系统会出现死锁。避免死锁的方式通常是打破其中一个或多个条件,例如资源预分配、允许资源抢占等。

预防死锁

在这里插入图片描述

破坏互斥条件:将独享资源改为共享资源。比如使用SPOOLing技术,可以对打印机的资源使用被接受等待,不需要阻塞等待。
破坏不剥夺条件:强制释放或者主动释放。

破坏请求和保持条件,采用静态分配的方法,运行前把所有资源占有
破坏循环等待条件:顺序资源分配法,对程序进行编号。

避免死锁

银行家算法
银行家算法是一种用于避免死锁的资源分配算法。它通过动态地判断系统资源分配的安全性来确保每次分配不会导致死锁。算法的核心是检查系统在分配资源后的状态是否处于“安全状态”,只有当分配不会导致死锁时,才会执行该资源请求。

基本概念

银行家算法基于以下几个概念:

  1. 系统安全状态:如果系统中存在一种进程执行顺序,使得每个进程都能够顺利完成并释放资源,系统就处于“安全状态”。反之,如果不存在这样的执行顺序,则系统处于“不安全状态”。

  2. 每个进程的最大资源需求(Max):这是一个进程在执行期间可能需要的最大资源数量。

  3. 每个进程当前已经获得的资源数量(Allocation):表示当前已分配给进程的资源数量。

  4. 每个进程还需要的资源数量(Need):表示当前进程还需要的资源数量。计算公式为:
    N e e d = M a x − A l l o c a t i o n Need = Max - Allocation Need=MaxAllocation

  5. 系统可用资源数量(Available):系统中当前可以分配的资源数量。

算法流程

银行家算法的主要流程包括以下步骤:

1. 初始化

系统维护四个数据结构:Max(最大需求矩阵)、Allocation(已分配矩阵)、Need(需求矩阵)和 Available(可用资源向量),并根据当前的资源状态初始化这些数据结构。

2. 检查请求

当一个进程请求资源时,首先判断请求量是否小于等于该进程的需求量 Need,并且是否小于等于系统当前可用资源 Available。如果任一条件不满足,直接拒绝请求。

3. 试探性分配

如果请求满足条件,则尝试进行“试探性分配”,即将 Available 减少请求量,同时增加 Allocation 和减少 Need。此时只是暂时性地分配资源,用于检查系统是否会进入不安全状态。

4. 安全性检查

执行安全性检查,确保系统在此试探性分配后仍然处于安全状态。具体过程如下:

  • 找到一个进程,其 Need 小于等于当前 Available,这表示该进程可以顺利完成。
  • 假设该进程执行完成并释放资源,将其资源加回 Available,并将该进程标记为已完成。
  • 重复此过程,直到所有进程都能顺利完成,或无法找到可顺利完成的进程。如果所有进程都能顺利完成,则表示系统处于安全状态。
5. 最终分配
  • 如果试探性分配后的状态是安全的,真正进行资源分配,完成进程请求。
  • 如果试探性分配后的状态是不安全的,撤回该试探性分配,恢复资源并拒绝该请求。

示例

假设有以下初始状态:

进程Max(最大需求)Allocation(已分配)Need(需求)Available(可用)
P1(7, 5, 3)(0, 1, 0)(7, 4, 3)(3, 3, 2)
P2(3, 2, 2)(2, 0, 0)(1, 2, 2)
P3(9, 0, 2)(3, 0, 2)(6, 0, 0)
P4(2, 2, 2)(2, 1, 1)(0, 1, 1)
P5(4, 3, 3)(0, 0, 2)(4, 3, 1)

如果此时 P1 申请 (1, 0, 2) 资源,银行家算法会进行以下步骤:

  1. 检查申请是否合法。
  2. 试探性分配资源,将 Available 减少 (1, 0, 2)
  3. 检查系统是否安全。
  4. 根据检查结果决定是否分配资源。

优缺点

  • 优点:可以有效避免死锁,提高系统资源分配的安全性。
  • 缺点:算法复杂度较高,适用于较少的资源和进程数。

死锁的检测和解除

在这里插入图片描述
资源剥夺法强行收回已分配给某些进程的资源,使得其他进程可以获得资源并继续执行,从而打破死锁。
撤销进程法撤销进程法通过终止死锁涉及的某些进程,释放它们所占用的资源,从而解决死锁问题。
进程回退法允许系统将陷入死锁的进程退回到某个安全状态,并重试资源分配过程。它要求系统对进程的状态进行检查和保存,确保可以回退到之前的状态。

死锁其它知识点

产生思死锁地根本原因是系统资源分配不足和进程推进顺序非法
资源的有序分配策略可以破坏思索地循环等待条件
死锁定理用来检测死锁的方法
死锁预防(Deadlock Prevention)是一种通过设计系统约束条件,破坏死锁产生的四个必要条件之一来避免死锁的方法。
死锁避免(Deadlock Avoidance)是一种动态监控系统状态的方法,根据进程对资源的需求分配资源。死锁避免策略会在资源分配时预测是否可能出现死锁,避免系统进入不安全状态。常用的方法包括银行家算法。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com