【操作系统】死锁问题---死锁的消除方法

这篇具有很好参考价值的文章主要介绍了【操作系统】死锁问题---死锁的消除方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文章将主要解释死锁的消除方法

一、死锁的概念

        这是《操作系统》对于死锁的定义:

有并发进程P1,P2,…Pn,它们共享资源R1,R2,…Rm (n>0,m>0, n>=m)。其中,每个Pi(1≤i≤n)拥有资源Rj(1≤j ≤m),直到不再有剩余资源。同时,各Pi又在不释放Rj的前提下要求Rk(k≠j,1≤k ≤m),从而造成资源的互相占有和互相等待。在没有外力驱动的情况下,该组并发进程停止往前推进,陷入永久等待状态。

        说人话就是,我自己的资源不给别人,别人的资源不给我,导致两个人都因为凑不齐资源而不能执行相关操作而一直等待,这就是死锁。结构图如下所示:

如何解决死锁,操作系统,算法

 二、死锁产生的必要条件

        如果产生死锁则一定会满足以下条件:

1、互斥条件。一个资源不能同时被两个或两个以上的进程所拥有。

2、不剥夺条件。一个进程未结束前,任何进程都不能得到该进程的资源。

3、部分分配。进程每次申请所需要的一部分资源,在等待申请其他资源的时间里,不会释放它已经拥有的资源。

4、环路条件。如下图所示:

如何解决死锁,操作系统,算法

而只要上述的条件被破坏就不会产生死锁,这就是我们解决死锁问题的思路。

三、死锁的消除方法

1、死锁预防

        死锁预防是一种静态的消除死锁的方法。它是采用某种策略,限制并发进程对资源的请求,从而使得死锁的必要条件在系统执行的任何时间都不满足。

方法:

①、互斥条件是资源固有属性,不能避免

②、破坏“部分分配(请求和保持)”条件。预先全分配,等待释放。缺点:资源严重浪费(不使用也被占用)、降低进程并发性

③、破坏“不剥夺”条件。缺点:增加系统开销,且进程前段工作可能失效。

④、破坏“环路等待”条件。将资源分类并按顺利排列,规定按递增顺序请求资源;如果需要多个资源,必须同时请求(先低后高),如果占用了高的资源而请求低的资源时,必须先释放高的资源。如此可以避免形成环路。缺点:限制进程对资源的请求,系统开销大。具体操作如下图所示,P3占有s3资源,当它想申请s2资源时必须释放s3资源。

如何解决死锁,操作系统,算法

2、死锁避免

        死锁避免可被称为动态预防,因为系统采用动态分配资源,在分配过程中预测出死锁发生的可能性并加以避免的方法。 

方法:

  • 进程启动拒绝:如果进程对资源的申请可能导致死锁,就不启动这个进程
  • 资源分配拒绝:如果进程对资源的申请可能导致死锁,就不给进程分配该资源 

详解:

进程启动拒绝

如何解决死锁,操作系统,算法

该表说明表达的意思如下:

如何解决死锁,操作系统,算法

(j=1…m)

由公式知道,只有当申请的资源小于剩余的资源,就会分配给进程资源,否则就不分配进程资源。

       仅当满足以上条件时,才启动一个新进程Pn+1(即:只有满足新进程的请求及所有当前进程的最大请求量时,才启动该进程) 这个策略不是最优的,因为它假设了最坏的情况:所有进程同时发出它们的最大请求

资源分配拒绝

避免死锁的著名算法——银行家算法(Dijkstra)

类比的问题:

客户向银行申请贷款的数量是有限的 每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量 在满足所有贷款要求时,客户应及时归还贷款 银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要

例子:

设银行家有10万元资金,有三个客户A、B、C,分别需要8、3、9万元贷款完成项目 客户要求分期贷款,目前A已贷到4万 此时,B要申请2万,C要申请4万 银行家需要评估贷款请求的安全性,避免出现坏账    B借2万,C借4万,能借吗?在这个例子中银行家是操作系统, 资金是资源 ,客户是要申请资源的进程。

允许进程动态申请资源,在系统分配资源之前,先计算此次分配是否安全

    本次分配不会导致系统进入不安全状态,则分配, 否则,本次请求资源的进程等待

安全状态

    本次分配之后,存在一个进程安全序列{P1, …, Pn},对其中每一个Pi来说,它还需要的资源量不超过系统当前剩余的资源量与所有Pj (j<i)占有的资源量之和

不安全状态

    不存在安全序列

算法中用到的数据结构

 Available可用资源数组

    Available[j] = k     目前资源j有k个

Max最大需求矩阵

    Max[i,j] = l        进程Pi对资源j的最大需求数量是l个

Allocation分配矩阵  

    Allocation[i, j] = m     进程Pi已分配到资源j的数量是m个

Need需求矩阵

    Need[i, j] = n     进程Pi还需要资源j的数量是n个

Request[i]资源请求

    若Request[i, j] = q, 进程Pi请求资源j的数量是q个

流程图如下:

分配资源流程图

