操作系统_第八章 死锁的避免
1 安全状态
如果操作系统能保证所有的进程在有限的时间内得到需要的全部资源,则称系统处于安全状态。处于安全状态的系统不会发生死锁, 处于不安全状态的系统可能会发生死锁。
2 银行家算法
怎样才能使系统保持在安全状态呢? 一个古典的测试方法是银行家算法。
银行家可以把一定数量的资金供多个用户周转使用。 为保证资金的安全, 银行家规定:
- 当一个用户对资金的最大需求量不超过银行家现有的资金时, 就可接纳该用户;
- 用户可以分期贷款, 但贷款总数不能超过最大需求量;
- 当银行家现有的资金不能满足用户的尚需贷款数时, 可以推迟支付, 但总能使用户在有限的时间里得到贷款;
- 当用户得到所需的全部资金后, 一定能在有限时间里归还所有的资金。
我们可以把系统看做银行家, 把进程看做用户, 把系统管理的资源看做银行家管理的资金,把进程向系统请求资源看成做用户向银行家贷款。 操作系统按银行家制定的规则为进程分配资源。 当进程首次申请资源时, 要测试该进程对资源的最大需求量。 如果系统现存的资源可以满足它的最大需求量, 则按当前的申请量分配资源, 否则就推迟分配。
当进程在执行中继续申请资源时, 先测试该进程已占用的资源数与本次申请的资源数之和是否超过该进程对资源的最大需求量。 如果超过,则拒绝分配资源,否则再测试系统现存的资源能否满足该进程尚需的最大资源量。若能满足, 则按当前的申请量分配资源, 否则也要推迟分配。
看一个例子: