1515* [ 三、死锁] ( #三死锁 )
1616 * [ 死锁的必要条件] ( #死锁的必要条件 )
1717 * [ 死锁的处理方法] ( #死锁的处理方法 )
18+ * [ 鸵鸟策略] ( #鸵鸟策略 )
19+ * [ 死锁检测与死锁恢复] ( #死锁检测与死锁恢复 )
20+ * [ 死锁预防] ( #死锁预防 )
21+ * [ 死锁避免] ( #死锁避免 )
1822* [ 四、内存管理] ( #四内存管理 )
1923 * [ 虚拟内存] ( #虚拟内存 )
2024 * [ 分页系统地址映射] ( #分页系统地址映射 )
@@ -603,19 +607,28 @@ FIFO 常用于客户-服务器应用程序中,FIFO 用作汇聚点,在客户
603607
604608## 死锁的处理方法
605609
606- ### 1. 鸵鸟策略
610+ 主要有以下四种方法:
611+
612+ - 鸵鸟策略;
613+ - 死锁检测与死锁恢复
614+ - 死锁预防
615+ - 死锁避免
616+
617+ ## 鸵鸟策略
607618
608619把头埋在沙子里,假装根本没发生问题。
609620
610- 因为解决死锁问题的代价很高,因此鸵鸟策略这种不采取任务措施的方案会获得更高的性能。当发生死锁时不会对用户造成多大影响,或发生死锁的概率很低,可以采用鸵鸟策略。
621+ 因为解决死锁问题的代价很高,因此鸵鸟策略这种不采取任务措施的方案会获得更高的性能。
622+
623+ 当发生死锁时不会对用户造成多大影响,或发生死锁的概率很低,可以采用鸵鸟策略。
611624
612625大多数操作系统,包括 Unix,Linux 和 Windows,处理死锁问题的办法仅仅是忽略它。
613626
614- ### 2. 死锁检测与死锁恢复
627+ ## 死锁检测与死锁恢复
615628
616629不试图阻止死锁,而是当检测到死锁发生时,采取措施进行恢复。
617630
618- (一) 每种类型一个资源的死锁检测
631+ ### 1. 每种类型一个资源的死锁检测
619632
620633<div align =" center " > <img src =" ../pics//b1fa0453-a4b0-4eae-a352-48acca8fff74.png " /> </div ><br >
621634
@@ -625,7 +638,7 @@ FIFO 常用于客户-服务器应用程序中,FIFO 用作汇聚点,在客户
625638
626639每种类型一个资源的死锁检测算法是通过检测有向图是否存在环来实现,从一个节点出发进行深度优先搜索,对访问过的节点进行标记,如果访问了已经标记的节点,就表示有向图存在环,也就是检测到死锁的发生。
627640
628- (二) 每种类型多个资源的死锁检测
641+ ### 2. 每种类型多个资源的死锁检测
629642
630643<div align =" center " > <img src =" ../pics//e1eda3d5-5ec8-4708-8e25-1a04c5e11f48.png " /> </div ><br >
631644
@@ -646,35 +659,35 @@ FIFO 常用于客户-服务器应用程序中,FIFO 用作汇聚点,在客户
6466592 . 如果找到了这样一个进程,那么将 C 矩阵的第 i 行向量加到 A 中,标记该进程,并转回 1。
6476603 . 如果没有这样一个进程,算法终止。
648661
649- (三) 死锁恢复
662+ ### 3. 死锁恢复
650663
651664- 利用抢占恢复
652665- 利用回滚恢复
653666- 通过杀死进程恢复
654667
655- ### 3. 死锁预防
668+ ## 死锁预防
656669
657670在程序运行之前预防发生死锁。
658671
659- (一) 破坏互斥条件
672+ ### 1. 破坏互斥条件
660673
661674例如假脱机打印机技术允许若干个进程同时输出,唯一真正请求物理打印机的进程是打印机守护进程。
662675
663- (二) 破坏占有和等待条件
676+ ### 2. 破坏占有和等待条件
664677
665678一种实现方式是规定所有进程在开始执行前请求所需要的全部资源。
666679
667- (三) 破坏不可抢占条件
680+ ### 3. 破坏不可抢占条件
668681
669- (四) 破坏环路等待
682+ ### 4. 破坏环路等待
670683
671684给资源统一编号,进程只能按编号顺序来请求资源。
672685
673- ### 4. 死锁避免
686+ ## 死锁避免
674687
675688在程序运行时避免发生死锁。
676689
677- (一) 安全状态
690+ ### 1. 安全状态
678691
679692<div align =" center " > <img src =" ../pics//ed523051-608f-4c3f-b343-383e2d194470.png " /> </div ><br >
680693
@@ -684,15 +697,15 @@ FIFO 常用于客户-服务器应用程序中,FIFO 用作汇聚点,在客户
684697
685698安全状态的检测与死锁的检测类似,因为安全状态必须要求不能发生死锁。下面的银行家算法与死锁检测算法非常类似,可以结合着做参考对比。
686699
687- (二) 单个资源的银行家算法
700+ ### 2. 单个资源的银行家算法
688701
689702一个小城镇的银行家,他向一群客户分别承诺了一定的贷款额度,算法要做的是判断对请求的满足是否会进入不安全状态,如果是,就拒绝请求;否则予以分配。
690703
691704<div align =" center " > <img src =" ../pics//d160ec2e-cfe2-4640-bda7-62f53e58b8c0.png " /> </div ><br >
692705
693706上图 c 为不安全状态,因此算法会拒绝之前的请求,从而避免进入图 c 中的状态。
694707
695- (三) 多个资源的银行家算法
708+ ### 3. 多个资源的银行家算法
696709
697710<div align =" center " > <img src =" ../pics//62e0dd4f-44c3-43ee-bb6e-fedb9e068519.png " /> </div ><br >
698711
0 commit comments