操作系统复习2.4.0-死锁详解

news2024/10/7 4:23:10

什么是死锁

各进程互相竞争对手里的资源,导致各进程都阻塞,都无法向前推进

死锁、饥饿、死循环的区别

死锁:各进程互相持有对方想要的资源且不释放,导致各进程阻塞,无法向前推进
饥饿:由于长期得不到想要的资源,某进程无法向前推进
死循环:某进程执行某个过程一直跳不出某个循环的现象

死锁产生的四个必要条件

  • 互斥:不互斥不会死锁
  • 不剥夺:进程所持有的资源不能被其他进程强行夺走
  • 请求和保持:进程至少持有了一个资源,但同时申请新的资源,不释放已持有资源
  • 循环等待:存在一个进程资源循环等待链,即每个进程申请的资源已被上一个进程持有,已持有资源被下一个进程申请

什么时候发生死锁

  • 竞争不可剥夺资源
  • 进程推进顺序非法,请求和释放资源的顺序不当
  • 信号量使用不当,如互斥在同步之前

死锁处理策略

  • 预防死锁:破坏四个条件其一或多个
  • 避免死锁:银行家算法,避免死锁出现
  • 死锁的检测和解除:允许死锁出现,但会检测死锁的发生并采取措施解除死锁

预防死锁

破坏互斥条件

互斥资源变为共享资源,如SPOOLing技术改造打印机,设置空闲缓冲区存储要打印的数据,并为用户申请并填写请求打印表,将此表挂到请求打印队列上,当打印机空闲则从队列中取表,开始打印

破坏不可剥夺条件

不剥夺条件:其他进程不能强行剥夺进程持有的资源

  • 当某个进程请求资源得不到满足时,立即释放保持的所有资源,等需要时再重新申请
  • 当某个进程需要的资源被其他进程所占有时,可通过操作系统强行剥夺想要的资源

缺点:实现复杂 ,释放持有资源会导致一部分工作失效,反复申请和释放资源会增加系统开销,降低系统吞吐量,有可能综测饥饿

破坏请求和保持条件

静态分配,一次性分配所需全部资源,不然不让他投入运行,运行期间一直归他所有
实现简单,但缺点明显
一部分资源可能只需要使用很短时间,但长期持有造成了浪费,资源利用率低和可能造成进程饥饿

破坏循环等待条件

顺序资源分配法:编号资源,规定每个进程必须按编号递增的顺序请求资源,即持有a号资源,则只能申请大于a的号的资源
缺点在新增设备困难, 编号不方便,实际使用顺序可能不按着递增来,编程困难

避免死锁

安全序列

按照这样的序列分配资源,不会死锁

几种状态间的联系

安全序列不会发生死锁,有安全序列就是安全状态,没有则是不安全状态
不安全状态可能发生死锁,安全序列可能有多个
死锁一定是发生在不安全状态

银行家算法

在这里插入图片描述

通过预分配找出安全序列

死锁的检测和解除

死锁的检测

在这里插入图片描述
如果这样的图能最后消除所有边,则称是可完全简化的,一定不会死锁,否则会发生死锁

通过图记录资源的请求和分配信息,通过算法检测是否处于死锁状态
在这里插入图片描述

死锁的解除

在这里插入图片描述

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

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

相关文章

Chatbot + 知识库(Knowledge Base)

从 GPT-3 和 ChatGPT 等大型语言模型 (LLM) 的最新进展中可以看出,在技术行业引起了很大的关注。这些模型对内容生成非常强大,但它们也有一些缺点,例如偏差1 和幻象2。LLM在聊天机器人开发方面特别有用。 基于意图的聊天机器人​ 传统聊天机…

Redis中的压缩列表(ZipList)

前言 压缩列表的最大特点,就是它是一种内存紧凑型的数据结构,占用一块连续的内存空间,而且还会根据数据类型的不同,选择不同的编码方式来节省内存。 压缩列表的缺点也很明显 它查询节点只能一个一个查,所以时间复杂…

用springboot创建helloworld项目

目录 一、什么是springboot 二、使用idea构建springboot (1)下载idea (2)在idea配置maven (3)利用springboot构建1个helloworld的web项目​编辑​编辑 ​编辑 (4)启动springboot…

软考A计划-电子商务设计师-电子商务系统的测试

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

Zinx框架学习 - 消息队列及多任务

Zinx - V0.8 消息队列及多任务 之前zinxV0.7我们已经实现了读写分离,对应每个client,我们有3个go程,分别是reader、writer、DoMsgHandle假设服务器有10W个client请求,那么server就会有10W个reader的go、10W个writer的go程&#x…

python编程——环境搭建

作者:Insist-- 个人主页:insist--个人主页 本文专栏:python专栏 专栏介绍:本专栏为免费专栏,并且会持续更新python基础知识,欢迎各位订阅关注。 目录 一 、安装python 1、进入官网下载python 2、打开安装…

【AI4DB】商用数据库-使用AI4DB技术并商用的数据库总结

目录 1.Amazon Redshift参考链接: 2.阿里云-DAS-Database Autonomy Service参考链接: 3.Oracle Autonomous Database参考链接: 4.阿里云-MaxCompute(原ODPS)参考文档: 5.腾讯云——DBbrain参考链接&#xf…

python 算符优先分析法的设计实现 编译原理

