【软考】死锁

目录

一、基本概念
  • 1.死锁是指两个以上的进程互相都要使用对方已占有的资源,导致资源无法继续运行下去的现象。
  • 2.例如:吃饭需要使用2根筷子,张三有一根筷子,李四也有一根筷子,张三对李四说让李四的筷子给张三,张三吃完后再给李四,李四也是这么说的,然后双方一直僵持,导致都没吃上饭
二、死锁的条件
  • 1.死锁的四个必要条件为:互斥条件,保持和等待条件,不可剥夺条件,环路等待条件,四个条件缺一不可,同时满足才能形成死锁
  • 2.互斥条件:一个资源每次只能被一个进程使用,如果资源是共享的,所有进程都可以使用,就不会产生死锁的现象。一根筷子要么被张三使用,要么被李四使用
  • 3.保持和等待条件:一个进程因请求其它资源被阻塞时,也不释放已获得的资源。保持自己持有的资源,等待他人释放资源。张三持有一根筷子,等待李四给筷子;李四持有一根筷子,等待张三给筷子
  • 4.不剥夺条件:有些系统资源是不可剥夺的,当进程已获得不可剥夺的资源,系统不能强行收回,只能等进程完成时自己释放。张三还差一根筷子,不能强行抢李四的筷子,必须得等李四主动给才行
  • 5.环路等待条件:若干个进程形成资源申请环路,每个都占用对方要申请下一个资源。张三要李四的筷子,李四要张三的筷子,形成环状;若王五也有一根筷子给了张三,则破坏了环状,可以破除死
三、解决死锁
3.1 预防死锁
  • 1.破坏导致死锁的4个必要条件之一就可以预防死锁,属于事前检查
  • 2.预先静态分配法:用户申请资源时,申请所需的全部资源,破坏保持和等待条件,不需要等待其它进程释放的资源。一次性给张三2根筷子,吃完后释放掉2根筷子,然后一次性给李四2根筷子
  • 3.资源有序分配法:将资源分层排序,保证不形成环路,得到上一层资源后,才能够申请下一层资源。给筷子加上编号,1号筷子和2号筷子,首先给张三分配1号筷子,李四等待,然后给张三分配2号筷子,张三吃完后,释放1号筷子,分配1号筷子给李四,张三释放2号筷子,分配2号筷子给李四
3.2 避免死锁
  • 1.避免是指进程在每次申请资源时判断这些操作是否安全,属于事前检查
  • 2.银行家算法:对进程发出的资源请求进行检测,如果发现分配资源后系统进入不安全状态,则不予分配,否则分配。安全但会增加系统的开销
3.3 检测死锁
  • 1.使用死锁检测方法,此方法对资源的分配不加限制,允许死锁产生。但系统定时运行一个死锁检测程序,如果检测到死锁则去解除
3.4 解除死锁
  • 1.资源剥夺法:从一些进程那强行剥夺足够数量的资源分配给死锁进程
  • 2.撤销进程法:根据某种策略逐个地撤销死锁进程,直到解除死锁为止
四、进程管理
  • 1.进程管理是操作系统的核心,设计不当会出现死锁问题。
  • 2.如果进程在等待一件不可能发生的事,进程就死锁了
  • 3.如果多个进程产生死锁,就会造成系统死锁
  • 4.系统不可能发生死锁的最小资源数:(w-1)*m+1<=n
  • 5.每个进程都需要w个资源,一共m个进程,在极端情况下,每个进程都分配到了w-1个资源,所以都无法完成任务,则会死锁,再给其中任意一个进程分配1个资源,那么该进程拿到了w个资源,则可以完成任务,释放掉资源后,其它进程也可以依次拿到w个资源完成任务
五、最小资源数计算
5.1 例题1
  • 1.系统有5个进程:A、B、C、D、E。这5个进程都需要4个系统资源。如果系统至少有多少个资源,则不可能发生死锁。

  • 2.一定死锁的情况:某个进程分配了3个资源,其它进程均没有分配到资源。极端情况下,所有资源都给一个进程,对于A,需要4块钱才能办事,给A零到三块钱,都不会办事的。因此资源小于4时,一定会发生死锁。

  • 3.可能正常执行的情况:极端情况下,4个资源都分配给同一个进程,即

  • 4.可能死锁的情况,极端情况下,15个资源平均分配给5个进程,即每个进程分配到3个资源,即

  • 5.因此资源数在4到15个时,可能死锁,可能正常执行

  • 6.当资源数大于15时,必定不会死锁,即

  • 7.假设第16号资源给到进程B,进程B得到资源后,运行完,释放了4个资源,再将释放资源分配其它任意进程,其它进程均可完成任务,释放所持有的资源

  • 8.因此资源数大于15时,必定不会死锁

相关推荐
明洞日记1 天前
【图解软考八股034】深入解析 UML:识别标准建模图示
c++·软件工程·软考·uml·面向对象·架构设计
ba_pi2 天前
每天写点什么2026-02-04(2.2)新一代技术
大数据·软考
明洞日记3 天前
【软考每日一练030】软件维护:逆向工程与再工程的区别与联系
c++·软件工程·软考·逆向工程
数据与后端架构提升之路3 天前
论边云协同架构在自动驾驶系统中的应用
架构·自动驾驶·软考
明洞日记3 天前
【软考每日一练026】软件工程深度解析:软件开发方法学的分类与应用实战
c++·ai·系统架构·软件工程·软考
明洞日记3 天前
【软考每日一练028】软件工程考点:螺旋模型与构件组装模型深度解析
c++·ai·系统架构·软件工程·软考·开发模型
不凉帅6 天前
NO.6 数据库设计基础知识
数据库·分布式数据库·软考·数据库设计
ba_pi8 天前
每天写点什么2026-01-28-(1.1)信息与信息化
软考·高项·信息系统项目管理师
不凉帅9 天前
NO.5软件工程
软件测试·软件工程·软考·软件开发·软件项目管理
ba_pi9 天前
每天写点什么2026-01-28-(1.2)现代化基础设施
软考·高项