死锁问题概述

news2024/11/24 9:11:18

文章目录

  • 死锁的概念
    • 死锁的定义
    • 相似概念:饥饿
    • 死锁产生的原因
    • 死锁产生的必要条件
    • 死锁的预防
      • 破坏互斥条件
      • 破坏不可剥夺/不可抢占条件
      • 破坏请求并保持条件
      • 破坏循环等待条件
    • 死锁避免
      • 安全性算法
    • 死锁的处理策略
      • 死锁的检测
      • 死锁的解除

死锁的概念

在这里插入图片描述

死锁的定义

多个进程由于竞争资源而造成的阻塞现象,若无外力作用,这些进程都将无法继续推进

相似概念:饥饿

等待时间过长以至于给进程推进和相应带来明显影响,“饿而不死”。

死锁产生的原因

  • 系统资源的竞争;
  • 进程推进的顺序非法;

死锁产生的必要条件

  • 互斥条件:共享资源的排他性(独占性)访问;
  • 不可剥夺条件:访问时该共享资源不会被剥夺;
  • 请求保持条件:保持当前资源时请求另一个资源;
  • 循环等待条件:存在共享资源的循环等待链;

死锁的预防

死锁的预防毫无疑问要从死锁产生的原因作为入手点。我们已经知道了死锁产生的四个必要条件,那么要解决死锁问题,就要从如何破坏死锁产生的四个条件展开。

破坏互斥条件

  • 将只能互斥访问的资源改为同时共享访问;
  • 将独占锁修改为共享锁;
  • 不是所有的资源都可以改成共享的
    在这里插入图片描述

破坏不可剥夺/不可抢占条件

  • 请求新资源无法满足时必须释放已有资源;
  • 由OS协助强制剥夺某进程持有的资源;
  • 实现复杂,代价高;
  • 此操作过多导致原进程任务可能无法推进

在这里插入图片描述

破坏请求并保持条件

  • 进程开始运行时一次性申请所有需要的资源;
  • 阶段性请求和释放资源;
    在这里插入图片描述

破坏循环等待条件

  • 对所有资源进行排序,按序号请求资源;
  • 对资源的编号应该尽可能稳定,这限制了新设备的增加
  • **进程使用资源的顺序可能与系统编号顺序不同;
  • 限制了用户编程

死锁避免

个人觉得死锁的预防与死锁的避免有些类似。死锁的预防是针对死锁产生的条件进行分析,死锁的避免更偏向于操作系统通过一系列策略来对进程管理和各个进程所需的资源进行分配,以求达到死锁避免的效果。

安全性算法

  • 系统安全状态
    • 安全状态一定不会出现死锁;
    • 不安全状态可能会出现死锁;
  • 银行家算法
    • 系统预判进程请求是否导致不安全状态;
    • 是则拒绝请求,否则答应请求;
      在这里插入图片描述
      银行家算法举例:如上图所示
  • 表格中展示了当前状态各个进程占用资源情况以及所需资源情况;
  • 假如先执行P0,则还需分配5个资源,但此时可用资源为3,不行;
  • 假如先执行P1,当前已分配2,还需分配2,小于可用资源,可行;
    • 假如再执行P0,当前P1释放了4个资源,可用资源为5,等于P0所需,可行;
      - 最后执行P2,可行;
    • 假如再执行P2,当前可用资源为5,小于P2所需资源,不可行;
  • 假如先执行P2,还需分配7个资源,大于可用资源,不可行;

死锁的处理策略

死锁的检测

  • 需要一种数据结构,保存有关资源的请求和分配信息;
  • 提供一种算法,利用这些信息检测是否形成了死锁;

可以使用图这种数据结构来保存资源的请求和分配信息。

如示意图所示:定义资源分配图(G=(N, E)),其中有两种资源、两种节点。图的边分为两种类型:分配边以及请求边。可以看到,图中有两种资源,分别是R1和R2;两个进程P0和P1。注意:图中的一条边代表一个资源的请求/分配。
在这里插入图片描述死锁定理(死锁状态的充分条件):

  • 当且仅当此状态下资源分配图是不可完全简化的;
  • 简化过程类似于“拓扑排序”算法;

