当前位置: 首页 > news >正文

操作系统入门 -- 死锁

操作系统入门 – 死锁

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 死锁 在两个或多个并发进程中&#xff0c;如果每个进程都持有某种资源&#xff0c;并且正在等待其他进程释放它或进程都保持资源&#xff0c;在当前状态下无法推进。通俗来说就是两个或多个进程进入无限期阻塞、互相…...

结合Boosting理论与深度ResNet:ICML2018论文代码详解与实现

代码见&#xff1a;JordanAsh/boostresnet: A PyTorch implementation of BoostResNet 原始论文&#xff1a;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使用策略模式绘制图片分析多组数据

趋势分析&#xff1a;折线图静态比较&#xff1a;条形图分布分析&#xff1a;箱线图离散情况&#xff1a;散点图 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是一款简单易用的高清录屏和视频编辑软件&#xff0c;拥有录制屏幕和配音、视频的剪辑和过场动画片、添加说明字幕和水印、制作视频封面和菜单、视频压缩和播放。不得不说Camtasia是一款屏幕录制和视频剪辑软件&#xff0c;教授课程&#xff0c;培训他…...

爬虫笔记15——爬取网页数据并使用redis数据库set类型去重存入,以爬取芒果踢V为例

下载redis数据库 首先需要下载redis数据库&#xff0c;可以直接去Redis官网下载。或者可以看这里下载过程。 pycharm项目文件下载redis库 > pip install redis 然后在程序中连接redis服务&#xff1a; from redis import RedisredisObj Redis(host127.0.0.1, port6379)…...

我是如何在markdown编辑器中完成视频的插入和播放的

如果你有更好用的编辑器组件&#xff0c;请一定推荐给我!!!&#xff08;最好附带使用说明&#x1f913;️&#xff09; 介绍 在开发一个社区页面的时候&#xff0c;需要完成发帖、浏览帖子的能力。这里考虑接入markdown编辑器进行开发&#xff0c;也符合大多数用户的习惯。 …...

Ltv 数据粘包处理

测试数据包的生成 校验程序处理结果和原始的日志保温解析是否一致 程序粘包分解正常...

银联支付,你竟然还不知道它怎么工作?

银联支付咱都用过&#xff0c;微信和支付宝没这么“横行”的时侯&#xff0c;我们取款、转账、付款时用的ATM机、POS机&#xff0c;都是银联支付完成的。 今天&#xff0c;就让咱们了解一下银行卡支付的工作原型。 首先&#xff0c;说说中国银联 中国银联&#xff08;China U…...

查找程序中隐藏界面的思路

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动 某些程序&#xff0c;它会有管理员界面&#xff08;比如棋牌游戏&#xff0c;它一般会有一个控制端界面&#xff0c;用来控制发牌、换牌&#xff09;&#xff0c;但是这种界…...

umount

umount命令用于卸载文件系统&#xff0c;使得挂载点的文件和目录变为不可访问。 基本用法&#xff1a; umount [选项] 设备或文件夹 常见选项&#xff1a; -f&#xff1a;强制卸载&#xff0c;即使文件系统处于忙碌状态&#xff08;在某些情况下使用&#xff0c;如网络文件…...

electron录制应用-自由画板功能

功能 录屏过程中的涂画功能允许用户在录制屏幕操作的同时&#xff0c;实时添加注释和高亮显示&#xff0c;以增强信息的传达和观众的理解。 效果 electron录制-添加画布 代码实现 1、利用HTML5的Canvas元素实现一个自由涂画的功能&#xff0c;允许用户在网页上进行手绘创作。…...

版本控制工具-git分支管理

目录 前言一、git分支管理基本命令1.1 基本命令2.1 实例 二、git分支合并冲突解决三、git merge命令与git rebase命令对比 前言 本篇文章介绍git分支管理的基本命令&#xff0c;并说明如何解决git分支合并冲突&#xff0c;最后说明git merge命令与git rebase命令的区别。 一、…...

医卫医学试题及答案,分享几个实用搜题和学习工具 #学习方法#知识分享#经验分享

可以说是搜题软件里面题库较为齐全的一个了&#xff0c;收录国内高校常见的计算机类、资格类、学历类、外语类、工程类、建筑类等多种类型的题目。它可以拍照解题、拍照答疑、智能解题&#xff0c;并支持每日一练、章节练习、错题重做等特色功能&#xff0c;在帮助大家解答疑惑…...

在dolphinDB上直接保存一个dataframe为分布式数据表

步骤1&#xff1a;获取链接 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默认分割符&#xff1a; 空格&#xff1b;tab键。多个空格压缩成一个空格 [roottest2 opt]# cat awk.txt 1 2 3 [roottest2 opt]# awk {print $3} awk.txt 3 awk的工作原理&#xff1a; 根据指令信息&#xff0c;逐行的读…...

如何加速AI原生应用进程?华为云开天aPaaS提出新范式

每一次新旧代际转换时&#xff0c;都会上演这样的一幕&#xff1a;“畅想很多&#xff0c;落地很少”&#xff0c;AI原生应用似乎也不例外。 关于AI原生应用的呼声已经持续一段时间&#xff0c;但普通用户对“AI原生”依然陌生。除了新业态普及的周期性&#xff0c;AI原生应用…...

Matlab基础语法:变量和数据类型,基本运算,矩阵和向量,常用函数,脚本文件

目录 一、变量和数据类型 二、基本运算 三、矩阵和向量 四、常用函数 五、脚本文件 六、总结 一、变量和数据类型 Matlab 支持多种数据类型&#xff0c;包括数值类型、字符类型和逻辑类型。掌握这些基本的变量和数据类型&#xff0c;是我们进行数学建模和计算的基础。 数…...

弥补iPhone不足,推荐金鸣识别等几款APP神器

在数字时代的浪潮中&#xff0c;iPhone以其独特的设计和强大的性能赢得了全球众多用户的喜爱。然而&#xff0c;即便是这样一款近乎完美的设备&#xff0c;也难免存在一些局限性和缺陷。幸运的是&#xff0c;App Store中蕴藏着许多鲜为人知的app&#xff0c;它们可以弥补iPhone…...

KLayout 中的默认数据类型

KLayout 中的默认数据类型 这里给大家介绍一下 KLayout 中的默认数据类型。从这个官方文档 KLayout 数据类型 中我们可以获取到 KLayout 中的默认数据类型有如下几种&#xff1a; Column 1Column 2TypeBoolean布尔值TypeCallback按键返回类型TypeDouble浮点数类型TypeInt整型Ty…...

视频云存储平台LntonCVS国标视频平台功能和应用场景详细介绍

LntonCVS国标视频融合云平台基于先进的端-边-云一体化架构设计&#xff0c;以轻便的部署和灵活多样的功能为特点。该平台不仅支持多种通信协议如GB28181、RTSP、Onvif、海康SDK、Ehome、大华SDK、RTMP推流等&#xff0c;还能兼容各类设备&#xff0c;包括IPC、NVR和监控平台。在…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

初探Service服务发现机制

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