创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥Linux系列专栏:Linux基础 🔥给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ
目录
- 一、死锁的概念
- 二、死锁的必要条件
- 三、预防死锁
- 四、避免死锁
- Dijkstra 的银行家算法:
一、死锁的概念
当多个进程竞争资源而处于阻塞状态,相互等待。
如果没有外力推进,进程无法继续执行任务,这种情况称为死锁(Deadlock)。
例如,进程A锁定了资源1并试图锁定资源2,而进程B已经锁定了资源2并试图锁定资源1。
如果这两个进程都不放弃它们已经锁定的资源,那么它们都将永远无法获取到它们需要的资源,从而导致死锁。
或者说每个进程所等待的事件是该组中其它进程释放所占有的资源。
二、死锁的必要条件
-
- 互斥:资源一次只有一个进程能够使用
-
- 不可抢占:资源不能被强制从一个进程中夺走,进程必须主动释放资源
-
- 请求与保持:一个进程至少持有一个资源,又需要阻塞等待另一个资源
-
- 循环等待:存在进程之间资源相互占用
三、预防死锁
只要四个死锁的必要条件任一个条件不成立,死锁就不会发生。
由于互斥条件是非共享设备所必须的,不仅不能改变,还应加以保证,因此主要是破坏产生死锁的后三个条件。
- 破坏请求与保持:
- 所有进程在开始运行之前,必须一次性地申请其在整个运行过程中所需的全部资源。
2.允许一个进程只获得运行初期所需的资源后,便开始运行。 运行过程中再逐步释放已分配给自己的、且已用毕的全部资源,然后再请求新的所需资源。
- 破坏不可抢占:当一个已经保持了某些不可被抢占资源的进程,提出新的资源请求而不能得到满足时,它必须释放已经保持的所有资源,待以后需要时再重新申请。这意味着进程已占有的资源会被暂时地释放,或者说是被抢占了,从而破坏了“不可抢占”条件。
- 破坏循环等待:规定每个进程必须按序号递增的顺序请求资源。如果需要多个同类资源单元,则必须一起请求。
四、避免死锁
避免死锁同样是属于事先预防的策略,但并不是事先采取某种限制措施,破坏产生死锁的必要条件,而是在资源动态分配过程中,防止系统进入不安全状态,以避免发生死锁,常用银行家算法来避免死锁的产生:
Dijkstra 的银行家算法:
主要思想:当进程请求资源时,银行家算法会预先检查系统是否有足够的资源满足该进程的需求,如果有,就分配资源,让进程执行,否则就让进程等待,直到有足够的资源为止。
银行家算法的四种数据:
- 系统中可利用的资源Available
- 所有进程对资源的最大需求Max
- 系统中的资源分配Allocation
- 所有进程还需要多少资源的情况Need
利用安全性算法检查系统是否安全(是否存在安全序列):判断已分配资源+系统可用资源 与 最大需求量的大小
大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。 |
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●) |