操作系统入门 -- 死锁

操作系统入门 – 死锁

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 解除死锁

  • 抢占资源:从一个或多个进程中抢占足够多的资源,分配给死锁进程,以解除死锁。
  • 终止进程(包括终止所有死锁进程和逐个终止进程):终止系统中的一个或多个死锁进程,直到打破循环环路,使系统从死锁状态中解脱出来。
  • 进程退回

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/859745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI视频改字系统+五端兼容+卡密兑换+内置素材,系统搭建部署

目录 前言&#xff1a; 一、AI视频改字系统是什么 二、AI视频改字系统的功能 三、总结 前言&#xff1a; AI视频改字是利用套模板的原理&#xff0c;对短视频的模板进行更改&#xff0c;从而生成新的短视频。当然这个AI短视频改字系统都是有素材的&#xff0c;不用自己上传…

vim跳转到文件末尾

在 Vim 编辑器中&#xff0c;有几种方法可以跳转到文件的末尾&#xff1a; 使用 G 命令&#xff1a; 在 Vim 的正常模式下&#xff08;即不是插入模式或可视模式&#xff09;&#xff0c;只需按下大写字母 G。这将立即将光标移动到文件的末尾。 使用 : 命令模式&#xff1a; 在…

在小程序wxml中截取字符串

在微信小程序的WXML中直接进行字符串截取是不被支持的&#xff0c;因为WXML主要负责布局和渲染&#xff0c;不包含数据处理逻辑。 但你可以通过使用微信小程序提供的wxs&#xff08;WeiXin Script&#xff09;来实现字符串的截取。 wxs是一种运行在客户端的脚本语言&#xff…

tensorflow2实现多智能体强化学习算法MADDPG

目录 1.MADDPG算法简介2.实验环境搭建3.实验代码3.1 maddpg.py1.导入一些要使用的包以及函数2.MADDPG中单个智能体的结构基类(1)单个智能体的有关参数(2)单个智能体的有关网络的结构actor 的网络结构critic的网络结构 (3)优化器部分(4)MADDPGAgent完整代码 3.MADDPG中单个智能体…

深入解析与解决高并发下的线程池死锁问题

问题背景 在现代互联网应用中&#xff0c;高并发场景是常态&#xff0c;为了高效处理大量用户请求&#xff0c;后端服务通常会采用线程池来管理线程资源。然而&#xff0c;在一个复杂的微服务架构项目中&#xff0c;我们遇到了一个棘手的问题&#xff1a;在业务高峰期&#xf…

WSL安装的Ubuntu与docker desktop集成

WSL安装的Ubuntu与docker desktop集成 最近因为项目需要&#xff0c;要在本地利用WSL搭建一个docker和Ubuntu的部署环境。一开始并不知道docker desktop与Ubuntu可以集成使用&#xff0c;所以在Ubuntu上独立安装了docker引擎&#xff0c;但在安装docker-compose的时候出现以下…

MN316 AT模式丨低功耗实测分析

NB-IoT模组的应用场景一般具备低频次、小数据量、上行为主、工作时间短&#xff08;激活态时间短&#xff09;等特点。因此&#xff0c;休眠态的功耗是NB-IoT模组产品综合耗电的重点考量参数之一。中移物联OneMO超低功耗NB-IoT模组MN316&#xff0c;凭借其紧凑的尺寸、极低的休…

天翼云服务器80、443等特殊端口无法访问原因记录

之前阿里云、腾讯云的服务器上&#xff0c;想要用域名访问项目简单配置就好了&#xff0c;这次甲方直接买的翼云的服务器&#xff0c;配置了半天&#xff0c;防火墙端口80、443端口开放了&#xff0c;控制台安全组也添加了&#xff0c;就是不能用域名或IP直接访问&#xff0c;配…

51串口通讯

介绍 串口是一种应用十分广泛的通讯接口&#xff0c;串口成本低、容易使用、通信线路简单&#xff0c;可实现两个设备的互相通信。单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信&#xff0c;极大的扩展了单片机的应用范围&#xff0…

Java读取指定 JAR 包路径中的 git.properties 文件

Java读取指定 JAR 包路径中的 git.properties 文件 在上述代码中&#xff0c;首先打开 JAR 文件&#xff0c;获取 git.properties 文件的 JarEntry 对象&#xff0c;如果存在该条目&#xff0c;就获取其输入流进行后续的读取和处理。具体的读取和处理逻辑需要根据您的实际需求在…

