操作系统(1) - 死锁的四个必要条件及避免

2023-11-05

一、什么是死锁

死锁是指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。

二、死锁产生的原因

1. 系统资源的竞争

系统资源的竞争导致系统资源不足,以及资源分配不当,导致死锁。

2. 进程运行推进顺序不合适

进程在运行过程中,请求和释放资源的顺序不当,会导致死锁。

三、死锁的四个必要条件

  • 互斥条件:一个资源每次只能被一个进程使用,即在一段时间内某 资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。
  • 请求与保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源 已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
  • 不可剥夺条件: 进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能 由获得该资源的进程自己来释放(只能是主动释放)。
  • 循环等待条件: 若干进程间形成首尾相接循环等待资源的关系

这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。

 

四、 死锁的避免与预防

1. 死锁避免

死锁避免的基本思想:系统对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,如果分配后系统可能发生死锁,则不予分配,否则予以分配,这是一种保证系统不进入死锁状态的动态策略。 
如果操作系统能保证所有进程在有限时间内得到需要的全部资源,则系统处于安全状态否则系统是不安全的。

    1. 安全状态是指:如果系统存在 由所有的安全序列{P1,P2,…Pn},则系统处于安全状态。一个进程序列是安全的,如果对其中每一个进程Pi(i >=1 && i <= n)他以后尚需要的资源不超过系统当前剩余资源量与所有进程Pj(j < i)当前占有资源量之和,系统处于安全状态则不会发生死锁。
    2. 不安全状态:如果不存在任何一个安全序列,则系统处于不安全状态。他们之间的对对应关系如下图所示:

2. 死锁预防

我们可以通过破坏死锁产生的4个必要条件来 预防死锁,由于资源互斥是资源使用的固有特性是无法改变的。

条件 破坏该条件
互斥条件 不可破坏
请求与保持条件 第一种方法静态分配即每个进程在开始执行时就申请他所需要的全部资源
第二种是动态分配即每个进程在申请所需要的资源时他本身不占用系统资源。
不可剥夺条件 一个进程不能获得所需要的全部资源时便处于等待状态
循环等待条件 采用资源有序分配,将系统中的所有资源顺序编号,将紧缺的,稀少的资源采用较大的编号(一个进程只有获得较小编号的进程才能申请较大编号的进程)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

