操作系统(8)死锁

一、概念

       死锁是指在一个进程集合中的每个进程都在等待只能由该集合中的其他进程才能引起的事件,而无限期地僵持下去的局面。在多任务环境中,由于资源分配不当,导致两个或多个进程在等待对方释放资源时陷入无限等待的状态,这就是死锁。

二、产生因素

  1. 系统资源有限:当系统中多个进程共享资源时,如打印机、公用队列等,其数目不足以满足所有进程的需求,会引起进程对资源的竞争而产生死锁。
  2. 并发进程间的推进顺序不当:进程在运行过程中,请求和释放资源的顺序不当,也会产生进程死锁。
  3. 资源分配策略:资源的分配策略也可能导致死锁的发生,如资源的分配是否公平、是否遵循一定的顺序等。

三、必要条件

      产生死锁必须同时满足以下四个必要条件:

  1. 互斥条件:进程对所分配到的资源进行排他性使用,即在一段时间内某资源仅能被一个进程占用。如果此时还有其他进程请求该资源,那么请求的进程只能等待,直到占有资源的进程用毕释放。
  2. 占有和等待条件:进程已经持有至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程阻塞,但又对自己已获得的资源保持不放。
  3. 不剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行剥夺,而只能由获得该资源的进程自己释放。
  4. 环路等待条件:在发生死锁时,必然存在一个进程-资源的环形链,即进程集合中的进程形成一种头尾相接的环形等待资源关系。

四、死锁的处理策略

  1. 死锁预防

    • 破坏互斥条件:允许资源同时被多个进程访问,但这对于某些资源(如打印机)来说是不可能的。
    • 破坏占有和等待条件:实行资源预先分配策略,即进程在运行前一次性向系统申请它所需要的全部资源,若所需全部资源得不到满足,则不分配任何资源,此进程暂不运行。只有当系统能够满足当前进程所需的全部资源时,才一次性将所申请的资源全部分配给该进程。但是,这样会导致资源利用率降低,并可能导致饥饿现象。
    • 破坏不剥夺条件:当一个进程占有了一部分资源,在申请新的资源而得不到满足时,必须释放所有占有的资源以便让其他进程使用。但这种方法实现起来比较困难,且可能导致工作失效、增加系统开销。
    • 破坏环路等待条件:采用资源有序分配法,对所有资源排序编号,所有进程对资源的请求必须严格按资源序号递增的顺序提出,即只有占用了小号资源才能申请大号资源。这种策略可以破坏环路等待条件,从而预防死锁的发生。
  2. 死锁避免

           死锁避免方法允许系统中同时存在死锁的三个必要条件,即互斥、占有且等待和非抢占。每当进程提出资源申请时,系统分析满足该资源请求时系统是否会发生死锁,若不会发生则实施分配,否则拒绝分配。银行家算法就是一种避免死锁的方法,它模拟银行家贷款的策略来分配系统资源,以确保系统始终处于安全状态。
  3. 死锁检测与解除

           死锁检测和解除对资源分配不加任何限制,也不采取死锁避免措施。系统定时运行一个“死锁检测”程序,如果检测到系统发生了死锁,再采取措施解除它。解除死锁的方法包括立即结束所有进程的执行并重新启动操作系统、剥夺陷于死锁的进程占用的资源但不撤销它直到死锁解除、撤销陷于死锁的所有进程并解除死锁继续运行等。此外,还可以使用进程-资源分配图来检测系统是否处于死锁状态,并采取相应的措施来解除死锁。

五、总结

       死锁是操作系统中一个复杂且重要的问题。为了避免和解决死锁问题,我们需要深入理解死锁的产生原因和必要条件,并采取相应的预防、避免、检测和解除策略。在实际应用中,我们需要根据系统的具体需求和特点选择合适的策略来确保系统的稳定性和可靠性。

 结语     

艺术并非模仿生活

而是生活在模仿艺术

!!!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

el-table行合并及合并后序号处理

效果图 <el-tableclass"ncky-detail-table"v-loading"tableLoading"border:data"tableDataVo":span-method"objectSpanMethod"row-key"uniqueFlag":row-class-name"tablerowclassname"><el-table-column…

【Python】使用Selenium的find_element模块获取网页上的大段文字和表格的方法(建议收藏!)

发现了一个使用Selenium的find_element模块&#xff0c;快速获取文字和表格的方法&#xff0c;很实在&#xff0c;以后爬网的时候&#xff0c;就不用beautifulSoup 和 pandas的read_html 混起来用了&#xff01; 文字部分&#xff1a;实现网络节点下&#xff0c;某个节点下的其…

24秋:模式识别:答题第一波除解析

判断题&#xff1a; T 模式识别中的人脸识别问题是根据已知数据类别预测未知数据类别的问题。F 人脸图像在计算机中是以矩阵的方式存储的。F 训练集和测试集有交集。T 算法&#xff08;模型&#xff09;是以样本所包含的信息为基础&#xff0c;对总体的某些特征进行判断、预测…

【蓝桥杯每日一题】推导部分和——带权并查集

推导部分和 2024-12-11 蓝桥杯每日一题 推导部分和 带权并查集 题目大意 对于一个长度为 ( N ) 的整数数列 ( A 1 , A 2 , ⋯ , A N A_1, A_2, \cdots, A_N A1​,A2​,⋯,AN​ )&#xff0c;小蓝想知道下标 ( l ) 到 ( r ) 的部分和 ∑ i l r A i A l A l 1 ⋯ A r \su…

<项目代码>YOLOv8 车牌识别<目标检测>

项目代码下载链接 &#xff1c;项目代码&#xff1e;YOLOv8 车牌识别&#xff1c;目标检测&#xff1e;https://download.csdn.net/download/qq_53332949/90121387YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题…

