2.4_1 死锁的概念

news2024/11/18 12:23:27

文章目录

  • 2.4_1 死锁的概念
    • (一)什么是死锁
    • (二)死锁、饥饿、死循环的区别
    • (三)死锁产生的必要条件
    • (四)什么时候会发生死锁
    • (五)死锁的处理策略
  • 总结

2.4_1 死锁的概念

image-20240308120513257

(一)什么是死锁

  在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象,就是“死锁”。发生死锁后若无外力干涉,这些进程都将无法向前推进。

(二)死锁、饥饿、死循环的区别

死锁

  各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象。

饥饿

  由于长期得不到想要的资源,某进程无法向前推进的现象。

  比如:在短进程优先(SPF)算法中,若有源源不断的短进程到来,则长进程将一直得不到处理机,从而发生长进程“饥饿”。

死循环

  某进程执行过程中一直跳不出某个循环的现象。有时是因为程序bug导致的,有时是程序员故意设计的。

image-20240308121624655

  对于操作系统这门课而言,我们会讨论:如何解决死锁问题?如何解决饥饿问题?

  但我们不会说,如何解决死循环问题?——死循环不是操作系统这门课要考虑的。

(三)死锁产生的必要条件

  产生死锁必须同时满足以下四个条件,只要其中任一条件不成立,死锁就不会发生。

1.互斥条件

  只有对必须互斥使用的资源的争抢才会导致死锁(如哲学家的筷子、打印机设备)。

  而像内存、扬声器这样可以同时让多个进程使用的资源是不会导致死锁的(因为进程不用阻塞等待这种资源)。

2.不可剥夺条件

  进程所获得的资源在未使用完之前,不能由其他进程强行夺走,只能主动释放。

3.请求和保持条件

  进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求进程被阻塞,但又对自己已有的资源保持不放。

4.循环等待条件

  存在一种进程资源的循环等待链,链中的每一个进程已获得的资源同时被下一个进程所请求。

注意

  发生死锁时一定有循环等待,但是发生循环等待时未必死锁。(循环等待是死锁的必要不充分条件)

  说明:这是因为,“循环等待”可以是此时场景的一部分,而非全部。

  例如,还是哲学家进餐问题,A、B、C每个人分别只有一支筷子,且A等待B、B等待C、C等待A,这是一个循环等待。但此时,如果还有一个D手上拿着两支筷子正在吃饭,那么等待D吃完饭,将筷子释放出来,即可打破A、B、C的循环等待。那么,此时的情况也并非死锁,但的确包含了循环等待。

  如果同类资源数大于1,则即使有循环等待,也未必发生死锁。但如果系统中每类资源都只有一个,那循环等待就是死锁的充分必要条件了。

(四)什么时候会发生死锁

1.对系统资源的竞争

  各进程对不可剥夺的资源(如打印机)的竞争可能引起死锁,对可剥夺的资源(如CPU)的竞争是不会引起死锁的。

2.进程推进顺序非法

  请求和释放资源的顺序不当,也同样会导致死锁。

  例如,并发执行的进程P1、P2分别申请并占有了资源R1、R2,之后进程P1又紧接着申请资源R2,而进程R2又申请了资源R1,两者会因为申请的资源被对方占有而阻塞,从而发生死锁。但是,如果我们调整资源的请求释放顺序,就可以避免死锁,比如让进程P1先上处理机运行,一气呵成地使用完资源R1、R2;之后再换进程P2运行,一气呵成地使用完资源R1、R2,就不会发生死锁问题。

3.信号量的使用不当

  如生产者-消费者问题中,如果实现互斥的P操作在实现同步的P操作之前,就有可能导致死锁。(也可以把互斥信号量、同步信号量看做是一种抽象的系统资源,从而理解为“进程推进顺序非法”,即请求、释放资源的顺序不当)


  总之,对不可剥夺的资源的不合理分配,可能导致死锁。

(五)死锁的处理策略

1.预防死锁

  破坏死锁产生的四个必要条件中的一个或几个。

2.避免死锁

  用某种方法防止系统进入不安全状态,从而避免死锁(银行家算法)。

3.死锁的检测和解除

  允许死锁的发生,不过操作系统会负责检测出死锁的发生,然后采取某种措施解除死锁。

总结

image-20240308224722748

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

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

相关文章

Python笔记|基础算数运算+数字类型(1)

重新整理记录一下python的基础知识 基础运算符 、-、*、/ ;括号 ()用来分组。 >>>2 2 4 >>>50 - 5*6 20 >>>(50 - 5*6) / 4 5.0 >>>8 / 5 1.6向下取整除法:向下舍入到最接近的整数的数学除法。运算符是 //。比如1…

尚硅谷JavaScript高级学习笔记

01 准备 JavaScript中函数是对象。我们后续描述构造函数的内存模型时,会将构造函数称为构造函数对象。 02 数据类型 typeof 运算符来查看值的类型,它返回的是类型的字符串值 会做数据转换 03 相关问题 04数据_变量_内存 05相关问题1 06相关问题2 …

并发安全问题(超卖问题)

一,问题解析 超买问题就是,原本库存中有200件库存,结果由于并发问题售出了300件这就是炒卖问题对于买东西无非就是 查询商品,判断库存是否充足,如果充足则下单成功。 这里采用的是先查询,再判断&#xff0c…

谷歌广告(google Ads)投放技巧

