auto commit
This commit is contained in:
parent
5f84c9585a
commit
54d508bd43
|
@ -51,7 +51,7 @@
|
|||
* [1. 鸵鸟策略](#1-鸵鸟策略)
|
||||
* [2. 死锁预防](#2-死锁预防)
|
||||
* [2.1 破坏互斥条件](#21-破坏互斥条件)
|
||||
* [2.2 破坏请求与保持条件](#22-破坏请求与保持条件)
|
||||
* [2.2 破坏占有和等待条件](#22-破坏占有和等待条件)
|
||||
* [2.3 破坏不可抢占条件](#23-破坏不可抢占条件)
|
||||
* [2.4 破坏环路等待](#24-破坏环路等待)
|
||||
* [3. 死锁避免](#3-死锁避免)
|
||||
|
@ -540,7 +540,6 @@ void philosopher(int i) {
|
|||
3. 不可抢占:已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显示地释放。
|
||||
4. 环路等待:有两个或者两个以上的进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源。
|
||||
|
||||
|
||||
## 死锁的处理方法
|
||||
|
||||
### 1. 鸵鸟策略
|
||||
|
@ -557,7 +556,7 @@ void philosopher(int i) {
|
|||
|
||||
例如假脱机打印机技术允许若干个进程同时输出,唯一真正请求物理打印机的进程是打印机守护进程。
|
||||
|
||||
#### 2.2 破坏请求与保持条件
|
||||
#### 2.2 破坏占有和等待条件
|
||||
|
||||
一种实现方式是规定所有进程在开始执行前请求所需要的全部资源。
|
||||
|
||||
|
@ -626,6 +625,8 @@ void philosopher(int i) {
|
|||
2. 如果找到了这样一个进程,那么将 C 矩阵的第 i 行向量加到 A 中,标记该进程,并转回 1。
|
||||
3. 如果有没有这样一个进程,算法终止。
|
||||
|
||||
可以看到,死锁检测和银行家算法中判断是否为安全状态的方法类似。
|
||||
|
||||
#### 4.2 死锁恢复
|
||||
|
||||
- 利用抢占恢复
|
||||
|
@ -687,7 +688,7 @@ void philosopher(int i) {
|
|||
|
||||
举例:一个系统为某进程分配了三个物理块,并有如下页面引用序列:
|
||||
|
||||
7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
|
||||
<div align="center"><img src="https://latex.codecogs.com/gif.latex?7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1"/></div> <br>
|
||||
|
||||
进程运行时,先将 7,0,1 三个页面装入内存。当进程要访问页面 2 时,产生缺页中断,会将页面 7 换出,因为页面 7 再次被访问的时间最长。
|
||||
|
||||
|
@ -703,13 +704,13 @@ void philosopher(int i) {
|
|||
|
||||
可以用栈来实现该算法,栈中存储页面的页面号。当进程访问一个页面时,将该页面的页面号从栈移除,并将它压入栈顶。这样,最近被访问的页面的页面号总是在栈顶,而最近最久未使用的页面的页面号总是在栈底。
|
||||
|
||||
4,7,0,7,1,0,1,2,1,2,6
|
||||
<div align="center"><img src="https://latex.codecogs.com/gif.latex?4,7,0,7,1,0,1,2,1,2,6"/></div> <br>
|
||||
|
||||
<div align="center"> <img src="../pics//eb859228-c0f2-4bce-910d-d9f76929352b.png"/> </div><br>
|
||||
|
||||
### 4. 时钟(Clock)
|
||||
|
||||
Clock 页面置换算法需要用到一个访问位,当一个页面被访问时,将访问为置为 1。
|
||||
Clock 页面置换算法需要用到一个访问位,当一个页面被访问时,将访问位置为 1。
|
||||
|
||||
首先,将内存中的所有页面链接成一个循环队列,当缺页中断发生时,检查当前指针所指向页面的访问位,如果访问位为 0,就将该页面换出;否则将该页的访问位设置为 0,给该页面第二次的机会,移动指针继续检查。
|
||||
|
||||
|
@ -729,7 +730,7 @@ Clock 页面置换算法需要用到一个访问位,当一个页面被访问
|
|||
|
||||
### 3. 扫描算法(SCAN)
|
||||
|
||||
SSTF 会出现进行饥饿现象。考虑以下情况,新进程请求访问的磁道与磁头所在磁道的距离总是比一个在等待的进程来的近,那么等待的进程会一直等待下去。
|
||||
SSTF 会出现饥饿现象。考虑以下情况,新进程请求访问的磁道与磁头所在磁道的距离总是比一个在等待的进程来的近,那么等待的进程会一直等待下去。
|
||||
|
||||
SCAN 算法在 SSTF 算法之上考虑了磁头的移动方向,要求所请求访问的磁道在磁头当前移动方向上才能够得到调度。因为考虑了移动方向,那么一个进程请求访问的磁道一定会得到调度。
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user