死锁

  • 死锁问题
    • 死锁的原因
  • 死锁的特点 Deadlock Characterization
    • 必要条件
    • 资源分配图 RAG resource allocation graph
  • 处理死锁的三种方式
    • 死锁预防 Deadlock Prevention
      • 破坏互斥条件
      • 破坏请求与保持hold and wait
      • 破坏非剥夺条件
      • 打破循环等待
      • 例题
    • 死锁避免 Deadlock Avoidance
      • 单实例:利用资源分配图解决问题 RAG
        • 将资源分配图转化为等待图 Wait-for graph
      • 多实例:使用银行家算法
    • 死锁检测 Deadlock Detection
      • 单实例
      • 多实例
  • 从死锁中恢复 Recovery from Deadlock

死锁问题

死锁是指一组处于阻塞状态的进程,每个进程持有其他进程需要的资源,而又等待其他资源所幽幽的资源,致使相互等待,均无法向前推进。

死锁的原因

  • 资源竞争
  • 进程间的推进顺序不当

死锁的特点 Deadlock Characterization

必要条件

  • 互斥访问 mutex exclusion
  • 保持和等待 hold and wait : 一个进程持有其他进程想要访问的资源,并进入阻塞状态
  • 不可剥夺 No preemption:当资源被一个进程持有之后,只有当进程执行完后才能释放这些资源
  • 循环等待 Circular wait:

在单实例的情况下,这四个条件是充分必要条件。
在多实例的情况下,这四个条件是必要条件。

资源分配图 RAG resource allocation graph


P1,P2,P3互相等待进入死锁

处理死锁的三种方式

  • 死锁预防:对进程使用资源加上诸多限制,以防系统出现死锁
  • 死锁避免:基于系统的先验知识,当进程申请资源的时候,若果发现当前进程对于资源的请求可能导致思索的发生则拒绝该申请。
  • 死锁检测和恢复:鸵鸟政策,等待死锁产生,检测死锁再从死锁中恢复。

死锁预防 Deadlock Prevention

当四种条件同时出现的时候才会出现死锁

破坏互斥条件

进程要求对所分配的资源(如打印机)进行排他性控制,即在一段时间内某资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。

破坏请求与保持hold and wait

  • 占有不等待:在进程执行前,将其所需要的所有资源都分配给他,就不会进入阻塞
  • 等待不占有:当进程不用有资源时才能申请资源,进程使用完并释放后才能申请另一种资源。
    问题:
    很多进程只有当运行时才知道他需要多少资源

破坏非剥夺条件

  • 某些阻塞的进程拥有资源,将i分配给其他等待的进程
  • 如果资源申请没满足,则释放已获得的资源
    问题是,当进程的资源被剥夺了,再去执行的时候会重新申请资源,导致效率低下,和饥饿问题
    适用于状态可保存及恢复的资源,比如CPU寄存器等,一般不适用于互斥锁,打印机,信号量等这类资源

打破循环等待

破坏“循环等待”条件的一种方法,是将系统中的所有资源统一编号,进程可在任何时刻提出资源申请,但所有申请必须按照资源的编号顺序(升序)提出
问题是编号困难,限制了新设备的增加,也增加编程人员的负担。

例题

某系统有同类资源m个,他们共n个进程共享,如果每个进程最多只申请x个资源,说明不等式
n(x−1)+1≤mn(x-1) + 1 \leq mn(x−1)+1≤m成立该系统就不会死锁

在极端情况下,每个进程都申请了(x-1)个资源,并同时申请下一个资源。如果还有一个资源那么,其中一个进程就会得到资源向下执行,执行完毕后释放所有资源,并使得其他进程依次道道所需的资源而执行结束,不会产生死锁。
因此产生死锁的条件是,可用资源数至少为n(x−1)+1n(x-1) + 1n(x−1)+1个

死锁避免 Deadlock Avoidance

  • 需要每个进程都声明他所需要的每种资源所需要的最大数
  • 死锁避免算法动态地检查资源分配状态,来保证不会产生循环等待的情况
  • 资源分配状态包括:可用资源数,已分配资源数,资源最大需求数

