目录
- 一. 死锁的概念
- 1.1 什么是死锁
- 1.2 死锁、饥饿、死循环的区别
- 1.3 死锁产生的条件*
- 1.4 什么情况下会导致死锁
- 二. 死锁的处理策略- -预防死锁
- 2.1 破坏互斥条件
- 2.2 破坏不剥夺条件
- 2.3 破坏 请求和保持条件
- 2.4 破坏循环等待条件
- 三. 死锁的处理策略- -避免死锁(重要)
- 3.1 什么是安全序列
- 3.2 安全序列、不安全状态、死锁的联系
- 3.3 银行家算法
- 四. 死锁的处理策略- -检测与解除
- 4.1 死锁的检测
- 4.2 死锁的解除
\quad
一. 死锁的概念
\quad
\quad
1.1 什么是死锁
\quad
每个人都占有一个资源,同时又在等待另一个人手里的资源。发生“死锁”
在并发环境下,各进程因竞争资源而造成的一种 互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象,就是“死锁”。 发生死锁后若无外力干涉,这些进程都将无法向前推进。
\quad
1.2 死锁、饥饿、死循环的区别
\quad
\quad
1.3 死锁产生的条件*
\quad
\quad
\quad
注意! 发生死锁时一定有循环等待,但是发生循环等待时未必死锁(循环等待是死锁的必要不充分条件)
如果同类资源数大于1,则即使有循环等待,也未必发生死锁。但如果系统中每类资源都只有一个,那循环等待就是死锁的充分必要条件了。
\quad
1.4 什么情况下会导致死锁
\quad
\quad
二. 死锁的处理策略- -预防死锁
\quad
2.1 破坏互斥条件
\quad
使用了SPOOLing技术后,在各进程看来,自己对打印机资源的使用请求立即就被接收处理
了,不需要再阻塞等待
该策略的缺点:并不是所有的资源都可以改造成可类享使用的资源。并且为了系统安全,很多地方还必须保护这种互斥性。因此,很多时候都无法破坏互斥条件。
\quad
2.2 破坏不剥夺条件
\quad
\quad
2.3 破坏 请求和保持条件
\quad
\quad
2.4 破坏循环等待条件
\quad
\quad
三. 死锁的处理策略- -避免死锁(重要)
\quad
\quad
3.1 什么是安全序列
\quad
如果序列从B开始就噶了
\quad
3.2 安全序列、不安全状态、死锁的联系
\quad
\quad
3.3 银行家算法
\quad
\quad
四. 死锁的处理策略- -检测与解除
\quad
\quad
4.1 死锁的检测
\quad
对于P1来说, 它向R2请求一个资源, 而R2是有两个资源的, 只分配给P2一个, 所以剩一个, 所以P1不会被阻塞
对于P2来说, R1需要分配三个资源, 而R1也只有三个资源, 所以P2可能被阻塞
\quad
\quad
\quad
4.2 死锁的解除
\quad