淘宝item_password接口技术详解

淘宝item_password接口技术详解 一、引言 在电商领域&#xff0c;淘宝作为中国最大的在线购物平台之一&#xff0c;拥有海量的商品信息和用户数据。为了方便用户快速访问和分享商品&#xff0c;淘宝推出了淘口令功能&#xff0c;这是一种加密的链接形式&#xff0c;用户可以在…

在QLineEdit或QPushButton上检测Enter键按下

前言 在开发一个游戏应用时,玩家需要猜测系统随机选择的数字。当玩家输入一个数字并点击“Play”按钮后,应用会根据玩家的猜测给出反馈。然而,频繁地点击按钮显得有些不便。为了提升用户体验,我们希望在玩家按下Enter键时也能触发相同的操作。本文将介绍如何在QLineEdit和…

一文搞懂Python局部变量与全局变量的12大陷阱

今天我们要来聊聊一个让人又爱又恨的话题——局部变量与全局变量的八大迷雾。在Python的世界里&#xff0c;变量就像是你的小宠物&#xff0c;有时候它们乖乖听话&#xff0c;但一不小心就给你挖了个大坑&#xff01;别担心&#xff0c;今天我们就一起把这些陷阱挖出来&#xf…

基于VTK9.3.0+Visual Studio2017 c++实现DICOM影像MPR多平面重建+V R体绘制4个视图展示功能的实现

开源库&#xff1a;VTK9.3.0 开发工具&#xff1a;Visual Studio2017 开发语言&#xff1a;C 实现过程&#xff1a; class vtkImageInteractionCallback : public vtkCommand { public:static vtkImageInteractionCallback* New(){return new vtkImageInteractionCallback()…

文库小程序搭建部署:实现资源共享正向反馈

文档库相信大家应该不陌生&#xff0c;日常我们的工作模板、会议模板、求职时的简历模板、教育界的教学模板等来源方式都出自于文档库&#xff0c;随着互联网的发展和工作需求&#xff0c;文档模板开启了新型的知识变现新途径&#xff0c;通过文库小程序&#xff0c;我们不仅能…

Web服务器与Apache(LAMP架构+搭建论坛)

一、Web基础 1.HTML概述 HTML&#xff08;Hypertext Markup Language&#xff09;是一种标记语音,用于创建和组织Web页面的结构和内容&#xff0c;HTML是构建Web页面的基础&#xff0c;定义了页面的结构和内容&#xff0c;通过标记和元素来实现 2.HTML文件结构 <html>…

压缩pdf文件大小在线,在线免费压缩pdf

在现在办公中&#xff0c;PDF文档已经成为我们日常工作中不可或缺的一部分。然而&#xff0c;随着文档内容的不断丰富&#xff0c;PDF文件的大小也逐渐增大&#xff0c;这不仅占用了大量的存储空间&#xff0c;而且在传输和共享时也显得尤为不便。所以有时候我们需要把pdf压缩小…

文本三剑客之awk

awk 按行取列 awk默认的分割符&#xff1a;空格&#xff0c;tab键&#xff0c;多个空格自动压缩成一个 awk的工作原理&#xff0c;根据指令信息&#xff0c;逐行读取文本内容&#xff0c;然后按照条件进行1格式化输出 awk的选项&#xff1a; -F 指定分割符&#xff0c;默认就是…

Git回滚到某次提交

要在Git中回滚到某次提交&#xff0c;你可以使用git reset命令。但是&#xff0c;你需要明确你想要进行的是“软回滚”&#xff08;soft reset&#xff09;&#xff0c;“混合回滚”&#xff08;mixed reset&#xff09;还是“硬回滚”&#xff08;hard reset&#xff09;&…

# Kafka_深入探秘者(4):kafka 主题 topic

Kafka_深入探秘者&#xff08;4&#xff09;&#xff1a;kafka 主题 topic 一、kafka 主题管理 1、kafka 创建主题 topic 命令 1&#xff09;命令&#xff1a; # 切换到 kafka 安装目录 cd /usr/local/kafka/kafka_2.12-2.8.0/# 创建一个名为 heima 的 主题 bin/kafka-topic…