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

什么是死锁

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

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

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

死锁产生的四个必要条件

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

什么时候发生死锁

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

死锁处理策略

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

预防死锁

破坏互斥条件

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

破坏不可剥夺条件

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

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

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

破坏请求和保持条件

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

破坏循环等待条件

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

避免死锁

安全序列

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

几种状态间的联系

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

银行家算法

在这里插入图片描述

通过预分配找出安全序列

死锁的检测和解除

死锁的检测

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

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

死锁的解除

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

四站精彩回顾 | Fortinet Accelerate 2023·中国区巡展火热进行中

Fortinet Accelerate 2023中国区巡展 上周,Fortinet Accelerate 2023中国区巡展分别走过青岛、南京、长沙、合肥四站,Fortinet携手太平洋电信、亚马逊云科技、中企通信等云、网、安合作伙伴,与各行业典型代表客户,就网安融合、网…

电动葫芦无法运转怎么办?

有关电动葫芦无法起动与运转故障,电动葫芦无法起动怎么办,有没有好的解决办法,检查电源熔丝是否烧断,定子绕组相间短路、接地或断路,以及是否负载过大或传动机械故障等。 电动葫芦无法运转故障怎么办 1、首先&#xf…

C语言基础习题讲解

C语言基础习题讲解 运算符判断简单循环 运算符 1. 设计一个程序, 输入三位数a, 分别输出个,十,百位. (0<a<1000) 样例输入: 251 样例输出: 2 5 1 #include <stdio.h> int main() {int input 0;int x 0;int y 0;int z 0;scanf("%d", &input);x …

7 种常见的路由协议

网络路由是网络通信的重要组成部分&#xff0c;通过互联网将信息从源地址移动到目的地的过程。路由发生在 OSI 模型的第 3 层&#xff08;网络层&#xff09;。实际网络中通常会将静态和动态路由结合使用。静态路由适用于小型网络&#xff0c;而动态路由适用于大型网络。 什么…

界面控件DevExpress ASP.NET新主题——Office 365暗黑主题的应用

DevExpress ASP.NET Web Forms Controls拥有针对Web表单&#xff08;包括报表&#xff09;的110种UI控件&#xff0c;DevExpress ASP.NET MVC Extensions是服务器端MVC扩展或客户端控件&#xff0c;由轻量级JavaScript小部件提供支持的70个高性能DevExpress ASP.NET Core Contr…

华为路由器 IPSec VPN 配置

需求&#xff1a; 通过 IPSecVPN 实现上海与成都内网互通 拓扑图如下&#xff1a; 一、首先完成网络配置 1、R1 路由器设置 <Huawei>sys [Huawei]sys R1 [R1]un in en# 开启DHCP [R1]dhcp enable# 设置内网接口 [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip addr 10.…

Git日常使用技巧 - 笔记

Git日常使用技巧 - 笔记 Git是目前世界上最先进的分布式版本控制系统 学习资料 廖雪峰 学习视频 https://www.bilibili.com/video/BV1pX4y1S7Dq/?spm_id_from333.337.search-card.all.click&vd_source2ac127043ccd79c92d5b966fd4a54cd7 Git 命令在线练习工具 https://l…

国内可用 ChatGPT 网页版

前言 ChatGPT持续火热&#xff0c;然鹅国内很多人还是不会使用。 2023年6月1日消息&#xff0c;ChatGPT 聊天机器人可以根据用户的输入生成各种各样的文本&#xff0c;包括代码。但是&#xff0c;加拿大魁北克大学的四位研究人员发现&#xff0c;ChatGPT 生成的代码往往存在严…

项目开发-依赖倒置、里式替换、接口隔离的应用深入理解

文章目录 前言依赖倒置定义不符合依赖倒置原则是什么样子&#x1f604;完善 里式替换定义具体应用 接口隔离定义具体应用 前言 最近在做.net项目和学习这个设计模式中的依赖倒置和工厂方法&#xff0c;这个过程当中发现在开发这个.net项目中有很多不合理的地方&#xff0c;就是…

cplex基础入门(一)

这边文章会以纯新手小白的视角&#xff0c;教会大家如何快速的搭建自己的cplex模型&#xff0c;做到求解模型不求人。 目录 一、引言 1、掌握数据类型及数据结构 2、常规Cplex编程方法 3、Cplex编程步骤 4、cplex 程序框架 5、创建模型 二、规划建模的入门求解案例 1、…

