操作系统笔记——死锁

Ventoy引导自定义菜单配置详解:手把手教你用ventoy_grub.cfg启动硬盘里的Manjaro 本文详细解析了Ventoy引导自定义菜单配置方法,重点介绍如何通过ventoy_grub.cfg文件启动硬盘中的Manjaro系统。从Ventoy与GRUB2的协作原理到具体配置步骤,包括分区布局设计、关键参数解析及常见问题解决方案,帮助用户实现多系统引导的灵活管理。 阅读详情

哲学家就餐问题

描述

五个哲学家围着一张圆桌,每个哲学家面前放着食物。哲学家的生活有两种交替活动:吃饭以及思考。

在这里插入图片描述

当一个哲学家吃饭时,需要先拿起自己左右两边的两根筷子,并且一次只能拿起一根筷子。

如果哲学家同时拿起左手边的筷子,那么就无法拿起右手边的筷子,造成死锁。

#define N 5

void philosopher(int i) {
    while(TRUE) {
        think();
        P(i);       // 拿起左边的筷子
        P((i+1)%N); // 拿起右边的筷子
        eat();
        V(i);
        V((i+1)%N);
    }
}

操作系统中的死锁是指多个进程在运行过程中因为争夺资源造成的一种相互等待的情况。

死锁必要条件

如果一个系统中下面四个条件同时满足,那么会引起引起死锁。

  • 互斥:至少有一个资源处于非共享模式,即一次只有一个进程使用,如果另一个进程申请该资源,那么申请进程必须等到该资源被释放为止。
  • 占有并等待:一个进程必须占有至少一个资源,并等待另一资源,而该资源为其他进程所占有。
  • 非抢占:资源不能被抢占,即资源只能在进程完成任务后自动释放。
  • 环路等待:有两个或者两个以上的进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源。

死锁处理方法

鸵鸟策略

鸵鸟策略是指不采取任何措施。

大多数操作系统,包括 Unix,Linux 和 Windows,处理死锁问题的办法都是鸵鸟策略,即忽略它。

死锁检测与死锁恢复

不试图阻止死锁,而是当检测到死锁发生时,采取措施进行恢复。

每种类型一个资源的死锁情况

在这里插入图片描述
上图是资源分配图,其中方框表示资源。

圆圈表示进程。资源指向该进程表示该资源已经分配给该进程,进程指向资源表示进程请求获取该资源。

b是抽取出来的环,他满足了环路等待的条件,因此会发生死锁。

死锁检测算法是通过检测有向图是否存在环来实现,从一个节点出发进行深度优先搜索,对访问过的节点进行标记,如果访问了已经标记的节点,就表示有向图存在环,也就是检测到死锁的发生。

每个类型多个资源的死锁检测

在这里插入图片描述

上图有三个进程、四个资源。

各数据含义

  • E向量代表资源总量
  • A向量代表资源剩余量
  • C矩阵代表每个进程拥有的资源数量
  • R矩阵代表每个进程请求的资源数量

算法描述

  • 进程P1、P2所请求的资源都得不到满足,只有进程3可以,让进程P3执行,之后释放P3拥有的资源。
  • 此时A=(2 2 2 0)。P2可以执行,执行后释放P2拥有的资源,A=(4 2 2 1)。
  • P1也可以执行。所有进程都可以顺利执行,没有死锁。

算法总结

每个进程开始都不被标记,执行过程中可能被标记。

当算法结束时,任何没有被标记的进程都是死锁进程。

  1. 寻找一个没有标记的进程P1,它所请求的资源小于等于A。
  2. 如果找到了这样的进程,那么将C矩阵的第i行向量加到A中,标记该进程,并重复1。
  3. 知道没有这样的进程,算法终止。

死锁恢复

  • 利用回滚恢复——进程回退策略,即让参与死锁的进程回退到没有发生死锁前某一点处,并由此点处继续执行,以求再次执行时不再发生死锁。
  • 通过杀死进程恢复

死锁预防

死锁的预防即不允许死锁的发生,可以从破除死锁发生的四个必要条件入手。因为如果不具备上述四个必要条件,那么死锁就一定不会发生。

破坏互斥条件

通常不能通过否定互斥条件来预防死锁

破坏占有和等待条件

一种实现方式是所有进程在开始执行前请求所需要的全部资源。

破坏不可抢占条件

如果一个进程所请求的资源被另一进程占有,使它可以抢占另一进程占有的资源。

