2.4 操作系统死锁(死锁的概念、产生、防止、预防、避免)

2024-06-03 00:52

本文主要是介绍2.4 操作系统死锁(死锁的概念、产生、防止、预防、避免),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、死锁的概念
    • 1.1 死锁、饥饿、死循环对比
      • 1.1.1 死锁(Deadlock)
      • 1.1.2 饥饿(Starvation)
      • 1.1.3 死循环(Infinite Loop)
    • 1.2 死锁产生的条件
  • 二、预防死锁
  • 三、避免死锁
  • 四、死锁的检测和解除
    • 4.1 资源分配图和死锁定理
    • 4.2 死锁的检测和恢复

一、死锁的概念

1.1 死锁、饥饿、死循环对比

1.1.1 死锁(Deadlock)

教科书解释:
死锁是操作系统中的一种状态,指两个或多个进程在执行过程中,因争夺资源而造成的一种相互等待的现象。每个进程都占用着一些资源而又等待着其它进程所占有的资源,导致所有进程都无法向前推进,整个系统因此陷入停滞。(至少有两个及以上的进程同时发生死锁)

通俗易懂的解释
想象几个小朋友围坐一圈,每个人手里拿着一个玩具,同时又想要隔壁小朋友的玩具。没有一个小朋友愿意先放弃手中的玩具,大家都等着别人先给,结果就是所有人都没法得到新玩具,大家都不玩了。这就是死锁,每个人都卡住了,啥事也干不了。

1.1.2 饥饿(Starvation)

教科书解释
饥饿是指一个或多个进程由于系统资源分配策略的原因,无法获得足够的资源来完成其任务,尽管这些资源是可用的。长时间下来,这些进程无法取得进展,就像人长时间不吃东西会饿一样。(可能只有一个进程会发生饥饿)

通俗易懂的解释:
想象排队买冰淇淋的小朋友队伍,但是每次轮到比较高大的孩子时,他们不仅给自己买,还帮后面的朋友买,导致队伍前面的小朋友总也轮不到。那些个小一点、不够强壮的孩子就一直排在后面,可能到冰淇淋卖完都还没轮到。这些小朋友就像是“饥饿”的进程,一直得不到他们需要的资源(冰淇淋)。

1.1.3 死循环(Infinite Loop)

教科书解释:
死循环是一种编程错误,指的是程序中的一个循环结构设计不当,导致循环条件始终满足,使得程序无法自行跳出循环,一直在循环体内执行,无法继续执行后续的代码。

注意:死锁和饥饿是操作系统的问题,死循环是被管理者的问题

1.2 死锁产生的条件

互斥条件:临界资源是独占资源,只能在同一时间被同一进程独占,不能同时被多个进程共享。

想象你和朋友去图书馆借书,一本书一次只能借给一个人,不能两个人同时看同一本。

占有和等待条件:已经持有一个资源的进程可以继续请求别的资源,等待过程中不释放已有资源。

就像一些小朋友各自拿着自己的玩具,同时又想玩别人手里的玩具,他们不愿意放下手中的玩具,就在那里等待。

不剥夺条件:已获得的资源只能由进程自愿释放,不允许被其他进程剥夺。

你借到的书除非你看完了或者主动归还,管理员不能从你手上抢走给其他人,哪怕那个人急需这本书。

循环等待条件:每个进程都在等待链中等待下一个人的资源。

你等着A的书,A等着B的书,B等着C的书,而C正好等着你手里的书。这样形成了一个等待的圈,每个人都卡在那儿了。

注意:1. 死锁一定处于循环等待,循环等待不一定处于死锁
2. 对不可剥夺资源的不合理分配,可能导致死锁

二、预防死锁

破坏互斥条件:允许资源可以同时访问而非互斥使用,但在大多数情况下无法实现(写文件、键盘、磁带机……)

缺点
①实现困难②设计复杂度增加

破坏占有和等待条件: 要求进程在启动前声明它将需要的所有资源,仅当系统能够满足所有这些资源请求时才分配资源,否则进程等待直到资源齐全。

缺点
①资源利用率降低:进程可能因为一两个资源未到位就长时间等待,导致其他资源也被闲置。
②可能导致饥饿:长期等待某些资源的进程可能永远无法获取所有资源,从而饥饿。

