OS复习笔记ch6-1

news2024/12/27 11:34:44

死锁的原理

定义

一组进程中,其中每个进程因等待事件而阻塞,且所等待的事件只能被这组进程中的另一阻塞进程激发称之为死锁。

举例如下
image.png

四个车辆希望紧迫的希望能很快通过,每辆车需要两个象限的资源,然而四个车都只得到一个象限的资源,每辆车都过不去,此时就会发生阻塞。

死锁的原因

并发进程的资源竞争
  • 资源数目不足
  • 资源分配策略,如动态分配
  • 进程对资源使用要互斥访问

有关资源的竞争,比如上图中四辆车过交叉路口、著名的哲学家就餐问题,还有在之前的章节中,我们讲解互斥和同步的时候也举了很多由于资源竞争的例子,这里不再赘述。

并发进程执行的顺序

这里举了一个双进程的例子,理解执行顺序对死锁的影响
image.png
有两个进程P、Q需要互斥地访问A、B一段时间,各自的伪代码如右图所示


下图是进程访问图示(图中总共有6种路线,中间的/和\区域需要互斥访问)
image.png

  • 1、2号线,表示Q进程先拿到了A和B的资源,P进程拿不到,只能等到Q进程释放资源。同理,对于5、6号线路P进程先拿到资源,然后是Q进程等待,不会引发死锁。

  • 3、4号线路是死锁不可避免,两者只是顺序不同,所以我们就只看其中一条线路即可。3号线路中,其中P拥有A,Q拥有B。由于不能走到互斥访问区域,所以接下来不管怎么走,P和Q两个都会走到死锁区域的边界点,即图中的(GetB,GetA)。
    image.png

解决方案
image.png
此时,可以通过修改P进程的代码实现互斥,将Get B和release A交换顺序,可以避免死锁
这样资源的访问图如下
image.png
两者的不可访问区域没有重叠,进程对资源的获得有隙可乘,就可以实现互斥访问了

资源分类

  • 可重用资源的死锁:内存,信号量等
  • 可消耗资源:中断信号、message(消息)、I/O缓冲区

资源分配图

image.png
箭头表示资源的供给关系,左图P1需要Ra资源,右图P1占有Ra资源
image.png

图c是资源数目不够,然后形成了回路,相互得不到资源。
而图d是资源数目充足,虽然表面是回路,但是下一时刻资源可以分配,也就没有死锁。

死锁的条件

  • Mutual exclusion 互斥
    任一时刻只允许一个进程使用资源
  • Hold-and-wait 保持和请求
    进程在请求其余资源时,不主动释放已经占用的资源
  • No preemption 不可剥夺
    进程已经占用的资源,不会被强制剥夺
  • Circular wait 循环等待
    资源分配图不能化简,存在一个进程之间的封闭环路。(注意:循环等待不一定导致死锁,但是死锁一定有循环等待)

这四个条件都是必要条件,只不过一般情况下,根据循环等待判断死锁,往往比较有充分性。

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

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

相关文章

使用 Django Rest Framework 构建强大的 Web API

文章目录 安装 Django Rest Framework创建序列化器创建视图和 URL 路由配置认证和权限测试 API Django Rest Framework(DRF)是一个强大的工具,用于在 Django Web 框架中构建灵活且功能丰富的 Web API。它提供了许多功能,包括序列化…

揭秘Kafka从入门到精通,架构最全详解

Kafka架构最全详解 Kafka,作为关键消息中间件,广泛应用于大型架构与顶尖企业。本篇深入解析Kafka架构,掌握其核心技术要点。 Kafka Apache Kafka 是一个分布式发布-订阅消息系统,由LinkedIn开创的分布式发布-订阅消息系统&#x…

长安链使用Golang编写智能合约教程(一)

编写前的注意事项: 1、运行一条带有Doker_GoVM的链 2、建议直接用官方的在线IDE去写合约,因为写完可以直接测,缺点只是调试不方便。 3、自己拉环境在本地写合约,编译时注意编译环境,官方有提醒你去Linux下去编译。 …

010-Linux磁盘介绍