STM32 CubeMx HAL库 独立看门狗IWDG配置使用

看门狗这里我就不多介绍了&#xff0c;能搜到这篇文章说明你了解 总之就是一个单片机重启程序&#xff0c;设定好超时时间&#xff0c;在超时时间内没有喂狗&#xff0c;单片机就会复位 主要应用在单片机异常重启方面&#xff0c;比如程序跑飞&#xff08;注意程序跑飞时你就…

实现某海外大型车企(T)Cabin Wi-Fi 需求的概述

最近参与某海外大型车企&#xff08;T&#xff09;的 Wi-Fi 功能需求开发&#xff0c;T 提出了一个 Cabin Wi-Fi 的概念&#xff0c;首先我们先对 Cabin Wi-Fi 进行一个较全面的了解。 1. Cabin Wi-Fi 概念概述 Cabin Wi-Fi 通常指用于飞机客舱、火车车厢、豪华巴士或船舶上的无…

OpenAI直播发布第4天:ChatGPT Canvas全面升级,免费开放!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…

【Linux课程学习】:第二十一弹---深入理解信号(中断,信号,kill,abort,raise,larm函数)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux课程学习 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ Linux学习笔记&#xff1a; https://blog.csdn.…

2021 年 6 月青少年软编等考 C 语言四级真题解析

目录 T1. 数字三角形问题思路分析T2. 大盗思路分析T3. 最大子矩阵思路分析T4. 小球放盒子思路分析T1. 数字三角形问题 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。 注…

购物车案例--分模块存储数据,发送请求数据渲染,底部总计数量和价格

shift鼠标右键&#xff0c;打开powershell&#xff0c;新建项目 自定义 只有一个页面&#xff0c;不涉及路由&#xff0c;勾选vuex,css,babel 无需保存预设 回车项目开始创建 项目用vscode打开 将src里的内容全部清空 将第七天的课程准备代码复制粘贴到src中 刷新页面&…

内网是如何访问到互联网的(华为源NAT)

私网地址如何能够访问到公网的&#xff1f; 在上一篇中&#xff0c;我们用任意一个内网的终端都能访问到百度的服务器&#xff0c;但是这是我们在互联网设备上面做了回程路由才实现的&#xff0c;在实际中&#xff0c;之前也说过运营商是不会写任何路由过来的&#xff0c;那对于…

C++编程: 基于cpp-httplib和nlohmann/json实现简单的HTTP Server

文章目录 0. 引言1. 完整实例代码2. 关键实现3. 运行与测试 0. 引言 本文基于 cpp-httplib 和 nlohmann/json 实现简单的 HTTPS Server 实例代码&#xff0c;这两个库均是head-only的。 1. 完整实例代码 如下实例程序修改自example/server.cc #include <httplib.h>#i…

收银pos源代码(Win版+安卓版)

1.收银pos版本 支持市面上主流系统版本&#xff0c;如支持win版&#xff08;exe安装包&#xff09;、安卓版&#xff08;apk安装包&#xff09;&#xff1b; 2.多样化收银 支持Windows收银机、安卓收银机、ai智能称重、收银称重一体机、无人自助收银、手机端收银等&#xff…

springboot项目如何运行起来

时常开发好的springboot项目是如何运行起来的&#xff1f; 经常会使用到打包插件spring-boot-maven-plugin SpringBoot提供了一个插件spring-boot-maven-plugin用于把程序打包成一个可执行的jar包。在pom文件里加入这个插件即可&#xff1a; org.springframework.boot spring-b…

ubuntu18.04配置实时内核

ubuntu系统&#xff1a;18.04 当前内核&#xff1a;5.4.0-84-generic 待安装实时内核&#xff1a; 5.6.19-rt11 1、查看当前版本 uname -r 2、下载内核与补丁 一种方式从官网自己下载 官方内核下载地址官方补丁下载地址阿里镜像内核下载地址&#xff08;速度快&#xff0…

Centos7环境下安装Flink1.20

目录 介绍1、涉及安装包2、节点3、修改hostname4、将flink安装包上传并解压5、修改配置文件6、修改masters和workers&#xff08;所有节点&#xff09;7、集群启停 介绍 Flink 是一个分布式系统&#xff0c;需要有效分配和管理计算资源才能执行流应用程序。它集成了所有常见的…

EXCEL数据清洗的几个功能总结备忘

目录 0 参考教材 1 用EXCEL进行数据清洗的几个功能 2 删除重复值&#xff1a; 3 找到缺失值等 4 大小写转换 5 类型转化 6 识别空格 0 参考教材 精通EXCEL数据统计与分析&#xff0c;中国&#xff0c;李宗璋用EXCEL学统计学&#xff0c;日EXCEL统计分析与决策&#x…

深入解析Vue3响应式系统:从Proxy实现到依赖收集的核心原理

深入解析Vue3响应式系统&#xff1a;从Proxy实现到依赖收集的核心原理 响应式系统的基本原理 作为一个热门的JavaScript框架&#xff0c;Vue在3.x版本中引入了基于Proxy的响应式系统。这个系统的核心思想是利用Proxy对象拦截对数据的访问和修改&#xff0c;从而实现数据的自动更…

Visual Studio 2022 安装和管理 GitHub Copilot

文章目录 前言一、&#x1f6e0;️安装 GitHub Copilot1.1 安装 GitHub Copilot Chat1.2 使用 Visual Studio 安装程序进行安装1.3 使用“管理扩展”对话框进行安装&#xff08;推荐&#xff09; 二、&#x1f3ad;管理 Copilot 状态2.1 Copilot 处于活动状态2.2 Copilot 处于非…