auto commit
This commit is contained in:
parent
66bc75d5d1
commit
7ec044276a
|
@ -15,6 +15,10 @@
|
|||
* [三、死锁](#三死锁)
|
||||
* [死锁的必要条件](#死锁的必要条件)
|
||||
* [死锁的处理方法](#死锁的处理方法)
|
||||
* [鸵鸟策略](#鸵鸟策略)
|
||||
* [死锁检测与死锁恢复](#死锁检测与死锁恢复)
|
||||
* [死锁预防](#死锁预防)
|
||||
* [死锁避免](#死锁避免)
|
||||
* [四、内存管理](#四内存管理)
|
||||
* [虚拟内存](#虚拟内存)
|
||||
* [分页系统地址映射](#分页系统地址映射)
|
||||
|
@ -603,19 +607,28 @@ FIFO 常用于客户-服务器应用程序中,FIFO 用作汇聚点,在客户
|
|||
|
||||
## 死锁的处理方法
|
||||
|
||||
### 1. 鸵鸟策略
|
||||
主要有以下四种方法:
|
||||
|
||||
- 鸵鸟策略;
|
||||
- 死锁检测与死锁恢复
|
||||
- 死锁预防
|
||||
- 死锁避免
|
||||
|
||||
## 鸵鸟策略
|
||||
|
||||
把头埋在沙子里,假装根本没发生问题。
|
||||
|
||||
因为解决死锁问题的代价很高,因此鸵鸟策略这种不采取任务措施的方案会获得更高的性能。当发生死锁时不会对用户造成多大影响,或发生死锁的概率很低,可以采用鸵鸟策略。
|
||||
因为解决死锁问题的代价很高,因此鸵鸟策略这种不采取任务措施的方案会获得更高的性能。
|
||||
|
||||
当发生死锁时不会对用户造成多大影响,或发生死锁的概率很低,可以采用鸵鸟策略。
|
||||
|
||||
大多数操作系统,包括 Unix,Linux 和 Windows,处理死锁问题的办法仅仅是忽略它。
|
||||
|
||||
### 2. 死锁检测与死锁恢复
|
||||
## 死锁检测与死锁恢复
|
||||
|
||||
不试图阻止死锁,而是当检测到死锁发生时,采取措施进行恢复。
|
||||
|
||||
(一)每种类型一个资源的死锁检测
|
||||
### 1. 每种类型一个资源的死锁检测
|
||||
|
||||
<div align="center"> <img src="../pics//b1fa0453-a4b0-4eae-a352-48acca8fff74.png"/> </div><br>
|
||||
|
||||
|
@ -625,7 +638,7 @@ FIFO 常用于客户-服务器应用程序中,FIFO 用作汇聚点,在客户
|
|||
|
||||
每种类型一个资源的死锁检测算法是通过检测有向图是否存在环来实现,从一个节点出发进行深度优先搜索,对访问过的节点进行标记,如果访问了已经标记的节点,就表示有向图存在环,也就是检测到死锁的发生。
|
||||
|
||||
(二)每种类型多个资源的死锁检测
|
||||
### 2. 每种类型多个资源的死锁检测
|
||||
|
||||
<div align="center"> <img src="../pics//e1eda3d5-5ec8-4708-8e25-1a04c5e11f48.png"/> </div><br>
|
||||
|
||||
|
@ -646,35 +659,35 @@ FIFO 常用于客户-服务器应用程序中,FIFO 用作汇聚点,在客户
|
|||
2. 如果找到了这样一个进程,那么将 C 矩阵的第 i 行向量加到 A 中,标记该进程,并转回 1。
|
||||
3. 如果没有这样一个进程,算法终止。
|
||||
|
||||
(三)死锁恢复
|
||||
### 3. 死锁恢复
|
||||
|
||||
- 利用抢占恢复
|
||||
- 利用回滚恢复
|
||||
- 通过杀死进程恢复
|
||||
|
||||
### 3. 死锁预防
|
||||
## 死锁预防
|
||||
|
||||
在程序运行之前预防发生死锁。
|
||||
|
||||
(一)破坏互斥条件
|
||||
### 1. 破坏互斥条件
|
||||
|
||||
例如假脱机打印机技术允许若干个进程同时输出,唯一真正请求物理打印机的进程是打印机守护进程。
|
||||
|
||||
(二)破坏占有和等待条件
|
||||
### 2. 破坏占有和等待条件
|
||||
|
||||
一种实现方式是规定所有进程在开始执行前请求所需要的全部资源。
|
||||
|
||||
(三)破坏不可抢占条件
|
||||
### 3. 破坏不可抢占条件
|
||||
|
||||
(四)破坏环路等待
|
||||
### 4. 破坏环路等待
|
||||
|
||||
给资源统一编号,进程只能按编号顺序来请求资源。
|
||||
|
||||
### 4. 死锁避免
|
||||
## 死锁避免
|
||||
|
||||
在程序运行时避免发生死锁。
|
||||
|
||||
(一)安全状态
|
||||
### 1. 安全状态
|
||||
|
||||
<div align="center"> <img src="../pics//ed523051-608f-4c3f-b343-383e2d194470.png"/> </div><br>
|
||||
|
||||
|
@ -684,7 +697,7 @@ FIFO 常用于客户-服务器应用程序中,FIFO 用作汇聚点,在客户
|
|||
|
||||
安全状态的检测与死锁的检测类似,因为安全状态必须要求不能发生死锁。下面的银行家算法与死锁检测算法非常类似,可以结合着做参考对比。
|
||||
|
||||
(二)单个资源的银行家算法
|
||||
### 2. 单个资源的银行家算法
|
||||
|
||||
一个小城镇的银行家,他向一群客户分别承诺了一定的贷款额度,算法要做的是判断对请求的满足是否会进入不安全状态,如果是,就拒绝请求;否则予以分配。
|
||||
|
||||
|
@ -692,7 +705,7 @@ FIFO 常用于客户-服务器应用程序中,FIFO 用作汇聚点,在客户
|
|||
|
||||
上图 c 为不安全状态,因此算法会拒绝之前的请求,从而避免进入图 c 中的状态。
|
||||
|
||||
(三)多个资源的银行家算法
|
||||
### 3. 多个资源的银行家算法
|
||||
|
||||
<div align="center"> <img src="../pics//62e0dd4f-44c3-43ee-bb6e-fedb9e068519.png"/> </div><br>
|
||||
|
||||
|
|
|
@ -235,9 +235,9 @@ School "1" - "n" Student
|
|||
|
||||
和关联关系不同的是,依赖关系是在运行过程中起作用的。A 类和 B 类是依赖关系主要有三种形式:
|
||||
|
||||
- A 类是 B 类中的(某中方法的)局部变量;
|
||||
- A 类是 B 类方法的局部变量;
|
||||
- A 类是 B 类方法当中的一个参数;
|
||||
- A 类向 B 类发送消息,从而影响 B 类发生变化;
|
||||
- A 类向 B 类发送消息,从而影响 B 类发生变化。
|
||||
|
||||
<div align="center"> <img src="../pics//LOun2W9134NxVugmbJPp15d4LalxC4O.png"/> </div><br>
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user