其中一个安全状态如下图:

可以找到某一种执行顺序,使得不发生死锁就是安全状态。
安全序列 safe sequence :
p1,p0,p2

不安全状态,无论按那种顺序分配资源都会发生死锁

当然,上述状态还未发生死锁,但是当最后一个资源完成分配之后,就成了死锁状态。

  • 在安全状态,没有产生死锁
  • 在不安全状态,极有可能死锁
  • 死锁避免就是要避免系统进入不安全状态。
  • 当有进程申请资源时,系统必须判断分配给他资源后是否仍满足安全状态,否则拒绝。

总体思想:当进程提出资源请求后,系统进行假分配,然后检测假分配之后的状态是否安全,若果不安全,则拒绝请求,否则,满足本次进程的资源请求;

单实例:利用资源分配图解决问题 RAG

  • 实边:已分配资源,或已提出申请
  • 虚边:尚需要,但是还没有提出申请

  • 不安全状态:不论实边还是虚边,只要是存在环,则认为存在死锁的可能


安照死锁避免的要求这种状态的图是不能出现的。但是还没有彻底进入死锁
算法概述:

  • 1、讲相关的虚边转换为请求边
  • 2、如果请求的资源可得,假分配,将请求边转换为资源分配边,否则请求资源的进程进入阻塞状态
  • 3、如果有环,则不能分配资源,该进程进入阻塞,否则对进程分配资源

将资源分配图转化为等待图 Wait-for graph

多实例:使用银行家算法

如果有n个进程,m种资源将Avalible ,Max,Allacation,Need 分别用二维数组表示出来。

银行家算法

  • 1、申请合法性检查:if Request_i <= Need_i ,go to step 2 Otherwise ,raise error condition
  • 2、资源可用性检查:if Request_i <= Avaliable, got o step 3.otherwise P_i must wait
  • 3、假分配:
  •              Avaliable = Avaliable - Request_i;
    
  •              Allocation_i = Allocation_i + Request_i;
    
  •              Need_i = Need_i - Request_i;
    
  • 4、对修改后的状态进行安全性检查
  •     if safe    将资源分配给 pi
    
  •      if unsafe  pi 必须进入阻塞,保持原先的资源分配状态
    

安全性检查算法

  • 1、 work 为长度为m的向量 finish 为长度为n的向量
  •         初始化: work = Avaliable
    
  •                        Finish[i] = False for i = 0,1,...,n-1
    
  • 2、Find i 满足:
  •        (a) Finish[i] = false
    
  •        (b) Need_i <= work
    
  •         如果这样的 i 不存在,转到步骤4
    
  • 3、work = work + allocation_i
  •   Finish[i] = True
    
  •   go to step 2
    
  • 4、if Finish[i] = i for all i, 系统是安全的,否则,系统是不安全状态。

银行家算法,破坏循环等待

死锁检测 Deadlock Detection

单实例


P之间有环就说明存在死锁
对于资源是单个实例的情况,检查是否存在死锁进程,需要画出进程等待图,然后检查出是否存在圈

多实例

多实例是否存在死锁,化成矩阵,运行安全性检查算法

从死锁中恢复 Recovery from Deadlock