破坏环路

对资源进行排序,即每个进程访问资源的顺序是固定的。

举例

进程PA,使用资源的顺序是R1,R2; 进程PB,使用资源的顺序是R2,R1;若采用动态分配有可能形成环路条件,造成死锁。

采用有序资源分配法:R1的编号为1,R2的编号为2。

PA:申请次序应是:R1,R2
PB:申请次序应是:R1,R2
这样就破坏了环路条件,避免了死锁的发生。

死锁避免

避免死锁同样是属于事先预防的策略,但并不是事先釆取某种限制措施破坏死锁的必要条件,而是在资源动态分配过程中,防止系统进入不安全状态,以避免发生死锁。

安全状态

安全状态是指系统能按某个顺序为每个进程分配资源并能避免死锁,那么系统状态就是安全的。
在这里插入图片描述
解释

  • 第二列Has表示已拥有的资源数
  • 第三列Max表示总共需要的资源数
  • Free表示还有可以使用的资源数

对于上图

  1. 由a出发,让B进程拥有所需的所有资源,free变为1,成为图b,运行结束,释放B的资源,free变为5,成为图c。
  2. 接着以同样的形式运行C和A,使得所有进程都能成功运行。
  3. 所以图a的状态是安全的。

定义:即使所有进程突然请求对资源的最大请求,也仍然存在某种调度次序,能使每一个进程运行完毕,则称该状态是安全的。

单个资源的银行家算法

描述

一个银行家,他向一群客户分别承诺一定的贷款额度,算法要求做的是,判断对请求的满足是否会进入不安全状态,如果是,就拒绝请求;否则就予以分配。

在这里插入图片描述
比如上图中c就是不安全的状态,因此算法会拒绝之前的请求,从而避免进入图c中的状态。

解释一下

图b中,可以先把free的2个资源给C,然后C释放资源,free变为4,然后再分给B,接着,分给A,最后分给D,这样是安全状态。

而如果图b将一个free的资源分给了b,free变为1,这时不管再将free的1个资源给谁都不会达到最大的资源请求,从而导致了死锁。

多个资源的银行家算法

在这里插入图片描述
解释

  • 上图有五个进程,四个资源
  • 左边表示已经分配的资源,右边表示已经分配的资源。
  • E、P、A代表总资源、已分配资源、可用资源(A=1/0/2/0 代表剩余的四个资源的数量)

算法描述

  • 查找右边的矩阵是否存在一行小于等于向量A,如果没有那么系统将会发生死锁。状态不安全
  • 如果找到,将该进程标记为终止,并将它的资源加到A中。
  • 重复上述两步,直到所有标记都标为终止,则状态是安全的。

如果一个状态是不安全的,就拒绝进入这个状态。

参考
https://blog.youkuaiyun.com/sunmc1204953974/article/details/46559589
https://blog.youkuaiyun.com/weiyongle1996/article/details/71511956
http://c.biancheng.net/cpp/html/2606.html

手把手教你用UNI-MOL进行分子性质预测:从3D构象到实战结果 本文提供了使用UNI-MOL进行分子性质预测的完整实战指南。通过详细的环境搭建、3D构象生成、模型加载与微调步骤,手把手教你构建端到端的预测流水线。文章重点解析了如何利用UNI-MOL的3D分子表示学习能力,超越传统2D方法,实现对溶解度、活性等性质的更精准预测,并探讨了结果解读与模型分析方法。 阅读详情

相关推荐

【RTOS】 Vxworks 653 第一章 —— 初识 vx653 3.x

。。不是很重要,自己搜吧鲁棒分区是一种确保共享计算资源中独立运行功能实现​​时空隔离​​的机制,其目标是为集成模块中的混合临界性应用提供与联邦式部署(federated implementation)同等级别的功能隔离保障。具体表现为:​​多关键性共存​​:支持不同安全等级应用(如飞控系统A级与娱乐系统D级)在同一模块中协同运行。​​抗干扰能力​​:防止未授权或意外的时空干扰(如内存越界、时间窗口冲突),确保应用间互不影响。​​。

qq_38183694的博客 1280

【操作系统】死锁(详细)

【操作系统】死锁(详细)

FishC的博客 7569

基于ESP32-P4的低成本旋转式激光雷达系统设计