文章目录 1、名词 2、类型 3、尺寸 4、接口/协议/总线 5、命名 6、分区方式 MBR分区 GPT分区 1、名词 磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘(Floppy D…

牛客网刷题 | BC99 正方形图案

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 KiKi学习了循环&am…

CST初级教程 六

本篇教程将以差分线为例,实例讲解参数化建模及参数扫描。 一 Project创建 点击New and Recent,再点击New Template 点击MICROVAVES & RF/OTICAL,然后在选中Circuit & Components。 点击对话框中Next按钮,在弹出对话框…

C语言中的七种常用排序

今天&#xff0c;为大家整理了C语言中几种常用的排序&#xff0c;以及他们在实际中的运用&#xff08;有Bug请在下方评论&#xff09;&#xff1a; 一.桶排序 #include <stdio.h> int main() {int book[1001],i,j,t,n;for(i0;i<1000;i)book[i]0;scanf("%d"…

B树与B+树区别

B树和B树是常见的数据库索引结构&#xff0c;都具有相较于二叉树层级较少&#xff0c;查找效率高的特点&#xff0c;它们之间有以下几个主要区别&#xff1a; 1.节点存储数据的方式不同 B树的叶子结点和非叶子节点都会存储数据&#xff0c;指针和数据共同保存在同一节点中B树…

MySQL的索引, 到底怎么创建?

目录 前言 MySQL的数据结构 索引是一把双刃剑 索引创建原则 如何给一个列挑选索引? 索引列的基数, 要尽量小 索引列的类型尽量小 索引长字符串的前缀 不要对索引列进行计算操作或者函数计算. 不要老想着查询, 想想插入该怎么办? 避免索引冗余和重复 前言 今天在…

【二叉树】:LeetCode:100.相同的数(分治)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;初阶初阶结构刷题 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 1.问题描述&#xff1a; 2.问题分析&#xff1a; 二叉树是区分结构的&#xff0c;即左右子树是不一…

上5个B端系统的设计规范,让你的开发比着葫芦画瓢。

B端系统设计规范在企业级系统开发中起着重要的作用&#xff0c;具体包括以下几个方面&#xff1a; 统一风格和布局&#xff1a;设计规范能够统一系统的风格和布局&#xff0c;使不同功能模块的界面看起来一致&#xff0c;提升用户的使用体验和学习成本。通过统一的设计规范&am…

模型驱动架构设计方法及应用

引言 模型驱动架构&#xff08;Model Driven Architecture&#xff0c;MDA&#xff09;是一种软件开发方法论&#xff0c;它强调使用一系列抽象层次的模型&#xff0c;并利用模型之间的转换来实现从需求到设计、直至代码生成的全过程。MDA的核心思想是在软件开发过程中强调使用…

druid 1.2.14,application.yaml配置文件中,如何进行数据库加密配置

步骤一&#xff1a;先生成加密的密码&#xff1a; 步骤二&#xff1a;配置application.yaml文件&#xff1a; spring:datasource:driver-class-name: com.mysql.cj.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSourcedruid:username: rootpassword: aPJ35saFz6ASmnmNt…

CentOS 7.9部署宝塔面板超详细

CentOS7 部署宝塔面板 Linux的宝塔面板搭建起来非常轻松&#xff0c;也可以用一句话来形容&#xff0c;如果喝水一样简单&#xff0c;只需一条命令剩下的交给时间&#xff0c;几分钟就能部署好&#xff0c;然后就可以直接进行登录&#xff0c;直接可以安装LNMP、LAMP平台&…

数据结构与算法(Java版) | 详解十大经典排序算法之一:希尔排序

接下来&#xff0c;我来给大家讲解第四种排序算法&#xff0c;即希尔排序。 简单插入排序所存在的问题 在上篇文章中&#xff0c;我已经给大家讲解完插入排序了&#xff0c;虽说是讲完了&#xff0c;但在这里我还是想请大家开动脑筋思考一下&#xff0c;就是咱们讲解的插入排…

SDK崩溃后怎么打开已有工程

1.进到SDK里面&#xff0c;保留&#xff1a;platform、bsp和工程包&#xff08;这里是C&#xff09;&#xff0c;其他都删掉 2.windows窗口运行sdk 3.导入sdk工程

基于springboot+vue的4S店车辆管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

人工智能场景下的网络负载均衡技术

AI技术驱动智能应用井喷&#xff0c;智能算力增速远超通用算力。IDC预测&#xff0c;未来五年&#xff0c;我国智能算力规模年复合增长率将超50%&#xff0c;开启数据中心算力新纪元。随着需求激增&#xff0c;数据中心或智算网络亟需扩容、增速、减时延&#xff0c;确保网络稳…

数据结构(三)栈 队列 数组

2024年5月26日一稿(王道P78) 栈 基本概念 基本操作 顺序存储结构 基本操作 共享栈

数据库管理-第194期 网络加速RDMA初探(20240526)

数据库管理194期 2024-05-26 数据库管理-第194期 网络加速RDMA初探&#xff08;20240526&#xff09;1 概念2 发展3 使用总结 数据库管理-第194期 网络加速RDMA初探&#xff08;20240526&#xff09; 作者&#xff1a;胖头鱼的鱼缸&#xff08;尹海文&#xff09; Oracle ACE A…