操作系统入门 -- 死锁
操作系统入门 – 死锁
1.什么是死锁、死锁产生的条件
1.1 死锁
在两个或多个并发进程中,如果每个进程都持有某种资源,并且正在等待其他进程释放它或进程都保持资源,在当前状态下无法推进。通俗来说就是两个或多个进程进入无限期阻塞、互相等待状态。
1.2 产生死锁的必要条件
- 互斥条件:一个资源在某一时刻只能被一个进程占用。
- 请求与保持条件:一个进程因请求资源而阻塞,对已获得资源不释放。
- 不剥夺条件:进程获得资源后,在未完全使用完之前,不能强行剥夺。
- 循环等待条件:若干进程之间形成一种头尾相接的环形等待资源关系。
1.3 死锁的处理和预防
- 预防死锁:通过破坏死锁必要条件之一即可预防。
- 避免死锁:在资源的动态分配过程中,用某种方法防止系统进入不安全状态,从而避免发生死锁。
- 检测死锁:允许进程在运行过程中发生死锁,但需要及时检测到,并通过合理的方式解除死锁。
- 解除死锁:当系统发生死锁时,采取相应措施,解除死锁。
- 忽略死锁:如鸵鸟算法,当发生死锁时忽略问题,适用于发生的死锁不会对用户造成太大影响。
2. 死锁的预防方式
2.1 破坏“不抢占”条件
2.1.1 运行方式
当某个进程请求新的资源得不到满足时,立即释放保持的所有资源,并等待重新申请。
2.1.2 缺点
实现过程复杂,抢占资源可能导致部分工作失效,反复申请和释放对系统开销大,也可能导致饥饿。
2.2 破坏“请求和保持”条件
当一个进程请求资源时,不能持有不可抢占的系统资源。一下有两种协议
2.2.1 协议1
- 第一种协议:所有进程在运行前,必须一次性申请其在运行过程中所需的全部资源。此时若系统有足够的资源分配给某进程,就可以把进程所需资源分配给给它,在运行过程中,进程就不会再申请资源,破坏了“请求”条件。系统在分配资源时只要有一种资源不能满足进程要求,即使其他所需的各个资源都空闲也不会分分给当前线程。
-第一种协议缺点:该协议看似简单易行且安全,但是资源会被严重浪费,降低资源利用率,同时也经常会发生饥饿现象。
2.2.2 协议2
- 第二种协议:这是对上述协议的改进,该协议能够允许一个进程只获得运行初期所需资源后就开始运行。在运行过程中逐步释放系统已经分配并用完的资源,再请求新的资源。
2.3 破坏“循环等待”条件
2.3.1 实现过程
系统将会给资源先进行编号,规定每个进程必须按照序号递增顺序请求资源,编号相同的同类资源一次性申请完毕。该过程保证了当一个进程占有小号的资源后才能申请大号的资源,而持有大号资源的进程无法申请小号资源,杜绝了循环等待的现象。
2.3.2 缺点
- 不方便增加新设备,增加新设备后所有资源需要重新编号。
- 进程实际使用的资源顺序可能和编号不一致,浪费资源。
- 按规定申请资源在编程过程中较为麻烦。
3.银行家算法
3.1 概念
银行家算法是用来避免操作系统出现死锁的有效算法。为实现银行家算法,系统必须设置若干数据结构,同时要解释银行家算法,必须先解释操作系统安全状态和不安全状态。
- 安全序列:指一个进程序列<P1,…,Pn>是安全的。即对于每个进程 Pi (1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj(j < i)当前占用资源总和。
- 安全状态:如果存在一个又系统中所有进程构成的安全序列<P1,…,Pn>,则系统处于安全状态,该状态下一定不会发生死锁。
- 不安全状态:不存在一个安全序列。该情况下可能会导致死锁。
3.2 银行家算法数据结构
- 可利用资源向量Available:是一个含有m个元素的数组,其中每个元素代表一类可利用的资源数目。若Available[j] = K,则表示系统中现有Rj类资源K个。
- 最大需求矩阵Max:一个n*m的矩阵,其中定义了系统中n个进程中每个进程所需最大为m的资源值。如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为K。
- 分配矩阵Allocation:同上,也是一个n*m的矩阵,其中定义了系统中每一类资源当前已经分配每一个进程的资源数。如果Allocation[i,j]=K,则表示进程i当前已分得Rj类资源的 数目为K。
- 需求矩阵Need:这也是一个n*m的矩阵,表示每个进程尚需各类资源数。如果Need[i,j]=K,则表示进程i还需要Rj类资源K个,方能完成其任务。
3.3 算法流程
设Req(i)是进程Pi请求的向量,若Req(i)[j] = K。表示进程Pi需要K个R(j)类型资源。当Pi发现资源请求后系统将执行以下步骤。
- (1).若Req(i)[j] <= Need[i , j]转至步骤(2),否则出错,因为所请求的资源数超过其规定的最大值。
- (2).若Req(i)[j] <= Available[i , j]转至步骤(3),否则表示尚无足够资源,Pi等待。
- (3).系统尝试将资源分配给Pi并修改以下参数:
Available[j] = Available[j] - Req(i)[j];
Allocation[i , j] = Allocation[i j] + Req(i)[j];
Need[i , j] = Need[i , j] - Req(i)[j];
4.死锁的检测与解除
为了能够对系统中的死锁进行检测必须要有
- 保存有关资源的请求和分配信息;
- 提供一种算法,利用信息监测系统是否死锁
4.1 算法
- 找出既不阻塞又非独立的进程节点Pi,顺利情况下,Pi可以得到所需的资源并能继续运行,直至完成,最后释放持有的所有资源。这相当于消去它所有的请求边和分配边,使之称为孤立的结点。
- 进程Pi释放的资源可以唤醒某些因等待这些资源而被阻塞的进程,这些被阻塞的进程变为非阻塞状态。然后重复上面的过程,消去请求边和分配边。
- 当节点为孤立状态是,则可以完全简化。
4.2 解除死锁
- 抢占资源:从一个或多个进程中抢占足够多的资源,分配给死锁进程,以解除死锁。
- 终止进程(包括终止所有死锁进程和逐个终止进程):终止系统中的一个或多个死锁进程,直到打破循环环路,使系统从死锁状态中解脱出来。
- 进程退回
相关文章:
操作系统入门 -- 死锁
操作系统入门 – 死锁 1.什么是死锁、死锁产生的条件 1.1 死锁 在两个或多个并发进程中,如果每个进程都持有某种资源,并且正在等待其他进程释放它或进程都保持资源,在当前状态下无法推进。通俗来说就是两个或多个进程进入无限期阻塞、互相…...
结合Boosting理论与深度ResNet:ICML2018论文代码详解与实现
代码见:JordanAsh/boostresnet: A PyTorch implementation of BoostResNet 原始论文:Huang F, Ash J, Langford J, et al. Learning deep resnet blocks sequentially using boosting theory[C]//International Conference on Machine Learning. PMLR, 2…...
Python使用策略模式绘制图片分析多组数据
趋势分析:折线图静态比较:条形图分布分析:箱线图离散情况:散点图 import matplotlib.pylab as plt from abc import ABC, abstractmethod import seaborn as sns import pandas as pd import plotly.graph_objects as go import p…...
【软件下载】Camtasia Studio 2024详细安装教程视频
习惯上来说Camtasia Studio是一款简单易用的高清录屏和视频编辑软件,拥有录制屏幕和配音、视频的剪辑和过场动画片、添加说明字幕和水印、制作视频封面和菜单、视频压缩和播放。不得不说Camtasia是一款屏幕录制和视频剪辑软件,教授课程,培训他…...
爬虫笔记15——爬取网页数据并使用redis数据库set类型去重存入,以爬取芒果踢V为例
下载redis数据库 首先需要下载redis数据库,可以直接去Redis官网下载。或者可以看这里下载过程。 pycharm项目文件下载redis库 > pip install redis 然后在程序中连接redis服务: from redis import RedisredisObj Redis(host127.0.0.1, port6379)…...
我是如何在markdown编辑器中完成视频的插入和播放的
如果你有更好用的编辑器组件,请一定推荐给我!!!(最好附带使用说明🤓️) 介绍 在开发一个社区页面的时候,需要完成发帖、浏览帖子的能力。这里考虑接入markdown编辑器进行开发,也符合大多数用户的习惯。 …...
Ltv 数据粘包处理
测试数据包的生成 校验程序处理结果和原始的日志保温解析是否一致 程序粘包分解正常...
银联支付,你竟然还不知道它怎么工作?
银联支付咱都用过,微信和支付宝没这么“横行”的时侯,我们取款、转账、付款时用的ATM机、POS机,都是银联支付完成的。 今天,就让咱们了解一下银行卡支付的工作原型。 首先,说说中国银联 中国银联(China U…...
查找程序中隐藏界面的思路
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动 某些程序,它会有管理员界面(比如棋牌游戏,它一般会有一个控制端界面,用来控制发牌、换牌),但是这种界…...
umount
umount命令用于卸载文件系统,使得挂载点的文件和目录变为不可访问。 基本用法: umount [选项] 设备或文件夹 常见选项: -f:强制卸载,即使文件系统处于忙碌状态(在某些情况下使用,如网络文件…...
electron录制应用-自由画板功能
功能 录屏过程中的涂画功能允许用户在录制屏幕操作的同时,实时添加注释和高亮显示,以增强信息的传达和观众的理解。 效果 electron录制-添加画布 代码实现 1、利用HTML5的Canvas元素实现一个自由涂画的功能,允许用户在网页上进行手绘创作。…...
版本控制工具-git分支管理
目录 前言一、git分支管理基本命令1.1 基本命令2.1 实例 二、git分支合并冲突解决三、git merge命令与git rebase命令对比 前言 本篇文章介绍git分支管理的基本命令,并说明如何解决git分支合并冲突,最后说明git merge命令与git rebase命令的区别。 一、…...
医卫医学试题及答案,分享几个实用搜题和学习工具 #学习方法#知识分享#经验分享
可以说是搜题软件里面题库较为齐全的一个了,收录国内高校常见的计算机类、资格类、学历类、外语类、工程类、建筑类等多种类型的题目。它可以拍照解题、拍照答疑、智能解题,并支持每日一练、章节练习、错题重做等特色功能,在帮助大家解答疑惑…...
在dolphinDB上直接保存一个dataframe为分布式数据表
步骤1:获取链接 import dolphindb as ddb from loguru import loggerdef get_dolphin_session():"""获取dolphinDB的session"""dolphin_config {"host": "127.0.0.1","port": 13900,"username&…...
awk
awk grep 查 sed 增删改查 awk 按行取列 awk默认分割符: 空格;tab键。多个空格压缩成一个空格 [roottest2 opt]# cat awk.txt 1 2 3 [roottest2 opt]# awk {print $3} awk.txt 3 awk的工作原理: 根据指令信息,逐行的读…...
如何加速AI原生应用进程?华为云开天aPaaS提出新范式
每一次新旧代际转换时,都会上演这样的一幕:“畅想很多,落地很少”,AI原生应用似乎也不例外。 关于AI原生应用的呼声已经持续一段时间,但普通用户对“AI原生”依然陌生。除了新业态普及的周期性,AI原生应用…...
Matlab基础语法:变量和数据类型,基本运算,矩阵和向量,常用函数,脚本文件
目录 一、变量和数据类型 二、基本运算 三、矩阵和向量 四、常用函数 五、脚本文件 六、总结 一、变量和数据类型 Matlab 支持多种数据类型,包括数值类型、字符类型和逻辑类型。掌握这些基本的变量和数据类型,是我们进行数学建模和计算的基础。 数…...
弥补iPhone不足,推荐金鸣识别等几款APP神器
在数字时代的浪潮中,iPhone以其独特的设计和强大的性能赢得了全球众多用户的喜爱。然而,即便是这样一款近乎完美的设备,也难免存在一些局限性和缺陷。幸运的是,App Store中蕴藏着许多鲜为人知的app,它们可以弥补iPhone…...
KLayout 中的默认数据类型
KLayout 中的默认数据类型 这里给大家介绍一下 KLayout 中的默认数据类型。从这个官方文档 KLayout 数据类型 中我们可以获取到 KLayout 中的默认数据类型有如下几种: Column 1Column 2TypeBoolean布尔值TypeCallback按键返回类型TypeDouble浮点数类型TypeInt整型Ty…...
视频云存储平台LntonCVS国标视频平台功能和应用场景详细介绍
LntonCVS国标视频融合云平台基于先进的端-边-云一体化架构设计,以轻便的部署和灵活多样的功能为特点。该平台不仅支持多种通信协议如GB28181、RTSP、Onvif、海康SDK、Ehome、大华SDK、RTMP推流等,还能兼容各类设备,包括IPC、NVR和监控平台。在…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...
【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...