激光雷达(LiDAR)作为机器人环境感知的核心传感器,其本质是融合光学测距、机电控制与实时数据处理的嵌入式系统。理解时间飞行(ToF)原理与机械旋转耦合机制,是实现高精度点云采集的基础;而系统级误差源——如计时抖动、电机惯性、信号串扰和温漂——直接决定实际建图鲁棒性。在资源受限场景下,选用RISC-V双核MCU(如ESP32-P4)可兼顾实时控制与网络服务能力,通过硬件时间戳捕获、S型加减速轨迹规划、旋转变压器供电及双Bank OTA等工程手段,有效平衡分辨率、帧率与稳定性。本文围绕360°旋转式激光雷达的

weixin_36231030的博客 432

操作系统中死锁的定义、产生原因、必要条件、死锁的处理策略(死锁预防和避免、死锁的检测和解除)

死锁(deadlock):如果一组进程中每个进程都在等待一个事件,而这个事件只有该集合中的另一个进程才能引起,那么该集合就是死锁的。(都占有资源,然后互相等待)或者两个或以上的进程因为争夺资源而造成互相等待的现象,并且若无外力作用,它们都将无法继续推进下去。

userID66的博客 5183

SWIPT技术(无线通信携能技术)的简介与架构——(后续补充无人机SWIPT方向)

SWIPT一、SWIPT(无线通信携能)技术简介1.1、组成:1.2、与传统无线通信的区别:1.3、SWIPT 的集成接收器架构设计1、单独的接收器2、TS架构——时间开关(Time switching,TS)3、PS架构——功率分流(Power splitting,PS)4、天线开关接收器主要两种架构的区别参考文献SWIPT的发展 一、SWIPT(无线通信携能)技术简介 SWIPT(Simultaneous Wireless Information and Power Transfer )是各种WPT技术

Blue 1万+

运用AD进行stm32最小系统PCB图的绘制

运用AD进行stm32最小系统PCB图的绘制一、PCB图的绘制(1)布局(2)布线(3)覆铜(4)电气规则检查二、给PCB添加logo三、生成garber文件总结 一、PCB图的绘制 (1)布局 1.画好原理图后,新建一个PCB项目 2.在Design中选择第二项,导入器件 3.先点击右下角第一项,再点第二项导入器件 导入成功 4.导入后效果 选择紫红色方框,按电脑上的delete键把它删掉 5.在Tools选择Outside Board,自动排布器件 排布后效果如图 6.画线,确定板子范围

lucario1的博客 2149

操作系统----死锁

在银行家算法中定义了几个数组用来记录数据,max数组用来记录进程告知操作系统的最大请求的资源数,Allcation数组用来记录进程已被分配的资源数,need数组记录进程还需要的资源数,request数组记录本次进程请求的资源数,available记录操作系统还能分配的资源数。按照这种方式就无法形成资源等待环导致所有进程发生死锁,假设有两个进程都申请了一个资源,那这两个资源的编号肯定有小有大,小号资源的进程能等待大号的资源但是大号资源无法回过头等待小号资源所以避免了死锁问题。:1.实现起来比较复杂。

weixin_64208331的博客 431

【UE5+Quest3】手部模型替换---3-0

这次手部模型替换遇到了一些小问题,不过好在是bug一个个都处理掉了,我会分开几个章节去整理。详细的视频教程可以参考油管大佬的视频手部素材放到文章末尾,自行下载使用。(仅用作学习研究,不可用于商用)

qbbmnnnnnn的博客 944

操作系统之死锁

本文介绍了什么是死锁、产生死锁的原因、死锁预防、死锁检测、死锁避免以及死锁恢复。

m0_51050554的博客 1564

硬件工程师的蜗牛成长路

1、《模拟电路课程》R/L/C/继电器/光耦/二极管/三极管/MOS管磁珠/ESD/TVS/肖特基二极管/稳压二极管/保险丝/GDT/TSS/光耦/MOS/运放/BJT比较器/面板开关/按键开关/拨码开关/BUCK/LDO/电源防护器件LM5069单输出PLL/多路输出PLL/单端晶振/差分晶振/晶体(这方面不熟悉,待以后补充)1)速度传感器2)温度传感器3)倾斜角传感器4)火焰传感器5)红外传感器6)呼吸心跳采集chaunganqi1)数字隔离 电平转换芯片/磁隔离/专用隔离芯片。

caozhaokun的博客 1978

Codex API 直接集成指南:告别中转代理,构建稳定高效的 AI 应用