本文内容&#xff1a; 1、给出文法如下: G[E] E->T|ET; T->F|T*F; F->i|(E); 可以构造算符优先表如下: *()i><<><*>><><(<<<<)>>>i>>> 2、计算机中表示上述优先关系&#xff0c;优先关系的机内存放…

飞桨花滑骨骼点动作识别比赛——从 baseline 调优讲解

赛题介绍背景数据集 思路讲解backbone 模型文件结构 -- PaddleVideo 框架configs 文件夹paddlevideo 文件夹 模型介绍1. ST-GCN -- Baseline 模型整体结构GCN部分TCN部分 2. 2s-AGCN自适应图卷积双流网络 3. CTR-GCNCTR-GC 赛题介绍 背景 2021 CCF BDCI 基于飞桨实现花样滑冰…

初识JavaScript---(1)

初识JavaScript———&#xff08;1&#xff09;&#xff01;&#xff01;&#xff01; 一、初识JavaScript 1.什么是JavaScript&#xff1f; JavaScript是运行在浏览器上的脚本语言&#xff0c;简称JS。JavaScript程序不需要我们程序员手动编译&#xff0c;编写完源代码之后…

shell编程-02-变量作用域

作用域 局部变量&#xff1a;变量只能在函数内部使用 全局变量&#xff1a;变量可以在当前 Shell 进程中使用 环境变量&#xff1a;变量还可以在子进程中使用 局部变量 函数中定义的变量默认是全局变量&#xff0c;在定义时加上local命令&#xff0c;此时该变量就成了局部变…

Spring系列-10 事务机制

背景&#xff1a; 在 事务-1 事务隔离级别和Spring事务传播机制 中对事务的特性、隔离级别、Spring事务的传播机制结合案例进行了分析&#xff1b;在 事务-2 Spring与Mybatis事务实现原理 中对JDBC、Mybatis、Spring整合Mybatis实现事务的原理结合框架源码进行了介绍&#xff…

如何免费使用GPT-4模型

一、引言 OpenAI 最近发布了ChatGPT最新的 GPT-4 模型&#xff0c;这是 OpenAI 迄今为止发布的最强大的语言模型系统。它不仅有视觉能力&#xff0c;而且是多模态的&#xff0c;可以解释文本和生成图像。此外&#xff0c;它在推理测试中表现良好&#xff0c;可以支持大约26种不…

Redis的ZipList和QuickList和SkipList和RedisObject

ZipList:压缩列表&#xff0c;为了节省内存而设计的一种数据结构 ZipList是一种特殊的双端链表&#xff0c;是由一系列的特殊编码的连续内存块组成&#xff0c;不需要通过指针来进行寻址来找到各个节点&#xff0c;可以在任意一端进行压入或者是弹出操作&#xff0c;并且该操作…

RocketMQ的学习历程(5)----broker内部设计

文章目录 概要整体架构流程技术名词解释CommitLog和ConsumeQueue页缓存和内存映射刷盘机制 小结 概要 在首个学习历程中&#xff0c;我们已经了解了&#xff0c;RokctMQ简单的工作流程。 如果想要更深的理解RokcetMQ消息处理的流程&#xff0c;broker内部流程的理解是必要的&…

【挑战全站最全】Linux系统的安装与配置教程——以CentOS为例

&#x1f680;作者&#xff1a;那个叫马尔的大夫&#x1f680; ⭐专栏&#xff1a;操作系统⭐ &#x1f33c;内容&#xff1a;主要分享一些关于Linux操作系统的知识 &#x1f967;不忘初心&#xff0c;砥砺前行~ 目录 一、用到的软件环境——虚拟机软件&#xff08;必需&#…

调用函数不仅仅只是传递正确的参数类型

这里有一个新手犯下的一个典型错误。 假设&#xff0c;我们想调用这个函数&#xff0c;GetBinaryType。 void sample() { if (GetBinaryType(TEXT(“explorer.exe”), ????)) { … } } 请问&#xff0c;这里的问号处应该传递什么类型的参数&#xff1f;你可能会说&#x…

python、pyqt5实现人脸检测、性别和年龄预测

摘要&#xff1a;这篇博文介绍基于opencv&#xff1a;DNN模块自带的残差网络的人脸、性别、年龄识别系统&#xff0c;系统程序由OpenCv, PyQt5的库实现。如图系统可通过摄像头获取实时画面并识别其中的人脸表情&#xff0c;也可以通过读取图片识别&#xff0c;本文提供完整的程…

设计模式入门:策略模式

现有一套模拟鸭子游戏&#xff0c;可以一边游泳&#xff0c;一边呱呱叫。 每种鸭子都会呱呱叫和游泳&#xff0c;只是外观不同。因此&#xff0c;quack和swim放在父类中&#xff0c;display放在子类中实现。 增加新的功能&#xff1a;鸭子飞翔。 1 我们可能想到直接在父类中增…

LeetCode——最小化字符串长度

目录 一、题目 二、题目解读 三、代码 1、set去重 2、用一个二进制数记录每个字母是否出现过 一、题目 6462. 最小化字符串长度 - 力扣&#xff08;Leetcode&#xff09; 给你一个下标从 0 开始的字符串 s &#xff0c;重复执行下述操作 任意 次&#xff1a; 在字符串…