操作系统 第七章 死锁相关推荐

  1. 汤晓丹的第四版计算机操作系统--第七章总结概述

    第七章 文件管理 文件类型 按照用途分类:系统文件,用户文件,库文件. 按照形式分类:源文件,目标文件,可执行文件. 按存取控制属性分类:只执行文件,只读文件,读写文件. 按组织形式和处理方式分类:普 ...

  2. 操作系统第七章笔记---进程同步

    本文内容整理自西安交通大学软件学院田丽华老师的课件,仅供学习使用,请勿转载 操作系统系列笔记汇总:操作系统笔记及思维导图汇总附复习建议_Qlz的博客-CSDN博客 文章目录 文章目录 文章目录 思维导 ...

  3. 操作系统第七章和第八章:文件管理

    文件管理系统 文件系统:操作系统中的各类文件.管理文件的软件,以及管理文件所涉及到的数据结构等信息的集合. 文件的属性:类型,长度,地址,建立时间 文件系统模型: 文件的基本概念.操作 任何一个文件都 ...

  4. 网络操作系统 第七章 管理TCP/IP网络

    习题 1.简述TCP /IP 通信协议的四层结构的内容及应用. 应用层:应用程序间沟通的层,如简单电子邮件传输协议(SMTP).文件传输协议(FTP).网络远程访问协议(Telnet)等. 传输层:在 ...

  5. 【操作系统】第十一章死锁与进程通信

    以下是操作系统的各部分知识点的目录: 第一章:操作系统的概述 https://blog.csdn.net/weixin_44751294/article/details/104172847 第二章:启 ...

  6. 【考研复习】《操作系统原理》孟庆昌等编著课后习题+答案——第七章

    CSDN话题挑战赛第2期 参赛话题:学习笔记 前言 此书在最后的附录 B 中,有给出部分重难点部分的参考答案.如果想要此书习题答案,可点以下链接:为一个压缩包,以图片形式,习题图片按章节排序,答案图片 ...

  7. 计算机操作系统第四版汤小丹主编课后习题答案(更新至第七章)

    第一章 1. 设计现代OS的主要目标是什么? (1)方便性使得计算机更易于使用 (2)有效性提高资源利用效率,使系统的吞吐量更大 (3)可扩充性方便增加新的功能和模块,以适应计算机硬件.体系结构和应用 ...

  8. linux死锁的例子,操作系统教程—Linux实例分析 孟庆昌 第8章 死锁new.ppt

    操作系统教程-Linux实例分析 孟庆昌 第8章 死锁new.ppt 第8章 死锁 8.1 概述 8.2 产生死锁的条件 8.3 死锁的预防 8.4 死锁的避免 8.5 死锁的检测与恢复 8.6 处理 ...

  9. 操作系统课后答案第七章

    **操作系统课后答案** 第七章 文件管理 1.何谓数据项.记录和文件? 答:数据项:数据项是最低级的数据组织形式,可分为基本数据项和组合数据项.基本数据项是用于描述一个对象某种属性的字符集,是数据组 ...

最新文章

  1. js利用localStorage和sessionStorage完成记住我功能
  2. 一个产品经理的自述:我在腾讯工作的这一年(转)
  3. 云时代,我们需要怎样的数据库?
  4. ios开发之使用多文件上传的简单封装最原始的
  5. ASP.NET-第一天-数据库知识
  6. PHP 结合redis实现高并发下抢购、秒杀
  7. java多个收银台收银_Java策略模式设计(简易收银台SpringBoot)
  8. [Android][Android Studio] Gradle项目中添加JNI生成文件(.so文件)
  9. Microsoft Internet Explorer浏览器包含最新版本的内置Adobe Flash Player的解决办法
  10. C/C++ 16进制转IEEE754
  11. PTA L2-048 寻宝图 (25 分)
  12. 【OP都能理解之】 张量
  13. 父子组件间传值,父传子,子传父
  14. FIN_WAIT_2状态解释
  15. CyberWorld赛博世界是否能成为元宇宙核心力量
  16. JAVA判断是否是水仙花数
  17. 关于ATSHA204a的使用流程
  18. Python 带你高效剪辑创作短视频
  19. java和c++复试面试题
  20. 服务器里的文件删了能恢复吗,远程把服务器文件删了怎么恢复

热门文章

  1. 数据可视化实战:实验报告
  2. springboot小程序商城毕业设计毕设作品开题报告开题答辩PPT
  3. 计算机BIOS密码清除方法4种!
  4. 修复VMware网络连接失败及设置固定IP
  5. 自动修复工具介绍——SemFix [ICSE 2013]
  6. 如何培养孩子的金钱价值观
  7. 如何运用计算机辅助英语教学,谈英语计算机辅助教学 (中学英语教学论文)
  8. 计算机学科专业基础综合科目(408)
  9. 《跟着咩总啃CS:APP》——第0章
  10. c语言遍历json数组,如何使用c动态获取所有json元素?