在 AI 应用开发中,API 集成是连接模型能力与业务逻辑的核心环节。其基本原理是通过 HTTP 协议,按照服务提供商定义的规范发送请求并解析响应,实现远程调用。标准化的 API 设计确保了跨平台和跨语言的互操作性,其技术价值在于提供了稳定、可控且可扩展的服务接入方式,是构建企业级智能应用的基础。在实际应用场景中,开发者常需集成如 Codex 这类聚合了多种大语言模型的平台,以调用诸如 DeepSeek 等先进模型。然而,部分开发者仍依赖过时的第三方中转代理工具,这不仅引入了单点故障和版本锁定的风险,还可能

weixin_28224217的博客 339

现代操作系统(五):死锁

文章目录1. 资源2. 死锁简介2.1 资源死锁的条件2.2 处理死锁的策略3. 鸵鸟算法4. 死锁的检测和死锁恢复5. 避免死锁6. 死锁预防7. 其他问题 在计算机系统中很多独占性的资源,在任一时刻它们都只能被一个进程使用。真因为如此,操作系统都授予一个进程(临时)排他地访问某一种资源的能力。 在很多应用中,需要进程排他性地访问若干资源而不是一种,当两个进程为了保护两个不同的共享资源⽽使⽤了两个互斥锁,那么这两个互斥锁应⽤不当的时候,可能会造成两个进程程都在等待对⽅释放锁,在没有外⼒的作⽤下,这些进程

weixin_48922154的博客 864

AUTOSAR CP R18-10 架构总览与导航

