操作系统死锁 四个必要条件

2023-05-16

操作系统死锁 四个必要条件

1. 死锁:如果一组进程中的每一个进程都在等待仅由该组进程中的其它进程才能引发的事件,那么该组进程是死锁的。

2. 产生死锁的原因:

(1)竞争不可抢占性资源。

(2)竞争可消耗资源。

当系统中供多个进程共享的资源如打印机,公用队列等,其数目不足以满足诸进程的需要时,会引起诸进程对资源的竞争而产生死锁。

(3)进程推进顺序不当。

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

如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。

  一个线程也可引起死锁。

3. 产生死锁的四个必要条件:

(1) 互斥条件:一个资源每次只能被一个进程使用。

(2) 请求和保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。

(3) 不可抢占条件:进程已获得的资源,在末使用完之前,不能强行剥夺,只能在进程使用完时由自己释放。

(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。因此可以写下如下的预防死锁的方法。

4.避免死锁的方法:

(1)破坏“互斥”条件:就是在系统里取消互斥。若资源不被一个进程独占使用,那么死锁是肯定不会发生的。但一般“互斥”条件是无法破坏的。因此,在死锁预防里主要是破坏其他三个必要条件,而不去涉及破坏“互斥”条件。

(2)破坏“请求和保持”条件:在系统中不允许进程在已获得某种资源的情况下,申请其他资源。即要想出一个办法,阻止进程在持有资源的同时申请其他资源。

方法一:所有进程在运行之前,必须一次性地申请在整个运行过程中所需的全部资源。这样,该进程在整个运行期间,便不会再提出资源请求,从而破坏了“请求”条件。系统在分配资源时,只要有一种资源不能满足进程的要求,即使其它所需的各资源都空闲也不分配给该进程,而让该进程等待。由于该进程在等待期间未占有任何资源,于是破坏了“保持”条件。

该方法优点:简单、易行且安全。

缺点:

  1. 资源被严重浪费,严重恶化了资源的利用率。

  2. 使进程经常会发生饥饿现象。

方法二:要求每个进程提出新的资源申请前,释放它所占有的资源。这样,一个进程在需要资源S时,须先把它先前占有的资源R释放掉,然后才能提出对S的申请,即使它可能很快又要用到资源R。

(3)破坏“不可抢占”条件:允许对资源实行抢夺。
方法一:如果占有某些资源的一个进程进行进一步资源请求被拒绝,则该进程必须释放它最初占有的资源,如果有必要,可再次请求这些资源和另外的资源。
方法二:如果一个进程请求当前被另一个进程占有的一个资源,则操作系统可以抢占另一个进程,要求它释放资源。只有在任意两个进程的优先级都不相同的条件下,该方法才能预防死锁。

(4)破坏“循环等待”条件:将系统中的所有资源统一编号,进程可在任何时刻提出资源申请,但所有申请必须按照资源的编号顺序(升序)提出。这样做就能保证系统不出现死锁。

利用银行家算法避免死锁:

银行家算法:

设进程i提出请求Request[j],则银行家算法按如下规则进行判断。

(1) 如果Request[j]≤Need[i,j],则转向(2),否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。

(2) 如果Request[j]≤Available[j],则转向(3);否则表示尚无足够资源,Pi需等待。

(3) 假设进程i的申请已获批准,于是修改系统状态:

Available[j]=Available[j]-Request[i]

Allocation[i,j]=Allocation[i,j]+Request[j]

Need[i,j]=Need[i,j]-Request[j]

(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。

安全性算法:

(1) 设置两个工作向量Work=Available;Finish[i]=False

(2) 从进程集合中找到一个满足下述条件的进程,

 Finish [i]=False;

 Need[i,j]≤Work[j];

 如找到,执行(3);否则,执行(4)

(3) 设进程获得资源,可顺利执行,直至完成,从而释放资源。

Work[j]=Work[j]+Allocation[i,j];

Finish[i]=True;

Go to step 2;

(4) 如所有的进程Finish[i]=true,则表示安全;否则系统不安全。

5. 死锁的解除:

一旦检测出死锁,就应立即釆取相应的措施,以解除死锁。死锁解除的主要两种方法:

  1. 抢占资源。从一个或多个进程中抢占足够数量的资源,分配给死锁进程,以解除死锁状态。

  2. 终止(或撤销)进程。终止(或撤销)系统中的一个或多个死锁进程,直至打破循环环路,使系统从死锁状态解脱出来。

总结:

  一般情况下,如果同一个线程先后两次调用lock,在第二次调用时,由于锁已经被占用,该线程会挂起等待别的线程释放锁,然而锁正是被自己占用着的,该线程又被挂起而没有机会释放锁,因此就永远处于挂起等待状态了,这叫做死锁(Deadlock)。另⼀一种典型的死锁情形是这样:线程A获得了锁1,线程B获得了锁2,这时线程A调⽤用lock试图获得锁2,结果是需要挂起等待线程B释放锁2,而这时线程B也调⽤用lock试图获得锁1,结果是需要挂起等待线程A释放锁1,于是线程A和B都永远处于挂起状态了。

注意:

  写程序时应该尽量避免同时获得多个锁,如果一定有必要这么做,则有一个原则:如果所有线程在需要多个锁时都按相同的先后顺

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

操作系统死锁 四个必要条件 的相关文章

  • 用 Docker 部署一个 Python 应用

    Flask项目 这里为了演示的方便 xff0c 我们就写一个简单的Flask项目 xff0c 代码如下 from flask import Flask app 61 Flask name 64 app route 39 39 def ind
  • Realsence D455标定并运行Vins-Fusion

    文章目录 一 双目相机标定1 标定板准备1 1 打印标定板1 2 标定板信息原始pdf的格子参数是 xff1a 调整后的格子参数是 xff1a 2 左右目相机数据准备2 1 修改rs camera launch内容2 2 关闭结构光2 3
  • 【Linux命令】文件和目录权限

    Linux命令 文件和目录权限 权限查看 众所周知 xff0c 可以使用 ls l 来查看文件和目录的详细信息 xff0c 那么输出的东西是什么呢 xff1f 我们先来看 文件类型 xff1a xff1a 普通文件 xff1b d xff1
  • 【设计模式】单例模式

    设计模式 单例模式 1 为什么要用单例 xff1f 单例设计模式 xff08 Singleton Design Pattern xff09 xff1a 一个类只允许创建一个对象 xff08 或实例 xff09 1 1 处理资源访问冲突 例如
  • 【JAVA】基础语法

    JAVA 基础语法 JAVA面向对象三大特征 封装 继承 多态 1 类型转换 1 1 自动类型转换 自动类型转换 类型范围小的变量 可以直接赋值给类型范围大的变量 1 2 表达式的自动类型转换 在表达式中 小范围类型的变量会自动转换成当前较
  • 【Java技巧】如何在HashMap中插入重复的key?

    Java技巧 如何在HashMap中插入重复的key xff1f 问题引出 我们都知道 xff0c Map 的 key 需要保证唯一性 插入重复的 key 会被最后插入的 key 所覆盖 xff0c 如 xff1a span class t
  • ArrayList源码分析

    ArrayList源码分析 注意 本笔记分析对象为 Java8 版本 随版本不同 源码会发生变化 1 ArrayList类图与简介 ArrayList是一个 非线程安全 基于数组实现的一个动态数组 可以看到 它的顶层接口是 Collecti
  • Vector源码分析

    Vector源码分析 1 Vector基本介绍与类图 Vector 类实现了一个动态数组 和 ArrayList 很相似 但是两者是不同的 Vector 是同步访问的 Vector 包含了许多传统的方法 这些方法不属于集合框架 Vector
  • LinkedList源码分析

    LinkedList源码分析 注意 本笔记分析对象为 Java8 版本 随版本不同 源码会发生变化 基本介绍与类图 LinkedList 同时实现了 List 接口和 Deque 对口 也就是收它既可以看作一个顺序容器 又可以看作一个队列
  • 【网管日记】Linux防火墙操作

    网管日记 Linux防火墙操作 记录一下常用的Linux防火墙操作 xff1a 查看防火墙状态 systemctl status firewalld 或 firewall cmd state暂时关闭防火墙 systemctl stop fi
  • (毕业设计资料)基于51单片机的智能窗控制系统设计

    实现参考功能 1 可实时显示年月日 时分秒 光照强度和控制模式 xff1b 2 可通过手动控制窗帘的开启和关闭 xff1b 3 可通过设置开启和关闭时间来控制窗帘 xff1b 4 可通过检测光照强度的亮暗来控制窗帘 xff1b 5 使用步进
  • 网络操作系统 第十二章 FTP服务器的安装与配置

    习题 1 简述FTP的连接模式 FTP的连接模式有PORT和PASV两种 xff0c 其中PORT模式是主动模式 xff0c PASV是被动模式 xff0c 这里所说的主动和被动都是相对于服务器而言的 如果是主动模式 xff0c 数据端口为
  • 【网管日记】MySQL主从复制

    MySQL主从复制 基本介绍 MySQL 主从复制是一个异步的复制过程 xff0c 底层是基于 Mysql 数据库自带的 二进制日志 功能 一台或多台 MySQL 数据库 xff08 slave xff0c 即 从库 xff09 从另一台
  • 【网管日记】Nginx基本介绍、安装与使用

    Nginx基本使用 基本介绍 Nginx是一款轻量级的Web服务器 反向代理服务器及电子邮件 xff08 IMAP POP3 xff09 代理服务器 其特点是 占用内存少 xff0c 并发能力强 xff0c 事实上nginx的并发能力在同类
  • 【网管日记】Nginx报错踩坑记录

    网管日记 Nginx报错踩坑记录 1 防火墙没关闭 自启 error 21113 0 21 connect failed 113 No route to host while connecting to upstream 解决方法 xff1
  • 【数据结构与算法】Manacher算法

    Manacher算法 https github com SongJianHIT DataStructurs Algorithm tree main src algorithms manacher 基本介绍 Manacher 算法常用于 求一
  • 【数据结构与算法】DP路径问题

    问题 xff1a 最小路径和 给定一个包含非负整数的 m x n 网格 grid xff0c 请找出一条从左上角到右下角的路径 xff0c 使得路径上的数字总和为最小 说明 xff1a 每次只能向下或者向右移动一步 示例 1 xff1a 输
  • 【Java开发】Dependency ‘XXX‘ not found

    Java开发 Dependency XXX not found 在配置 pom 文件时 xff0c 遇到 Dependency 39 com google guava guava 30 0 jre 39 not found 方法一 xff1
  • 【Mysql】日期函数总结

    Mysql 日期函数总结 1 获取日期时间函数 1 1 获取当前日期时间 span class token keyword SELECT span span class token function NOW span span class
  • 【Java开发笔记】线程池

    Java开发笔记 线程池 线程池 ThreadPoolExecutor 的七大核心参数 xff1a 核心线程数 corePoolSize最大线程数 maxinumPoolSize超过核心线程数的闲余线程存活时间 keepAliveTime存

随机推荐

  • 【Java开发笔记】分库分表

    Java开发笔记 分库分表 1 分库分表基本概述 为什么要分库分表 xff1f 性能角度 分库分表就是为了解决由于数据量多大而导致数据库性能下降的问题 xff1a 原来独立的数据库拆分成若干数据库组成将原来的大表 xff08 存储近千万数据
  • 【网关日记】配置阿里云容器镜像加速

    运行 xff1a sudo mkdir p etc docker sudo tee etc docker daemon json lt lt 39 EOF 39 34 registry mirrors 34 34 https qbd2mty
  • 【毕业设计】基于51单片机的智能窗帘设计(原理图+原理图+仿真+论文)

    按键1 xff1a 加 xff08 手动开启窗帘 按键2 xff1a 减 xff08 手动关闭窗帘 xff09 按键3 xff1a 进入定时模式开启时间和光控阈值数值大小的开启 按键4 xff1a 进入当前时间的设置 xff08 年 月 日
  • 【MySQL】基本架构与执行过程

    MySQL 基本架构与执行过程 1 日志 MySQL 是通过文件系统对数据索引后进行存储的 xff0c MySQL 从物理结构上可以分为 日志文件 和 数据及索引文件 MySQL 在 Linux 中的数据索引文件和日志文件通常放在 var
  • 【MySQL】InnoDB存储引擎

    MySQL InnoDB存储引擎 1 存储引擎的种类 常见的有三种 xff1a 存储引擎说明InnoDB5 5 版本后 MySQL 的 默认数据库存储引擎 xff0c 支持事务和行级锁 xff0c 比 MyISAM 处理 xff0c 速度稍
  • 【PCL自学:Feature5】视点特征直方图VFH概念及使用 (持续更新)

    一 视点特征直方图 xff08 VFH xff09 原理 这篇博文描述了视点特征直方图 Viewpoint Feature Histogram VFH 描述符 xff0c 在一些其他文章也称为视角特征直方图 xff0c 这是一种用于聚类识别
  • ubuntu18+jetson nano +px4+ros <——>QGC+ubuntu20+ros(关于仿真和实物运行的持续记录心得)

    持续更新 写在前面 xff1a 1 如果存在rosdep问题参考Ubuntu20 04ROS rosdep update超时失败解决方法 npu2018302257的博客 CSDN博客 2 如果存在一些github com或者是raw gi
  • [学习记录]realsence d455 +vins-fusion+px4+ego_planner下无人机的悬停与控制

    写在前面 xff1a 持续更新修改 my env xff1a ubuntu20 my pixhawk xff1a 2 4 8 my px4 firmware xff1a 1 9 0 stablepx4fmu v2 1 6 0 px4v 经济
  • 通过ROS的 nmea_navsat_driver包发布GPS坐标

    通过nmea navsat driver包发布GPS坐标 0 硬件及基本环境1 接通硬件并测试1 1 打开一个终端 xff0c 修改端口的读写权限1 2 用cutecom读取串口数据 2 安装 nmea navsat driver 及 下载
  • samba服务

    一 简单介绍 NFS网络文件系统是不能跨操作系统使用的 xff0c 至少说现在跨windows和linux之间完成文件系统级的共享nfs是无法完成的 xff0c 据说在上个世纪90年度的时候 xff0c 在澳大利亚有一个大学生就面临这样的现
  • 近期尝试UR5和PhantomOmni的联动仿真出现的问题

    近期尝试UR5和PhantomOmni的联动仿真出现的问题 最近在Github找到了几个代码 xff0c 虽然代码是好几年前的 xff0c 但经过尝试编译后有部分可以用 xff0c 有部分有问题 xff0c 现在拿一个来解释一下几年前的RO
  • 解决Linux系统不能上网问题

    解决Linux系统不能上网问题 相信很多Linux的萌新们 xff0c 初次安装LInux 系统后会为不能上网而烦恼 这一问题表现为 xff1a 能连到wifi但就是上不了网 xff01 xff01 xff01 导致这一问题的原因是 xff
  • C语言——蔡勒(Zeller)公式的使用

    C语言 蔡勒公式的使用 蔡勒公式简介 xff1a 蔡勒 xff08 Zeller xff09 公式 xff0c 是一个计算星期的公式 xff0c 随便给一个日期 xff0c 就能用这个公式推算出是星期几 计算公式 xff1a 核心公式 xf
  • 基于单片机定时智能窗帘控制系统设计-毕业资料

    资料下载地址 1022 xff08 百度网盘 xff09 xff1a 点击下载 智能窗户 AT89S52 1602显示 步进电机转动模拟开窗关窗 xff08 1 xff09 手动控制 xff1a 该功能是根据用户的需求通过按键进行窗帘的开关
  • windows10下安装ubuntu子系统

    windows10下安装ubuntu子系统 在win10上使用Ubuntu除了使用虚拟机外 xff0c 还有一种官方支持的Linux子系统模式 子系统上的流畅度比虚拟机高出了不知多少 xff01 经过多次尝试才成功配置 废话不多说 xff0
  • Windows10系统下的WSL+Ubuntu图形桌面配置

    Windows10系统下的WSL 43 Ubuntu图形桌面配置 参考 xff1a windows10下安装Ubuntu子系统 Windows下安装VcXsrv WSL Ubuntu下安装xfce desktop span class to
  • C++:什么是STL?

    什么是STL xff1f 1 STL概论1 1 STL基本概念1 2 STL六大组件简介1 3 STL优点 2 STL三大组件2 1 容器2 2 算法2 3 迭代器2 3 案例 1 STL概论 长久以来 xff0c 软件界一直希望建立一种可
  • makefile中.PHONY的作用是什么?

    makefile中 PHONY的作用是什么 xff1f 初学makefile的时候 xff0c 有一个关键字 PHONY 搞不懂 xff0c 在请教过同学之后豁然开朗 xff0c 遂写下经验望帮助更多的同学能够理解 在某度可以搜到phony
  • TCP和UDP的区别

    TCP和UDP的区别 1 TCP 是什么2 UDP 是什么3 TCP 和 UDP 的不同 1 TCP 是什么 TCP 的全称是Transmission Control Protocol xff0c 传输控制协议 它能够帮助你确定计算机连接到
  • 操作系统死锁 四个必要条件

    操作系统死锁 四个必要条件 1 死锁 xff1a 如果一组进程中的每一个进程都在等待仅由该组进程中的其它进程才能引发的事件 xff0c 那么该组进程是死锁的 2 产生死锁的原因 xff1a xff08 1 xff09 竞争不可抢占性资源 x