破坏不剥夺条件:
法Ⅰ:占有资源进程若要申请新资源,必须主动释放已占用资源(剥夺式),若仍需要占用此资源,应当重新提出申请,从而破坏不剥夺条件,可能会造成进程重复地申请和释放资源。

法Ⅱ:当操作系统为某个新进程分配资源时,如果有则分配,如果没有,则将剥夺占有此资源进程的全部资源,让该进程进入等待状态。(需要考虑进程的优先级)

缺点:
①实现较复杂
②释放已有的资源可能导致前一段工作失效
③反复申请释放资源增加系统开销

破坏循环等待条件
采用层次分配策略:

  1. 资源排序与分类
    首先,对系统中的所有资源进行分类和排序,给予每个类型的资源一个唯一的标识符或编号。这个编号不一定反映资源的实际价值或重要性,而是为了确保在请求资源时有一个固定的顺序。比如,可以将资源标记为R1、R2、R3…等,按照某种逻辑(比如资源的使用频率、重要性等)排序。

  2. 进程请求资源遵循顺序
    接下来,要求每个进程在请求资源时,必须按照资源的编号顺序进行。也就是说,一个进程在已经持有R1资源的情况下,只能请求R2或编号更高的资源,而不能反向请求R0或更低编号的资源。这样做的目的是,确保进程间不会因为资源请求的交叉而导致循环等待的链条形成。

  3. 预防循环的检查机制
    在进程请求资源时,系统需要有一个检查机制,验证此次请求是否符合上述的顺序规则。如果进程试图违反顺序请求资源(比如持有R3却请求R2),请求会被拒绝,直到进程释放其持有的资源并按照正确的顺序重新发起请求。

  4. 资源分配策略
    在资源分配时,系统还需要确保资源是按照编号顺序逐步分配给进程的。一旦进程获得了某个编号的资源,它只能继续申请编号更高的资源,这在逻辑上断绝了形成闭环的可能性。

举例说明:
假设我们有三个资源类型:打印机(R1)、扫描仪(R2)、复印机(R3),并且已经按照某种逻辑进行了排序。

1.进程A首先请求并获得了打印机(R1)。

2.接着,A想要使用扫描仪(R2),此时因为它已经拥有比R2编号低的资源,所以可以顺利获取。

3.假设此时进程B正在等待打印机(R1),它不能直接跳过去请求扫描仪(R2),因为这将违反顺序原则,必须等待A释放R1。

4.这样,即使有多个进程同时运行,也不会形成如A等待B的扫描仪,B等待A的打印机这样的循环等待情况。

m个资源被n个进程共享,每个进程都要求K个资源 m > n x (k-1)一定不会发生死锁

三、避免死锁

银行家算法

四、死锁的检测和解除

4.1 资源分配图和死锁定理

资源类用方框(口)
此资源类中的各种资源用黑圈点(●)
进程用圆圈(⚪)
有向边表示进程申请和分配资源

死锁定理:如果一个系统的进程-资源分配图(进程与资源之间的关系图)是不可完全简化的,那么该系统中存在死锁

4.2 死锁的检测和恢复

资源剥夺法、进程回退法、进程撤销法、系统重启法

  1. 结束所有进程的执行并重启操作系统。(损失很大)
  2. 撤销陷于死锁的进程,解除死锁,继续运行
  3. 逐个撤销陷于死锁的进程,回收其资源并重新分派,直至死锁解除
  4. 剥夺陷于死锁的进程所占用的资源,并不撤销此进程,直至死锁解除(可能导致饥饿)
  5. 根据系统保存检查点让所有进程回退,直至死锁解除

欢迎添加我的微信公众号:Q1Hang的AI学习小屋,分享AIGC学习笔记与文章

在这里插入图片描述

这篇关于2.4 操作系统死锁(死锁的概念、产生、防止、预防、避免)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1025578

相关文章

【Linux进阶】UNIX体系结构分解——操作系统,内核,shell

