当前位置:首页 > 学习资源 > 讲师博文 > 死锁

死锁 时间:2023-09-11      来源:华清远见

死锁的概念

如果一个进程中的每一个进程都在等待仅该组进程中的其他进程才能引发的事件,那么该组进程是死锁的

死锁产生的原因

➢ 多个进程之间争夺不可抢占的资源, 进程推荐顺序或请求顺序不当, 可能会产生死锁

➢ 系统资源不足, 多个进程消耗同种资源

解决死锁的办法

➢ 死锁防止

➢ 死锁避免

➢ 死锁检测和恢复

死锁防止

死锁有四个必要条件: 互斥条件, 占有且等待条件, 不可抢占条件, 循环等待条件

而防止死锁就要破坏掉这四个条件中的其中一个, 防止死锁产生, 但可能会降低程序效率.

1. 破坏“占有且等待”条件

所有的进程在开始运行之前,必须一次性地申请其在整个运行过程中所需要的全部资源。

2. 破坏“不可抢占”条件

当一个已经持有了一些资源的进程在提出新的资源请求没有得到满足时,它必须释放已经保持的所有资源,待以后需要使用的时候再重新申请。这就意味着进程已占有的资源会被短暂地释放或者说是被抢占了。

该种方法实现起来比较复杂,且代价也比较大。释放已经保持的资源很有可能会导致进程之前的工作实效等,反复的申请和释放资源会导致进程的执行被无限的推迟,这不仅会延长进程的周转周期,还会影响系统的吞吐量。

3. 破坏“循环等待”条件

可以通过定义资源类型的线性顺序来预防,可将每个资源编号,当一个进程占有编号为i的资源时,那么它下一次申请资源只能申请编号大于i的资源。

死锁避免

采用资源分配算法, 如银行家算法等, 合理分配资源, 避免死锁产生, 但算法程序可能会增加系统负载.

可以利用银行家算法进行优化: 

1. 可利用资源向量Available:用于表示系统里边各种资源剩余的数目。由于系统里边拥有的资源通常都是有很多种(假设有m种),所以,我们用一个有m个元素的数组来表示各种资源。数组元素的初始值为系统里边所配置的该类全部可用资源的数目,其数值随着该类资源的分配与回收动态地改变。

2. 最大需求矩阵Max:用于表示各个进程对各种资源的额最大需求量。进程可能会有很多个(假设为n个),那么,我们就可以用一个nxm的矩阵来表示各个进程多各种资源的最大需求量

3. 分配矩阵Allocation:顾名思义,就是用于表示已经分配给各个进程的各种资源的数目。也是一个nxm的矩阵。

4. 需求矩阵Need:用于表示进程仍然需要的资源数目,用一个nxm的矩阵表示。系统可能没法一下就满足了某个进程的最大需求(通常进程对资源的最大需求也是只它在整个运行周期中需要的资源数目,并不是每一个时刻都需要这么多),于是,为了进程的执行能够向前推进,通常,系统会先分配个进程一部分资源保证进程能够执行起来。那么,进程的最大需求减去已经分配给进程的数目,就得到了进程仍然需要的资源数目了。

 

银行家算法通过对进程需求、占有和系统拥有资源的实时统计,确保系统在分配给进程资源不会造成死锁才会给与分配。

死锁检测和恢复

不试图阻止死锁的产生, 而是检测到死锁产生时, 采取措施进行恢复

● 每种资源类中仅有一个资源,则系统发生了死锁。此时,环路是系统发生死锁的充分必要条件,环路中的进程就是死锁进程。

● 每种资源类中有多个资源,则环路的存在只是产生死锁的必要不充分条件,系统未必会发生死锁。

 

上一篇:嵌入式Linux和Linux的区别是什么

下一篇:JRE与JDK的区别与联系

戳我查看嵌入式每月就业风云榜

点我了解华清远见高校学霸学习秘籍

猜你关心企业是如何评价华清学员的

干货分享
相关新闻
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2024 北京华清远见科技发展有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部