操作系统(1) - 死锁的四个必要条件及避免 的相关文章

  • Unicode与JavaScript详解

    上个月 我做了一次分享 详细介绍了Unicode字符集 以及JavaScript语言对它的支持 下面就是这次分享的讲稿 一 Unicode是什么 Unicode源于一个很简单的想法 将全世界所有的字符包含在一个集合里 计算机只要支持这一个字
  • 水箱建模最小二乘法_Comsol Multiphysics for Mac(建模仿真软件)

    COMSOL Multiphysics 是一款全球通用的基于高级数值方法和模拟物理场问题的通用软件 拥有 网格划分 研究和优化 求解器 可视化和后处理 仿真 App等相关功能 轻松实现各个环节的流畅进行 它能够解释耦合或多物理现象 附加产品
  • oracle 19c rac asm磁盘绑定的方法

    multipath 通过scsi id udev 通过scsi id oracle AFD 直接绑定后在 dev oracleafd disks 下面生成设备文件 asmcmd afd label OCR1 dev sda init 虚拟机
  • 【华为OD机试真题 JAVA】数组二叉树

    JS版 华为OD机试真题 JS 数组二叉树 标题 数组二叉树 时间限制 1秒 内存限制 262144K 语言限制 不限 二叉树也可以用数组来存储 给定一个数组 树的根节点的值存储在下标1 对于存储在下标N的节点 它的左子节点和右子节点分别存
  • QT-自定义消息提示框,好看大气

    QT 自定义消息提示框 好看大气 前言 一 演示效果 二 关键程序 三 下载链接 前言 原生的QT提示框总是让人觉得难以接受 因此特定重新封装一个类来替换原生的 使用过程跟原生的一致 使用比较方便 一 演示效果 二 关键程序 include
  • PHP常见加密函数(总结)

    1 加密算法汇总 比较常用的算法 md5 加密 crypt 加密 sha1加密 URL编码加密 base64编码加密 信息加密技术分为三类 单项散列加密 对称散列加密 非对称散列加密 1 1单项散列加密 MD5加密 crypt 加密 sha
  • 数据结构——深度优先遍历(DFS)无向连通图

    以下是数据结构中关于深度优先遍历无向连通图的操作 编程风格参考严蔚敏版数据结构 其实深度优先遍历就是二叉树的先序遍历的推广 头文件以及宏定义 include
  • css渐变

    1 线性渐变 是从一个方向到另一个方向的渐变 属性值 background linear gradient 颜色 默认值 从上到下线性渐变 代码 结果 属性延伸 1 改变渐变方向 从下到上 background linear gradien
  • RecyclerView 网格布局是设置分割线

    1 分割线 public class DividerGridItemDecoration extends RecyclerView ItemDecoration private static final int ATTRS new int
  • 在用apt install中如何选择安装路径?

    apt install并不会选择软件包的安装路径 这个路径是在软件包里面记录好路径的相关信息的 一个deb包 只是一堆文件 文件夹的压缩包而已 而这个包里面记录了这些文件 文件夹应该安装的位置 因此 简单点说 你不能够在apt instal
  • 图解多态原理

    虚函数表 class Base public virtual void Func1 cout lt lt Func1 lt lt endl private int b 1 void test Base b cout lt
  • 空间(蓝桥杯)

    空间 本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 小蓝准备用 256MB 的内存空间开一个数组 数组的每个元素都是 32 位 二进制整数 如果不考虑程序占用的空间和维护内存需要的辅助空间 请问 256MB 的空间
  • 定义内部类 继承 AsyncTask 来实现异步网络请求

    异步任务处理 创建内部类 来实现网络异步请求 新建内部类 继承 AsyncTask SuppressLint StaticFieldLeak class RequestNetworkDataTask extends AsyncTask
  • Docker、Portainer、K8S环境搭建

    Docker Portainer K8S环境搭建 安装Docker 安装步骤 安装依赖包 yum install y yum utils device mapper persistent data lvm2 配置阿里云yum源 以便加速下载
  • Vue 安装开发者工具

    1 下载开发者工具 下载地址 http book wiyp top App Vue3开发者工具 谷歌 Vue3 crx 2 打开谷歌浏览器 点击扩展 点击管理扩展程序 3 开启开发者模式 将 Vue3 开发者工具文件拖拽到浏览器中进行安装
  • 设计模式(十三)代理模式

    代理模式也是一种结构性模式 它的主要作用是创建一个现有对象的代理 以便我们能够针对对象的生命周期 访问权限等进行控制 代理模式和适配器模式的区别是 适配器模式主要用于现有接口和新接口之间的转换和衔接 而代理模式对现有接口进行控制 所以代理模
  • 【机器学习】PyTorch如何选择最优初始学习率

    众所周知 机器学习尤其是现在的深度学习 大量的工作都集中在调参上 一个模型能否很好的解决问题 调参占了很大的比重 而学习率又是模型众多超参数中最重要和最容易调节的一个 1 什么是学习率 目前深度学习优化的基本思想是梯度下降法 已经有很多优秀
  • Java DAO模式

    Java DAO模式 Data Access Objects 作用 隔离了数据库访问代码和业务逻辑代码 隔离了数据库连接代码 代码实现 DAO接口 DAO实现 实体类 连接数据库类和关闭数据库连接类
  • 研一寒假C++复习笔记--左值和右值的理解和使用

    目录 1 左值和右值的定义 2 简单理解左值和右值的代码 3 非const引用只能接受左值 1 左值和右值的定义 左值 L Value L理解为 Location 表示可寻 右值 R Value R理解为 Read 表示可读 左值和右值是相
  • 分布式数据库DBLE

    分布式数据库DBLE 第一章 绪论 研究背景 目前 在电商 金融 O2O 零售 电信等行业普遍存在用户基数大 营销活动频繁 核心交易系统响应日益变慢的问题 随着业务数据增长迅速 超过单机数据库的承受极限 制约业务的发展 在电力 气象 农业

