🐦1 死锁的概念
🦢1.1 总览
🦢1.2 什么是死锁
🦢1.3 死锁、饥饿、死循环的区别
🐧1.3.1 概念
🐧1.3.2 区别
🦢1.4 死锁产生的必要条件
死锁的产生必须满足以下四个基本条件
🐧1.4.1 互斥条件
🐧1.4.2 不剥夺条件
🐧1.4.3 请求和保持
🐧1.4.4 循环等待
可以类比于哲学家问题的死锁情况,如图
注意:
假如在上图的哲学家问题中,有第六个哲学家手里有筷子,那么意味着同类资源数大于1,只要第六个哲学家提供筷子就可以解决死锁的局面。
🦢1.5 什么时候会发生死锁
🦢1.6 死锁的处理策略
🦢1.7 总结
🐦2 死锁的处理策略——预防死锁
🦃2.1 总览
死锁只有在上述四个条件全部满足时才会产生,因此只要破坏其中的任何一个就可以避免死锁。
🦃2.2 破坏互斥条件
🦆2.2.1 什么是互斥条件?
🦆2.2.1 如何破坏?
当存在互斥条件时,比如说对打印机的使用是互斥的,则可能会出现阻塞的情况:
为此可以采用SPOOLing技术,将互斥资源在逻辑上打造成为共享资源。对于上述情况,可以增加一个缓冲空间,它接收了来自进程对打印机的使用请求,并将请求存储起来,一个一个的实现,如图:
🦆2.2.3 缺点
🦃2.3 破坏不剥夺条件
🦆2.3.1 什么是不剥夺条件
🦆2.3.2 如何破坏不剥夺条件
🦆2.3.3 缺点
🦃2.4 破坏请求和保持条件
🦆2.4.1 解释
🦆2.4.2 如何破坏
🦆2.4.3 缺点
例如,假如现在有A、B、C三类进程,A需要资源1,B需要资源2,C需要资源1、2。假如源源不断的有A、B类进程申请资源,则C类进程始终等不到资源1、2空闲的时候,就会造成饥饿。
🦃2.5 破坏循环等待条件
🦆2.5.1 解释
🦆2.5.2 如何破坏
🦆2.5.3 缺点
🦃2.6 总结
🐦3 死锁的处理策略——避免死锁
🦅3.1 总览
🦅3.2 安全序列
🦅3.3 不安全状态
🦅3.4 银行家算法
假设此时共有n个进程,m种资源
🦉3.4.1 定义以下变量
(1)可用资源向量available[m]:记录第m种资源当前可利用的数量
(2)最大需求向量max[i][j]:记录第i个进程对第j种资源的最大需求量
(3)分配矩阵allocation[i][j]:记录第i个进程拥有第j种资源的数量
(4)请求向量request[i][j]:记录第i个进程对第j种资源的申请量
(5)需求矩阵need[i][j]:记录第i个矩阵第第j种资源的需求量。等于分配矩阵与分配矩阵的差值
🦉3.4.2 银行家算法的步骤
第④步的安全性检查的步骤为
🐦4 死锁的检测和解除
🦩4.1 总览
🦩4.2 死锁的检测
🦚4.2.1 检测死锁的前提条件
🦚4.2.2 数据结构
定义以下符号
具体如图所示
🦚4.2.3 检测算法
(1)关于可完全简化
(2)算法内容
(3)具体实现解释
①无死锁
在示意图中,R1此时的资源数量为0,而R2此时的资源数量为1,而P1像R2申请的资源数为1,小于等于剩余的资源数,故抹去P1。
之后,R1剩余资源数为2,P2申请资源数为1,可以满足,因此不会发生死锁。
②有死锁
这是一个典型的死锁图,P1申请R1,R1分配给了P2,P2申请R2,R2分配给了P3,P3申请R3,R3分配给了P1、P2。三者都在等待对方释放资源,导致了死锁情况。
事实上,本图找不到既不堵塞又不孤立的进程。检测算法不能继续。
(4)补充
🦩4.3 死锁的解除
🦚4.3.1 解除死锁的办法
🦚4.3.2 进程撤销根据
①进程优先级:优先级越高的自然越不应该被首先撤销
②还要多久才可以完成:显然,进程完成所需时间越短,它就越不应该被首先撤销,应该撤销那些还要很久才可以完成的进程
③已执行多长时间:撤销执行时间越长的进程,那么意味着之后还要花更长的时间去完成,系统付出的代价也越大。所以,执行时间越短的进程应该被首先撤销。
④进程已经使用了多少资源。一个进程所拥有资源的数量越多,撤销它而彻底解除死锁局面的可能性就越大,就更应该被首先撤销。
⑤进程是交互式的还是批处理式的。撤销交互式的进程对于用户的体验可能不是很好,因此应首先撤销批处理式的进程
🦩4.4 总结
🕮 5 总结
操作系统,如默默守护的守夜者,无声地管理硬件与软件的交流,为计算机创造和谐秩序。
它是无形的引导者,让复杂的任务变得井然有序,为用户提供无忧体验。
操作系统的巧妙设计,让计算机变得更加智能高效,让人与科技之间的交流更加顺畅。
在每一次启动中,它如信任的伙伴,带领我们进入数字世界的奇妙旅程。
渴望挑战操作系统的学习路径和掌握进阶技术?不妨点击下方链接,一同探讨更多操作系统的奇迹吧。我们推出了引领趋势的💻OS专栏:《OS从基础到进阶》 ,旨在深度探索OS的实际应用和创新。🌐🔍