一、死锁
1、原因
竞争资源/程序推进顺序不当
2、必要条件
1、互斥条件
2、请求和保持条件
3、不剥夺条件
4、环路等待条件
3、处理死锁基本方法
1、预防死锁(摒弃除1以外的条件)
2、避免死锁(银行家算法)
3、检测死锁(资源分配图)
4、解除死锁
剥夺资源
撤销进程
二、银行家算法
概念:
在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。在这样的描述中,银行家就好比操作系统,资金就是资源,客户就相当于要申请资源的进程。
银行家算法
银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。为实现银行家算法,系统必须设置若干数据结构。
要解释银行家算法,必须先解释操作系统安全状态和不安全状态。
安全序列是指一个进程序列{P1,…,Pn}是安全的,即对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和
以下为示例帮助理解:
系统有A、B、C、D四种资源供5个进程P1、P2、P3、P4、P5共享。系统拥有资源A3个、B14个、C12个、D12个
资源分配情况如下:
各进程已占用资源数 各进程所需最大资源数
A | B | C | D | A | B | C | D | ||
P1 | 0 | 0 | 1 | 2 | 0 | 0 | 1 | 2 | |
P2 | 1 | 0 | 0 | 0 | 1 | 7 | 5 | 0 | |
P3 | 1 | 3 | 5 | 4 | 2 | 3 | 5 | 6 | |
P4 | 0 | 6 | 3 | 2 | 0 | 6 | 5 | 2 | |
P5 | 0 | 0 | 1 | 4 | 0 | 6 | 5 | 6 |
1、问系统中各种资源还剩多少?
A资源=总数(3) - P2(1) - P3(1) = 1个
B资源=总数(14) - P3(3) - P4(6) = 5个
C资源=总数(12) - P1(1) - P3(5) - P4(3) - P5(1) = 2个
D资源=总数(12) - P1(2) - P3(4) - P4(2) - P5(4) = 0个
2、现在系统是否出于安全状态,为什么?
Max(进程最大需求数) AL(进程已分配数) Need(进程待分配数) Available(系统可用内存)
目前:Available=1520(依次代表ABCD四种资源)
Work | AL | Need(小与Work) | Work+AL(P1释放) | ||
P1 | 1 5 2 0 | 0 0 1 2 | 0 0 0 0 | 1 5 3 2 | True |
P4 | 1 5 3 2 | 0 6 3 2 | 0 0 2 0 | 1 11 6 4 | True |
P2 | 1 11 64 | 1 0 0 0 | 0 7 5 0 | 2 11 6 4 | True |
P3 | 2 11 64 | 1 3 5 4 | 1 0 0 2 | 3 14 11 8 | True |
P5 | 3 14 11 8 | 0 0 1 4 | 0 6 4 2 | 3 14 12 12 | True |
答:系统属于安全,因为能找到安全序列P1、P2、P3、P4、P5、、、