Google广告投放涉及多个方面,以下是一些常用的技巧,可以帮助提高广告效果: 关键词选择: 选择与你的产品或服务紧密相关的关键词,并确保这些关键词与用户的搜索意图匹配。使用Google关键词规划工具来找到潜在的关键词&a…

C++泛型实现搜索二叉树

文章目录 二叉搜索树查找插入删除实现应用性能分析 二叉搜索树 二叉搜索树(BST,Binary Search Tree)又称为二叉排序树,空树也算 二叉搜索树有如下性质 若左子树不为空,则左子树上所有节点值小于根节点若右子树不为空…

USB2.0设备检测过程信号分析

1.简介 USB设备接入的Hub端口负责检测USB2.0设备是否存在和确定USB2.0设备的速度。检测设备是否存在和确定设备速度涉及一系列的信号交互,下面将分析该过程。 2.硬件 USB低速设备和全速/高速设备的连接器在硬件结构上有所不同,而主机或者Hub接收端连接…

NTFS安全权限

NTFS是新技术文件系统(New Technology File System)的缩写,是一种用于Windows操作系统的文件系统。NTFS提供了高级的功能和性能,包括文件和目录的权限控制、加密、压缩以及日志等。它被广泛应用于Windows NT、Windows 2000、Windo…

基于SSM的大王门店管理系统设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 SSM 3 1.1.1 Spring 3 1.1.2 Spring MVC 3 1.1.3 MyBatis 4 1.2 Shiro 4 1.3 前端技术 4 1.3.1 Bootstrap 4 1.3.2 jQuery 4 1.3.3 Ajax 5 1.3.4 Layui 5 1.3.5 Thymeleaf 5 1.4 本章小结 6 2 系统分析 7 2.1 功能需求分析…

云计算 3月8号 (wordpress的搭建)

项目wordpress 实验目的: 熟悉yum和编译安装操作 锻炼关联性思维,便于以后做项目 nginx 编译安装 1、安装源码包 [rootlinux-server ~]# yum -y install gcc make zlib-devel pcre pcre-devel openssl-devel [rootlinux-server ~]# wget http://nginx.…

数据库 04-01 数据库的设计

01.设计的第一步,记录用户的信息 02.第二步概念转换成数据库概念 概念设计是什么: 着重点: 03.第三步完成增删改查的功能设计 04.最后的在数据库上实现

[HackMyVM]靶场 Zeug

kali:192.168.56.104 主机发现 arp-scan -l # arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:d2:e0:49, IPv4: 192.168.56.104 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.56.1 0a:00:27:00:00:05 (Un…

Vue事件处理:.passive修饰符与应用场景

.passive修饰符 passive这个修饰符会执行默认方法。你们可能会问,明明默认执行为什么会设置这样一个修饰符。这就要说一下这个修饰符的本意了。 浏览器只有等内核线程执行到事件监听器对应的JavaScript代码时,才能知道内部是否会调用preventDefa…

数据结构——lesson7二叉树 堆的介绍与实现

前言💞💞 啦啦啦~这里是土土数据结构学习笔记🥳🥳 💥个人主页:大耳朵土土垚的博客 💥 所属专栏:数据结构学习笔记 💥对于数据结构顺序表链表有疑问的都可以在上面数据结…

JavaWeb笔记 --- 一JDBC

一、JDBC JDBC就是Java操作关系型数据库的一种API DriverManager 注册驱动可以不写 Class.forName("com.mysql.jdbc.Driver"); Connection Statement ResultSet PrepareStatement 密码输入一个SQL脚本,直接登录 预编译开启在url中 数据库连接池

程序如何知道mqtt设备是否在线

在做物联网设备的时候经常会碰到设备的在线与掉线 问题:emqx如何来实现这个在线与掉线 实现:添加一个规则,程序监控这个规则 1、SELECT * FROM "$events/client_connected", "$events/client_disconnected" 2、添加一…

10 事务控制

文章目录 事务控制事务概述事务操作事务四大特性事务隔离级别 事务控制 事务概述 MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,既需要删除人员的基本资料,也要删除和该…

leetcode 热题 100_除自身以外数组的乘积

题解一: 前缀 / 后缀数组:某元素除自身以外的乘积,也就是其全部前缀元素乘积 * 全部后缀元素乘积,因此我们可以构造前缀数组和后缀数组,分别存储前i个元素的成绩和后i个元素的乘积,再将i-1前缀乘积 * i1后缀…

C及C++每日练习(3)

选择题&#xff1a; 1.以下程序的输出结果是&#xff08;&#xff09; #include <stdio.h> main() { char a[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, *p; int i; i 8; p a i; printf("%s\n", p - 3); } A.6 B. 6789 C. 6 D.789 对于本题&#xff0…

亚信安慧AntDB:企业数据管理的明日之星

在信息科技飞速发展的时代&#xff0c;亚信科技AntDB团队提出了一项颠覆性的“超融合”理念&#xff0c;旨在满足企业日益增长的复杂混合负载和多样化数据类型的业务需求。这一创新性框架的核心思想在于融合多引擎和多能力&#xff0c;充分发挥分布式数据库引擎的架构优势&…

unicloud 集合 Collection 详解及其使用示例

Collection Collection是unicloud数据的指定表集合 获取集合Collection示例如下 const db uniCloud.database(); // 获取 user 集合的引用 const collection db.collection(user);集合 Collection 通过 db.collection(name) 可以获取指定集合的引用&#xff0c;在集合上可…