操作系统 第三章 处理机调度与死锁2
目录
3.5.2 计算机系统中的死锁
1.竞争不可抢占性资源引起死锁
2.竞争可消耗资源引起死锁
现在进一步介绍竞争可消耗资源所引起的死锁。
3.进程推进顺序不当引起死锁
3.5.3 死锁的定义、必要条件和处理方法
死锁定义:在一组进程发生死锁的情况下,这组死锁进程中的每一个进程、都在等待另一个死锁进程所占有的资源。
死锁必要条件:(只要其中一个不成立,就不会发生死锁)互斥条件;请求和保持条件;不可抢占条件(CPU和进程不可抢占);循环等待条件;
3.处理死锁的方法
预防死锁;避免死锁;检测死锁;接触死锁;
3.6 预防死锁
通过破坏产生死锁的四个必要条件的一个或几个,以避免发生死锁。由于互斥条件是非共享设备所必须的,不仅不能改变还应该加以保证,因此主要破坏产生死锁的后三个条件。
3.6.1 破坏请求和保持条件
为了破坏请求和保持条件,系统必须保证做到:当一个进程在请求资源是,它不能持有不可抢占资源。
- 第一种协议
所有进程在开始运行前,必须一次性的申请其在整个运行过程中所需的全部资源。 - 第二种协议
是对第一种协议的改进,允许一个进程获得运行初期所需的资源,便开始运行。
3.6.2 破坏不可抢占条件
当一个已经保持了某些不可被抢占资源的进程,提出新的资源请求而不能满足时,必须释放资源。
3.6.3 破坏循环等待条件
对系统所有资源进行线性排序,并赋予不同序号,从而进行有序资源分配。申请低序号需释放相同或更高序号的资源。
一般输入资源序号小于输出。
3.7 避免死锁
3.7.1 系统安全状态
1.安全状态
允许进程动态申请资源,在分配前应该就散资源分配的安全性
2.安全状态之例
3.由安全状态向不安全状态的转换
3.7.2 利用银行家算法避免死锁
最优代表性的避免死锁的算法是迪杰斯科拉的银行家算法。
1.银行家算法中的数据结构
可利用资源向量Available;
最大需求矩阵Max;
分配矩阵Allocation;
需求矩阵Need;(need=max-allocation)
2.银行家算法
4.银行家算法之例
T0安全序列
3.8 死锁的检测与解除
系统提供两个算法:死锁检测算法;死锁解除算法
3.8.1 死锁的检测
3.8.2 死锁的解除
1.终止进程的方法
中值所有死锁进程(最简单,代价最大);逐个终止进程(稍温和,代价也大)
2.付出代价最小的死锁解除算法