AUTOSAR CP R18-10 架构总览 本文档系统整理了AUTOSAR CP R18-10版本的199篇技术规范,涵盖7大架构层级: 应用层(15篇):包含车身舒适、底盘控制、HMI、安全系统、动力系统等AI应用 RTE(1篇):虚拟功能总线规范 服务层(159篇):细分为系统服务(OS/ECU管理/加密)、存储服务、通信服务(CAN/LIN/Ethernet) ECU抽象层(20篇):I/O与通信硬件抽象 MCAL(41篇):微控制器驱动层 复杂驱动(14篇):CDD设计与SPAL支撑 规范模板(2

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 718

清华大学---操作系统笔记(十一)---死锁(下)---死锁检测

nikyae的博客 119

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

操作系统-死锁笔记

操作系统都具有授权一个进程(临时)排他地访问一种资源的能力。 在很多应用中,需要一个进程排他性地访问若干种资源而不是一种。 两个进程都被阻塞,并且一直处于这样的状态。这种状况就是死锁(deadlock) 1.资源 我们把这类需要排他性使用的对象称为资源。简单来说,资源就是随着时间的推移,必须能获得、使用以及释放的任何东西。 1. ...

qq_33582129的博客 656

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

现代操作系统笔记——死锁

** 现代操作系统笔记——死锁 ** 笔记以cyc2018大佬的github地址为大纲,以《现代操作系统》为基础进行摘抄总结。 1.相关概念 (1)资源:某类需要排他性使用的对象,可以是硬件设备也可以是一组信息。通俗的来说,资源就是随着时间放入推移,必须能获得、使用以及释放的任何东西。 (2)资源分为两类:可抢占的和不可抢占的。 –可抢占资源:可以从拥有它的进程中抢占而不会产生任何副作用, ...

pluto321456的博客 498

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

读书笔记-现代操作系统-6死锁-6.5死锁避免

6.5 死锁避免系统判断分配资源是否安全,并且只能在保证安全的条件下分配资源。6.5.1 资源轨迹图 当在t点时系统必须做出正确的判断,应该将一部分程序挂起以避免产生死锁6.5.2 安全状态和不安全状态 安全状态 如果没有死锁状态,而且即使所有进程突然请求对资源的最大需求,也仍然存在某种调度次序能够使得每个进程运行完毕,则该状态是安全的。 如果线程可以通过仔细的调度避免死锁,所有状态时安全的,

千念飞羽的专栏 928

操作系统学习笔记: 死锁

参考资料: 《现代操作系统 3th edtion》原书第六章 死锁 在 xmind 上记录 一、资源 定义 需要排他性使用的对象 资源就是随着时间的推移,必须能获得、使用以及释放的任何东西 分类 可抢占资源 可以从拥有它的进程中抢占而不会产生任何副作用,比如: 存储器 不可抢占资源 指在不引起相关的计算失败的情况下,无法把它从占有它的进程处抢占过来,比如: CD刻录机 ...

我的博客 255

操作系统笔记—进程的死锁

死锁的概念 死锁:在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都被阻塞,都无法向前推进(至少有两个或两个以上的进程同时发生) 饥饿:长时间得不到想要的资源,某进程无法向前推进。(可能只有一个进程发生饥饿,发生饥饿的进程可能是阻塞态(得不到I/O设备),也可能是就行态(得不到处理机)) 死循环:某种进程执行过程中一直跳不出某个循环的现象。(可以在处理机上循环,可能处于运行态) 死锁和饥饿是操作系统应该解决的问题,死循环饿是管理者的问题。 死锁产生的必要条件: 1.互斥条件:只有

qq_54684701的博客 552

操作系统笔记:死锁

操作系统笔记 第二部分:死锁 死锁的定义 多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都无法向前推进。

qq_43561934的博客 488

《现代操作系统》精读与思考笔记 第六章 死锁

  本系列博文是《现代操作系统(英文第三版)》(Modern Operating Systems,简称MOS)的阅读笔记,定位是正文精要部分的摘录理解和课后习题精解,因此不会事无巨细的全面摘抄,仅仅根据个人情况进行记录和推荐。由于是英文版,部分内容会使用英文原文。   课后习题的选择标准:尽量避免单纯的概念考察(如:What is spooling?)或者简单的数值计算,而是能够引起思考加深理解...

weixin_33774883的博客 118

操作系统 死锁 笔记

1死锁产生的四个必要条件 ①互斥条件:必须至少有一个资源以非共享的方式被进程持有;更确切的说,同时只有一个进程可以使用该资源。如果另一个进程请求这个资源,那么该进程必须等待这个资源被释放。 ②持有并等待条件:进程必须持有至少一个资源且等待获取另外的当前被其它进程持有的资源。 ③不可抢占条件:不可以抢占资源;也就是说,资源的释放只可以是由持有它的进程完成工作后自动释放。 ④循环等待条件:

Ink_cherry的博客 580

《操作系统》学习笔记:死锁

死锁:多个进程因竞争资源而造成的一种僵局或者一种阻塞现象,如果没有外力这些进程将永远 无法推进。

weixin_53622554的博客 669

操作系统饥饿现象_操作系统学习笔记(七) 死锁

一、资源把需要排他性使用的对象称为资源。资源可以是硬件也可以是软件,比如打印机或者数据库中的一个加锁记录。资源可以分为两类:可抢占资源和不可抢占资源。可抢占资源:可以从拥有它的进程中抢占而不产生副作用。不可抢占资源:不引起相关的计算失败的情况下,无法把它从占有它的进程处抢占过来。抢占这个词,在进程和线程调度时就提到了这个概念,那时是进程或者线程可以抢占CPU,即抢占式调度。存储器也可以抢占,如内存...

weixin_31827003的博客 1149

操作系统之死锁——学习笔记

死锁:指多个进程在运行过程中因争夺资源而造成的一种僵局,当处于这种僵局状态时,若无外力作用,它们都将无法再向前推进。 产生死锁的原因: 1)竞争资源 2)进程间推进顺序非法:进程在运行中,请求和释放资源的顺序不当, 会产生死锁。 资源: 1)可剥夺资源:进程在获得这类资源后,可再被其他进程剥夺,如,CPU 和主存。 2)不可剥夺资源:当系统把这类资源分配给进

815

【笔记】操作系统(七)——死锁

死锁前言系统模型死锁特征产生死锁的四个必要条件资源分配图死锁处理方法1. 死锁预防互斥占有并等待非抢占循环等待2. 死锁避免资源分配图算法(适用于资源单实例)银行家算法(适用于资源多实例)银行家算法的一些准备安全性算法资源请求算法3. 死锁检测资源单实例死锁检测资源多实例死锁检测4. 死锁恢复进程终止资源抢占 前言 这一章与进程同步相比较较为轻松,但也是很重要。死锁避免的算法会经常考到。 系统模型 死锁(deadlock): 在多道程序环境下,多个进程可能竞争一定数量的资源。某个进程申请资源,如果这时资源不

夜的第七章 734
上一篇: 操作系统笔记——进程同步、进程通信
下一篇: LeetCode——第163场周赛
PdKingLiu
博客等级 码龄9年 89粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值