操作系统(8)死锁

一、概念

       死锁是指在一个进程集合中的每个进程都在等待只能由该集合中的其他进程才能引起的事件,而无限期地僵持下去的局面。在多任务环境中,由于资源分配不当,导致两个或多个进程在等待对方释放资源时陷入无限等待的状态,这就是死锁。

二、产生因素

  1. 系统资源有限:当系统中多个进程共享资源时,如打印机、公用队列等,其数目不足以满足所有进程的需求,会引起进程对资源的竞争而产生死锁。
  2. 并发进程间的推进顺序不当:进程在运行过程中,请求和释放资源的顺序不当,也会产生进程死锁。
  3. 资源分配策略:资源的分配策略也可能导致死锁的发生,如资源的分配是否公平、是否遵循一定的顺序等。

三、必要条件

      产生死锁必须同时满足以下四个必要条件:

  1. 互斥条件:进程对所分配到的资源进行排他性使用,即在一段时间内某资源仅能被一个进程占用。如果此时还有其他进程请求该资源,那么请求的进程只能等待,直到占有资源的进程用毕释放。
  2. 占有和等待条件:进程已经持有至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程阻塞,但又对自己已获得的资源保持不放。
  3. 不剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行剥夺,而只能由获得该资源的进程自己释放。
  4. 环路等待条件:在发生死锁时,必然存在一个进程-资源的环形链,即进程集合中的进程形成一种头尾相接的环形等待资源关系。

四、死锁的处理策略

  1. 死锁预防

    • 破坏互斥条件:允许资源同时被多个进程访问,但这对于某些资源(如打印机)来说是不可能的。
    • 破坏占有和等待条件:实行资源预先分配策略,即进程在运行前一次性向系统申请它所需要的全部资源,若所需全部资源得不到满足,则不分配任何资源,此进程暂不运行。只有当系统能够满足当前进程所需的全部资源时,才一次性将所申请的资源全部分配给该进程。但是,这样会导致资源利用率降低,并可能导致饥饿现象。
    • 破坏不剥夺条件:当一个进程占有了一部分资源,在申请新的资源而得不到满足时,必须释放所有占有的资源以便让其他进程使用。但这种方法实现起来比较困难,且可能导致工作失效、增加系统开销。
    • 破坏环路等待条件:采用资源有序分配法,对所有资源排序编号,所有进程对资源的请求必须严格按资源序号递增的顺序提出,即只有占用了小号资源才能申请大号资源。这种策略可以破坏环路等待条件,从而预防死锁的发生。
  2. 死锁避免

           死锁避免方法允许系统中同时存在死锁的三个必要条件,即互斥、占有且等待和非抢占。每当进程提出资源申请时,系统分析满足该资源请求时系统是否会发生死锁,若不会发生则实施分配,否则拒绝分配。银行家算法就是一种避免死锁的方法,它模拟银行家贷款的策略来分配系统资源,以确保系统始终处于安全状态。
  3. 死锁检测与解除

           死锁检测和解除对资源分配不加任何限制,也不采取死锁避免措施。系统定时运行一个“死锁检测”程序,如果检测到系统发生了死锁,再采取措施解除它。解除死锁的方法包括立即结束所有进程的执行并重新启动操作系统、剥夺陷于死锁的进程占用的资源但不撤销它直到死锁解除、撤销陷于死锁的所有进程并解除死锁继续运行等。此外,还可以使用进程-资源分配图来检测系统是否处于死锁状态,并采取相应的措施来解除死锁。

五、总结

       死锁是操作系统中一个复杂且重要的问题。为了避免和解决死锁问题,我们需要深入理解死锁的产生原因和必要条件,并采取相应的预防、避免、检测和解除策略。在实际应用中,我们需要根据系统的具体需求和特点选择合适的策略来确保系统的稳定性和可靠性。

 结语     

艺术并非模仿生活

而是生活在模仿艺术

!!!

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

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

相关文章

Micropython 扩展C模块<HelloWorld>

开发环境 MCU:Pico1(无wifi版)使用固件:自编译版本开发环境:MacBook Pro Sonoma 14.5开发工具:Thonny 4.1.6开发语言:MicroPython 1.24 执行示例 在github上获取micropython,我使…

解决Logitech G hub 无法进入一直转圈的方案(2024.12)

如果你不是最新版本无法加载尝试以下方案:删除AppData 文件夹下的logihub文件夹 具体路径:用户名根据实际你的请情况修改 C:\Users\Administrator\AppData\Local 如果你有通过lua编译脚本,记得备份!! ↓如果你是最新…

【记录49】vue2 vue-office在线预览 docx、pdf、excel文档

vue2 在线预览 docx、pdf、excel文档 docx npm install vue-office/docx vue-demi0.14.6 指定版本 npm install vue-office/docx vue-demi <template><VueOfficeDocx :src"pdf" style"height: 100vh;" rendere"rendereHandler" error&…

MVC模式的理解和实践

在软件开发中&#xff0c;MVC&#xff08;Model-View-Controller&#xff09;模式是一种经典的设计模式&#xff0c;特别适用于构建用户界面复杂的Web应用程序。MVC通过将应用程序的业务逻辑、数据显示和用户交互分离&#xff0c;使代码结构更加清晰&#xff0c;易于维护和扩展…

[A-22]ARMv8/v9-SMMU多级页表架构

ver0.1 [看前序文章有惊喜,关注W\X\G=Z+H=“浩瀚架构师”,可以解锁全部文章] 前言 前文我们对SMMU的系统架构和基本功能做了简要的介绍,现在大家大致对SMMU在基于ARM体系的系统架构下的总线位置和产品形态有了基本的了解。这里我们还是简单做个前情回顾,从总线架构角度看…

