操作系统入门 -- 死锁
操作系统入门 – 死锁
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和监控平台。在…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...

前端开发者常用网站
Can I use网站:一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use:Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站:MDN JavaScript权威网站:JavaScript | MDN...