1.什么是操作系统? 从严格意义上说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。我们通常将这种软件称为内核(kerel),因为它相对较小,而且位于环境的核心。  从广义上说,操作系统包括了内核和一些其他软件,这些软件使得计算机能够发挥作用,并使计算机具有自己的特生。这里所说的其他软件包括系统实用程序(system utility)、应用程序、shell以及公用函数库等

【操作系统】信号Signal超详解|捕捉函数

🔥博客主页: 我要成为C++领域大神🎥系列专栏:【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 如何触发信号 信号是Linux下的经典技术,一般操作系统利用信号杀死违规进程,典型进程干预手段,信号除了杀死进程外也可以挂起进程 kill -l 查看系统支持的信号

操作系统实训复习笔记(1)

目录 Linux vi/vim编辑器(简单) (1)vi/vim基本用法。 (2)vi/vim基础操作。 进程基础操作(简单) (1)fork()函数。 写文件系统函数(中等) ​编辑 (1)C语言读取文件。 (2)C语言写入文件。 1、write()函数。  读文件系统函数(简单) (1)read()函数。 作者本人的操作系统实训复习笔记 Linux

【Unity Shader】片段着色器(Fragment Shader)的概念及其使用方法

在Unity和图形编程中,片段着色器(Fragment Shader)是渲染管线中的一个阶段,负责计算屏幕上每个像素(片段)的颜色和特性。片段着色器通常在顶点着色器和任何几何处理之后运行,是决定最终像素颜色的关键步骤。 Fragment Shader的概念: 像素处理:片段着色器处理经过顶点着色器和几何着色器处理后,映射到屏幕空间的像素。颜色计算:它计算每个像素的颜色值,这可能包括纹理采样、光

【Unity Shader】Alpha Blend(Alpha混合)的概念及其使用示例

在Unity和图形编程中,Alpha Blend(也称为Alpha混合)是一种用于处理像素透明度的技术。它允许像素与背景像素融合,从而实现透明或半透明的效果。Alpha Blend在渲染具有透明度的物体(如窗户、玻璃、水、雾等)时非常重要。 Alpha Blend的概念: Alpha值:Alpha值是一个介于0(完全透明)和1(完全不透明)的数值,用于表示像素的透明度。混合模式:Alpha B

HarmonyOS NEXT:华为开启全新操作系统时代

在全球科技浪潮的汹涌澎湃中,华为再次以创新者的姿态,引领了一场关于操作系统的革命。HarmonyOS NEXT,这一由华为倾力打造的分布式操作系统,不仅是对现有技术的一次大胆突破,更是对未来智能生活的一次深邃展望。 HarmonyOS NEXT并非简单的迭代升级,而是在华为多年技术积淀的基础上,对操作系统的一次彻底重构。它采用微内核架构,摒弃了传统的宏内核模式,实现了模块化和组件化的设计理念

Spring 集成 RabbitMQ 与其概念,消息持久化,ACK机制

目录 RabbitMQ 概念exchange交换机机制 什么是交换机binding?Direct Exchange交换机Topic Exchange交换机Fanout Exchange交换机Header Exchange交换机RabbitMQ 的 Hello - Demo(springboot实现)RabbitMQ 的 Hello Demo(spring xml实现)RabbitMQ 在生产环境

netty中常用概念的理解

目录   目录ChannelHandler ChannelHandler功能介绍通过ChannelHandlerAdapter自定义拦截器ChannelHandlerContext接口ChannelPipeline ChannelPipeline介绍ChannelPipeline工作原理ChannelHandler的执行顺序   在《Netty权威指南》(第二版)中,ChannelP

Spring Statemachine 概念及应用

1 Finite-state machine 1.1 状态机定义 有限状态机,(英语:Finite-state machine, FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。 有限状态机体现了两点:首先是离散的,然后是有限的。 State:状态这个词有些难以定义,状态存储关于过去的信息,就是说它反映从系统开始到现在时刻的输入变化

1. 入门概念

1. 倒排索引 (1) 文档(document): 每条数据就是一个文档(2) 词条(term): 文档按照语义分成的词语(3) 倒排索引的案例: 词条是不会重复的,因此在建立索引的时候如图 2. mapping (1) 理解: mapping简单理解为索引库字段的约束。(2) 常见的mapping属性:type: 字段数据类型,常见类型:字符串: text(可分词的文本),