在了解死锁定理的概念后,我们继续分析上图,来对其进行简化。怎么简化呢?

首先去除孤点和不阻塞的点,上图中P0分配了2个R1资源,正在请求1个R2资源(R2目前分配了1个给P1,还剩一个可分配),因此P0请求成功,不阻塞。接下来上图简化结果如下:
在这里插入图片描述
接下来,由于P0释放了占用的资源,阻塞状态的P1得以继续执行(不阻塞了),因此P1也可继续去除。结果如下图:
在这里插入图片描述
可以看到,此时资源与节点都是孤立的,这种状态就是所谓的完全简化。也意味着不会发生死锁。

死锁的解除

  • 资源剥夺
    • 挂起死锁进程
    • 剥夺其资源
    • 将资源分配给其他进程
  • 撤销进程
  • 进程回退
    • 回退到足以避免死锁的地步
    • 需要记录进程历史信息,设置还原点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1189477.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是代理IP池?如何判断IP代理商的IP池是否真实优质?

代理池充当多个代理服务器的存储库,提供在线安全和匿名层。代理池允许用户抓取数据、访问受限制的内容以及执行其他在线任务,而无需担心被检测或阻止的风险。代理池为各种在线活动(例如网页抓取、安全浏览等)提高后勤保障。 读完…

<C++> list模拟实现

目录 前言 一、list的使用 1. list的构造函数 2. list iterator的使用 3. list capacity 4. list modifiers 5. list的算法 1. unique​ 2. sort 3. merge 4. remove 5. splice 二、list模拟实现 1. 设置节点类 && list类 2. push_back 3. 迭代器 重载 * 重载前置 …

统计一个只包含大写字母的字符串中顺序对的数量.其中顺序对的定义为前面的字符小后面的字符大.例如在“ABC“中的顺序对为3,因为有AB,AC,BC

哈希法:扫描字符串,将出现的字符次数加1,统计比当前字符字典序小的字母出现的次数,即为顺序串的个数。 int CounSq(const char* arr)//时间复杂度O(n) {int sig[26] { 0 };int index 0;int sum 0;for (…

【TiDB】TiDB CLuster部署