【UE5 “RuntimeLoadFbx”插件】运行时加载FBX模型

前言 为了解决在Runtime时能够直接根据FBX模型路径直接加载FBX的问题&#xff0c;推荐一款名为“RuntimeLoadFBX”的插件。 用法 插件用法如下&#xff0c;只需要指定fbx的地址就可以在场景中生成Actor模型 通过指定输入参数“Cal Collision”来设置FBX模型的碰撞 还可以通过…

精品基于Python实现的微信小程序校园导航系统-微信小程序

[含文档PPT源码等] [包运行成功永久免费答疑辅导] 《django微信小程序校园导航系统》该项目采用技术Python的django框架、mysql数据库 &#xff0c;项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、核心代码介绍视频等 软件开发环境及开发工具&#xf…

Rstudio-server的安装、配置、维护

一、安装Rstudio-server (1)安装R语言&#xff1a; sudo apt install r-base # 如果没有管理员权限无法操作 # 这样装上R默认在/usr/bin/R其实基本上的流程都可以参考posit的官网&#xff08;也就是Rstudio的官网&#xff09;&#xff1a; https://posit.co/download/rstudio…

Python序列的应用(八):元组、字典

前言&#xff1a;在Python编程语言中&#xff0c;序列是一种非常重要的数据结构&#xff0c;它允许我们存储和操作有序的数据集合。在前几期的内容中&#xff0c;我们已经探讨了列表&#xff08;List&#xff09;和集合&#xff08;Set&#xff09;这两种序列的应用&#xff0c…

OpenCV 功能函数介绍

一&#xff0c; 二值化函数 功能&#xff1a; 用于对图像进行二值化处理 参数&#xff1a; cv2.threshold(输入你的图像所对应的灰度图&#xff0c; 阈值&#xff1a;是浮点还是整数取决予图像的数据类型 最大值;高于阈值的像素值&#xff0c; 阈值类型&#xff1a;cv2.THR…

【Python】使用Selenium的find_element模块获取网页上的大段文字和表格的方法(建议收藏!)

发现了一个使用Selenium的find_element模块&#xff0c;快速获取文字和表格的方法&#xff0c;很实在&#xff0c;以后爬网的时候&#xff0c;就不用beautifulSoup 和 pandas的read_html 混起来用了&#xff01; 文字部分&#xff1a;实现网络节点下&#xff0c;某个节点下的其…

【AI知识】有监督学习之回归任务(附线性回归代码及可视化)

1. 回归的基本概念 在机器学习的有监督学习中&#xff0c;回归&#xff08;Regression&#xff09;是一种常见的任务&#xff0c;它的目标是通过观察数据来建立一个模型&#xff0c;用一个或多个自变量来预测因变量的值。 回归分析通常用于&#xff1a; a.预测&#xff0c;基于…

边缘计算+人工智能:让设备更聪明的秘密

引言&#xff1a;日常生活中的“智能”设备 你是否发现&#xff0c;身边的设备正变得越来越“聪明”&#xff1f; 早上醒来时&#xff0c;智能音箱已经根据你的日程播放舒缓音乐&#xff1b;走进厨房&#xff0c;智能冰箱提醒你今天的食材库存&#xff1b;而在城市道路上&…

JVM 双亲委派模型以及垃圾回收机制

目录 1. JVM 内存区域划分 2. JVM 中类加载的过程 1) 类加载的基本流程 2) 双亲委派模型 3. JVM 中垃圾回收机制 1) 找到垃圾 a) 引用计数 b) 可达性分析 2) 释放垃圾 1. JVM 内存区域划分 一个运行起来的 Java 进程&#xff0c;其实就是一个 JVM 虚拟机。 而进程是…

ansible自动化运维(四)jinjia2模板

Jinjia2模板 前面说到playbook组成的时候&#xff0c;有介绍到template模块&#xff0c;而template模块对模板文件进行渲染时&#xff0c;使用的就是jinja2模板引擎&#xff0c;jinja2本身就是基于python的模板引擎&#xff0c;所以下面先来了解一下jinjia2模板的一些用法 基…

Windows安装Jira

下载 Download Jira Data Center | Atlassian https://product-downloads.atlassian.com/software/jira/downloads/atlassian-jira-software-10.3.0-x64.exe 以管理员身份安装&#xff0c;否则弹出以下提醒 创建和配置MySQL数据库&#xff1a;参照 Connecting Jira applicat…

uniapp - 微信小程序

一、background-image 大图不显示的问题 解决方法&#xff1a; 1、使用网络地址&#xff1b;2、使用 base64 urlTobase64(filePath) {// #ifdef MP-WEIXINlet img ${filePath},imgBase64 wx.getFileSystemManager().readFileSync(img, "base64"),base64Url data:…

DETR: End-to-End Object Detection with Transformers论文学习

论文地址&#xff1a;https://arxiv.org/pdf/2005.12872 代码地址&#xff1a;https://github.com/facebookresearch/detr 相关学习视频&#xff1a;https://space.bilibili.com/94779326/lists?sid1531941 标题前言&#xff1a; DETR 是 Facebook 团队于 2020 年提出的基于…

Vue3状态管理:Pinia架构设计分析

Vue3状态管理:Pinia架构设计分析 介绍 在Vue.js开发中&#xff0c;状态管理是一个非常重要的部分。随着Vue3的发布&#xff0c;Pinia作为一种新的状态管理架构也相继问世。本文将对Pinia架构进行深入分析&#xff0c;帮助读者了解其设计原理、特点以及在实际项目中的应用。 架构…

【IDEA】启动报错

今天启动IDEA报错 报错信息&#xff1a; Cannot connect to already running IDE instance. Exception: Process 5,444 is still running 打开任务管理器&#xff0c;关掉进程ID5444的任务