操作系统入门 -- 死锁
操作系统入门 – 死锁
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和监控平台。在…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...