目录 0 大纲 一 集群部署工具TiUP简介 1 TiUP 简介 2 TiUP使用 3 TiUP使用举例 二 TiDB Cluster安装配置需求 1 生产环境硬件需求 2 操作系统需求 三 TIDB部署 1 软硬件需求以及前置检查​编辑 2 安装TiUP 组件 ​3 集群拓扑文件 4 执行部署命令 (1&…

如何使用 NFTScan NFT API 在 zkSync 网络上开发 Web3 应用

zkSync 是由 Matter Labs 创建的,是一个以用户为中心的 zk rollup 平台,它是以太坊的第 2 层扩展解决方案,使用 zk-rollups 作为扩展技术,与 optimistic rollups 一样,zk-rollups 将会汇总以太坊主网上的交易并将交易证…

SSM图书管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 SSM 图书管理系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和 数据库,系统主要…

模拟ASP.NET Core MVC设计与实现

前几天有人在我的《ASP.NET Core框架揭秘》读者群跟我留言说:“我最近在看ASP.NET Core MVC的源代码,发现整个系统太复杂,涉及的东西太多,完全找不到方向,你能不能按照《200行代码,7个对象——让你了解ASP.…

Hive 知识点八股文记录 ——(一)特性

Hive通俗的特性 结构化数据文件变为数据库表sql查询功能sql语句转化为MR运行建立在hadoop的数据仓库基础架构使用hadoop的HDFS存储文件实时性较差(应用于海量数据)存储、计算能力容易拓展(源于Hadoop) 支持这些特性的架构 CLI&…

Annotation Processor

Annotation Processor Processor处理约定 JavaC编译环境获取当前的源文件及类文件, 建立多轮次的处理过程。每一次轮次的处理结果将作为下一轮的输入。当某一轮处理完成后没有产生新的源文件或类文件,触发最后一轮。Processors 通过getSupportedAnnotat…

“位不配财”?程序员兼职,稳妥挣钱才是王道!

一、配不上 戏称程序员为“码农”,一年到头,像那地里的老黄牛和勤勤恳恳的老农民。 又像极了那工地上的农民工,天天搬砖,苦得嘞。 作为推动时代进步的得力干将,工作量自然是不容小觑。说程序员不加班都没人信&#x…

【前段基础入门之】=>CSS3新特性 文本多列 布局

概述: 作用:专门用于实现类似于报纸的布局。属于是一行文本多列布局 属性/值描述column-count 指定列数,值是数字。column-width指定列宽,值是长度单位columns同时指定列宽和列数,复合属性;值没有数量和顺序…

2023年眼镜行业分析(京东眼镜销量数据分析):市场规模同比增长26%,消费需求持续释放

随着我国经济的不断发展,电子产品不断普及,低龄及老龄人口的用眼场景不断增多,不同年龄阶段的人群有不同的视力问题,因此,视力问题人口基数也随之不断加大,由此佩戴眼镜的人群也不断增多。 同时&#xff0c…

Unreal Engine 学习笔记 (3)—— 导入资源

1.导入FBX文件 打开系统文件管理器按下鼠标左键拖动fbx文件到UE编辑器中松开鼠标左键在弹出对话框FBX导入选项页面中,选择对应的骨骼 重定向骨骼 拖动UE4的walk_strafe_back.fbx文件到UE5编辑器中 在弹出的FBX导入选项对话框中选择UE4对应的骨骼 使用重定向资产…

软文推广中如何搭建媒体矩阵

媒体矩阵简单理解就是在不同的媒体平台上,根据运营目标和需求,建立起全面系统的媒体布局,进行多平台同步运营。接下来媒介盒子就来和大家聊聊,企业在软文推广过程中为什么需要搭建媒体矩阵,又该如何搭建媒体矩阵。 一、…

el-table实现单选和隐藏全选框和回显数据

0 效果 1 单选 <el-table ref"clientTableRef" selection-change"clientChangeHandle"><el-table-column fixed type"selection" width"50" align"center" /><el-table-column label"客户名称" a…

Spring Boot中配置多个数据源

配置数据源实际上就是配置多个数据库&#xff0c;在一个配置文件中配置多个数据库&#xff0c;这样做主要的好处有以下几点&#xff1a; 数据库隔离&#xff1a;通过配置多个数据源&#xff0c;可以将不同的业务数据存储在不同的数据库中&#xff0c;实现数据的隔离。这样可以…

第四章:人工智能深度学习教程-激活函数(第四节-深入理解激活函数)

什么是激活函数&#xff1f; 在人工神经网络中&#xff0c;节点的激活函数定义了该节点或神经元对于给定输入或一组输入的输出。然后将该输出用作下一个节点的输入&#xff0c;依此类推&#xff0c;直到找到原始问题的所需解决方案。 它将结果值映射到所需的范围&#xff0c;例…

渲染管线详解

光栅化的渲染管线一般分为三大阶段&#xff1a;应用程序阶段->几何阶段->光栅化阶段 也可以四大阶段&#xff1a; 应用程序阶段->几何阶段->光栅化阶段->逐片元操作阶段 更详细的流程如下&#xff1a; Vertex Specification&#xff08;顶点规范化&#xff09…

GPTZero:论文打假神器

记住这张脸他是全美学生的公敌。 别的学生在AI大浪潮间翻云覆雨&#xff0c;有的用GPT代写作业&#xff0c;有的用GPT代工论文&#xff0c;大家都忙的不亦乐乎。 正在大家都在欢呼雀跃跟作业拜拜时&#xff0c;就是这个小伙&#xff0c;普林斯顿大学的华裔小天才Edward Tian…

Git入门---简介,常用命令

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《Spring与Mybatis集成整合》《Vue.js使用》 ⛺️ 越努力 &#xff0c;越幸运。 1.Git 的简介 1.1. 介绍 Git是一个开源的分布式版本控制系统&#xff0c;最初由Linus Torvalds于2005年创…