Python3数据分析与挖掘建模(3)探索性数据分析

1. 概述 探索性数据分析&#xff08;Exploratory Data Analysis&#xff0c;EDA&#xff09;是一种数据分析的方法&#xff0c;用于探索和理解数据集的特征、关系和分布等。EDA旨在揭示数据中的模式、异常值、缺失值等信息&#xff0c;并为后续的分析和建模提供基础。以下是关…

CISCN 2023 初赛 pwn——Shellwego 题解

这是一个用go语言写的elf程序&#xff0c;没有PIE。这也是本蒟蒻第一次解go pwn题&#xff0c;故在此记录以便参考。 而且&#xff0c;这还是一个全部符号表被抠的go elf&#xff0c;直接面对一堆不知名的函数实在有些应付不来&#xff0c;因此在比赛时委托逆向的队友把符号表…

​【指针与数组的恩怨情仇】

指针和数组的关系 指针指的是指针变量&#xff0c;不是数组&#xff0c;指针变量的大小是4/8个字节&#xff0c;是专门来存放地址的。数组也不是指针&#xff0c;数组是一块连续的空间&#xff0c;存放一组相同类型的数据的。 没有关系&#xff0c;但是它们之间有比较相似的地方…

【Netty】一行简单的writeAndFlush都做了哪些事(十八)

文章目录 前言一、源码分析1.1 ctx.writeAndFlush 的逻辑1.2 writeAndFlush 源码1.3 ChannelOutBoundBuff 类1.4 addMessage 方法1.5 addFlush 方法1.6 AbstractNioByteChannel 类 总结 前言 回顾Netty系列文章&#xff1a; Netty 概述&#xff08;一&#xff09;Netty 架构设…

好用的Chrome浏览器插件推荐(不定期更新)

好用的Chrome浏览器插件推荐 1.1 CSDN-浏览器助手1.2 Google 翻译1.3 JSON Viewer1.4 ModHeader - Modify HTTP headers1.5 Octotree - GitHub code tree 1.1 CSDN-浏览器助手 CSDN-浏览器助手 是一款集成本地书签、历史记录与 CSDN搜索(so.csdn.net) 的搜索工具 推荐&#x…

自动驾驶车载MCU开发修炼秘籍

目录 车载MCU开发修炼秘籍1、恩智浦 S32K1XX系列2、英飞凌 AURIX TC3XX3、嵌入式实时操作系统-FreeRTOS4、车载实时操作系统-AUTOSAR 车载MCU开发修炼秘籍 1、恩智浦 S32K1XX系列 S32K14X学习笔记&#xff08;一&#xff09;–S32K汽车MCU资源总结 S32K14X学习笔记&#xff1a…

第二章 数据类型、运算符与表达式

如何打开项目 如何打开已经存在的解决方案&#xff1f; 找到要打开的解决方案目录&#xff0c;进去之后双击后缀为.sln的文件即可打开该解决方案。 或者从最近打开项目中打开&#xff1a; Online Judge使用 OJ简介 在线判题系统&#xff08;Online Judge&#xff0c;缩写OJ…

WebService接口测试

WebService的理解 WebService就是Web服务的意思&#xff0c;对应的应用层协议为SOAP&#xff08;相当于HTTP协议&#xff09;&#xff0c;可理解为远程调用技术。 特点&#xff1a; 客户端发送的请求主体内容&#xff08;请求报文&#xff09;的格式为XML格式 接口返回的响…

【P36】JMeter 交替控制器(Interleave Controller)

文章目录 一、交替控制器&#xff08;Interleave Controller&#xff09;参数说明二、测试计划设计 一、交替控制器&#xff08;Interleave Controller&#xff09;参数说明 可以将内部的组件在线程迭代时交替执行&#xff1b;交替控制器内部一般会有多个取样器 选择线程组右…

黑马Redis视频教程高级篇(一:分布式缓存)

目录 分布式缓存 一、Redis持久化 1.1、RDB持久化 1.1.1、执行时机 1.1.2、RDB原理 1.1.3、小结 1.2、OF持久化 1.2.1、AOF原理 1.2.2、OF配置 1.2.3、AOF文件重写 1.3、RDB与AOF对比 二、Redis主从 2.1、搭建主从架构 2.1.1、集群结构 2.1.2、准备实例和配置 …