如何解决死锁,操作系统,算法

 文章来源地址https://www.toymoban.com/news/detail-555509.html

释放资源流程图:

Work:系统运行过程中可用资源数量,初值=Available

Finish[i]:系统是否有足够资源分配给进程Pi,使其运行结束,初始为false

如何解决死锁,操作系统,算法

 

到了这里,关于【操作系统】死锁问题---死锁的消除方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 操作系统-进程和线程-同步、互斥、死锁

    目录 一、同步互斥  二、互斥的实现方法 2.1软件实现 2.1.1单标志法 2.1.2双标志先检查 2.1.3双标志后检查 2.1.4Petersons算法 2.2硬件实现 2.2.1 TestAndSet指令 2.2.2 Swap指令   三、信号量机制 3.1整形变量  3.2 记录型变量  3.3用信号量实现进程互斥、同步、前驱关系 3.3.1互斥  3.3.2同步

    2024年02月08日
    浏览(52)
  • 操作系统进程线程(三)—进程状态、同步互斥、锁、死锁

    原子操作的概念 原子操作就是不可中断的一个或者一系列操作。 原子操作如何实现 总线锁定 使用处理器提供的一个LOCK#信号,当一个处理器在总线上输出此信号的时候,其他处理器的请求将被阻塞住,那么该处理器可以独占内存。 缓存锁 总线锁开销比较大,因为把CPU和内

    2024年02月04日
    浏览(52)
  • 操作系统实验二死锁避免之银行家算法的模拟

    死锁  (1)定义  (2)死锁产生的原因  (3)死锁产生的必要条件  (4)死锁的处理策略 银行家算法  (1)核心思想  (2)数据结构  (3)算法描述    (4)  安全性检查算法 银行家算法的模拟 (1)数据结构 (2)完整代码 (3)测试 所谓死锁,是指多个进程因为竞争资

    2024年02月01日
    浏览(65)
  • 【第三章 | 处理机调度与死锁】《操作系统 慕课版》课后答案 + 复习

    目录 【第三章】处理机调度与死锁 | 本章概念 1.处理机调度概述 2.调度算法相关概念 3.实时调度相关概念 4.死锁 5.资源分配图 | 本章算法 1.周转时间与带权周转时间的计算公式 2.调度算法 FCFS  SJF  PR  RR 3.实时调度算法 EDF 4.避免死锁 —— 银行家算法 | 课后简答题 1.处理机调

    2024年02月01日
    浏览(46)
  • 【JAVA】云HIS系统使用和操作过程中的常见问题及解决方法

    一、门诊业务中遇到的问题 (1)门诊医生如何查询往期病人? 答: 点击门诊医生站左侧患者列表,在弹出的页面点击已诊分页,在搜索框输入患者姓名,在结果中找到对应患者,点击详情按钮即可查询患者往期就诊信息,点击想要查询的门诊记录前方的方框即可查询相应的

    2024年02月16日
    浏览(55)
  • 关于Surface系列重装系统的操作方法,出现的问题并给出了解决办法。

     我去年在微软官网淘到了一个surface go的平板电脑,由于我把Windows系统从Win10更新到了Win11,导致系统很卡顿(不是更新的Win11的原因,我猜测可能是平板电脑的自身版本有关,处理器性能太低了,带不动),所以我试着去还原系统,在还原的过程中,遇到了一些问题,现记

    2024年02月08日
    浏览(36)
  • 【操作系统-进程】PV操作——读者写者问题

    读者写者问题,其本质就是连续多个同类进程访问同一个临界资源的问题。 第一个进程开始访问临界资源前,需要对资源加上互斥锁,后面的进程再访问时就不用再对资源加互斥锁了,直到最后一个进程访问完后,发现自己是最后一个进程,就解锁互斥锁。这就像一种情况:

    2024年01月16日
    浏览(52)
  • 电脑无法找到操作系统的解决方法

    在编程中遇到电脑无法找到操作系统的问题是比较常见的情况。这种情况通常发生在启动计算机时,计算机无法找到正确的操作系统来加载。下面将介绍一些可能的解决方法,帮助您解决这个问题。 检查引导顺序:首先,您需要确保计算机的引导顺序正确设置。引导顺序决定

    2024年01月19日
    浏览(48)
  • 凝思操作系统配置IP地址方法

    方法1: /etc/network/interfaces文件中配置: 如上,以此配置所有的eth*,, 测试: 1)未加allow-hotplug eth0     ip不生效; 2)这句可以不加:gateway 193.168.100.1   另外,正如,windows系统一块网卡可以设置多个ip地址, linux系统一块网卡,也可以设置多个ip 注意:第二个ip,没有添加g

    2024年02月12日
    浏览(46)
  • 如何编写Windows操作系统

    编写一个完整的操作系统是一项非常复杂的任务,需要深入了解计算机体系结构和操作系统的工作原理,还需要熟悉汇编语言和C/C++编程语言。在这里,我们简单介绍一下编写Windows操作系统的基本步骤。 Windows操作系统是由微软公司开发的,因此微软提供了一些用于Windows操作

    2024年02月07日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包