随机推荐

  • 07、环境-虚拟机网络设置、开启远程登录

    1 Oracle VM VirtualBox默认网络方式 Oracle VM VirtualBox创建的虚拟机默认使用的是 网络地址转换 端口转发的方式 2 默认虚拟机ip地址不是固定IP 不方便开发 修改Vagrantfile confi
  • LaTeX怎样引用想要的包

    到网上下载相应包 得到 ins文件 官网 https www ctan org pkg 然后cmd运行latex ins即可得到 sty文件 放到LaTeX目录下即可
  • SSL工作原理

    SSL工作原理 关键词 SSL PKI MAC 摘 要 SSL利用数据加密 身份验证和消息完整性验证机制 为基于TCP等可靠连接的应用层协议提供安全性保证 本文介绍了SSL的产生背景 安全机制 工作过程及典型组网应用 缩略语 缩略语 英文全
  • 【Wi-Fi】IEEE 802.11 Standards 之 802.11a/b/g/n/ac/ax初探

    前言 日常在配置家里路由器以及在工作中学习到WiFi相关的知识的时候总是对于WiFi 标准协议 IEEE 802 11的几个版本不太理解 所以本文主要是介绍关于IEEE 802 11 中各个版本的由来和基本含义 各版本WiFi标准协议 IE
  • 剑指 Offer 30. 包含min函数的栈

    剑指 Offer 30 包含min函数的栈 方法一 使用两个栈 class MinStack Deque
  • C++学习(四八九)Could not download aapt2-windows.jar

    问题描述 Android Studio在编译生成Apk时报此错误 解决办法 去掉Gradle的offline模式 点击AndroidStudio的文件 gt 设置 选择Gradle标签页 去掉Offline work前面的对钩
  • BUU 【ACTF2020 新生赛】Include 1 解题大致思路

    1 首先打开靶场环境 看到链接tips 打开tips 2 首先看一下url中有什么东西 看到file 猜测可能是文件包含 3 文件包含读取的是他文件里的内容 要想读取源文件内容 我们可以用base64编码的方式来读文件flag php 构造
  • OAuth2.0原理和理解

    1 oauth简述 oauth本身不是技术 而是一项资源授权协议 重点是协议 Apache基金会提供了针对Java的oauth封装 我们做Java web项目想要实现oauth协议进行资源授权访问 直接使用该封装就可以 2 概述 2 1 官
  • imagenet图片

    imagenet数据集图片大小3 224 224
  • prometheus 添加 login 登录认证界面(nginx + flask 实现)

    前言 prometheus是现在一个比较主流的监控软件 随着容器的普及 prometheus的应用越来越广泛 前面我也有专门讲到prometheus的相关文章 但是跟传统老牌的zabbix监控不一样 prometheus的web UI是没有
  • 从计算机中删除勒索软件的 6 种方法

    勒索软件是一种恶意软件 它会加密计算机上的文件 然后要求付费才能解密它们 对于企业主和个人来说 这可能是一个非常头疼的问题 未能删除勒索软件可能会导致永久性数据丢失 有些信息对企业至关重要 应不惜一切代价防止丢失或损坏 有几种方法可以删除它
  • ajax.parse,GitHub - srhyne/jQuery-Parse: An AJAX wrapper for the Parse.com REST API

    What is it It s a super light weight AJAX wrapper for Parse com s wonderful database service Why did you build it I want
  • 源码学习时间,Window Manager in Android

    今日科技快讯 近日消息 京东百亿补贴被曝已开始少量上线测试 已有用户可看到活动页面 据网友反馈 京东部分商品现已有 百亿补贴 的标签 目前上线的商品包括手机 家电 酒水 食品 服饰等众多品类 作者简介 大家周五好 咱们下周再见 祝大家周末愉
  • vue封装全局loading

    首先创建一个loading文件
  • 运算放大器(运放)介绍

    注意 此处我们采用的是Multisim软件仿真 链接中有详细安装教程 注意 仿真只是数学运算 实际情况的话 就不是数学运算那么简单 有很多复杂的因数在里面 所以具体情况要参照实际电路搭建 比如说 之前我们搭建蔡氏电路的时候 明明1700欧左
  • TCP/IP超详细总结

    网络的基础知识 一 协议 1 简介 在计算机网络与信息通信领域里 人们经常提及 协议 一词 互联网中常用的具有代表性的协议有IP TCP HTTP等 而LAN 局域网 中常用的协议有IPX SPX 等 下面通过通俗一点的方式来解释一下协议
  • 2021-11-01 B1016 关于数字位处理

    B1016刷题 很好 再次格局小了 有被气到 原思路 先把数字从后往前模出个位数来 再依次和要查找的数字比对 关键来了 比对完之后要加一位数嘛 我走了两条歪路 第一条 得出一次相等就把计数的count加一 同时用一个数组p count 存放
  • 解决Linux系统中netWork重启不了

    1 查看主机地址 ip addr link other 后既是主机地址 修改 etc sysconfig network scripts ifcfg ens33 查看HWADDR地址 如果没有 添加 如果和ip addr一致 问题解决 2
  • Android Gradle 7.x升级指南

    最近 升级了一下Android项目的Gradle和targetSdkVersion 本文以升级targetSdkVersion 33和Gradle 7 2进行说明 一 升级targetSdkVersion 首先 我将compileSdkVe
  • 操作系统(1) - 死锁的四个必要条件及避免

    一 什么是死锁 死锁是指多个进程因竞争资源而造成的一种僵局 互相等待 若无外力作用 这些进程都将无法向前推进 二 死锁产生的原因 1 系统资源的竞争 系统资源的竞争导致系统资源不足 以及资源分配不当 导致死锁 2 进程运行推进顺序不合适 进