一、背景
银行家算法是一个避免死锁的著名算法。是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。
二、数据结构
- Available:系统当前可分配资源向量
- Max:各进程最大需求向量
- Allocation:各资源已分配资源向量
- Need:各资源所需资源向量
三、安全序列
根据系统中,各进程相关参数(最大资源需求数=已分配资源数+所需资源数),以及当前系统资源可分配数。
在进程集合中,进行以下步骤,进行安全检测:
- 为各进程设置完成标志位为false
- 在未完成进程集合中找到一个进程,满足:Need[i]<Available
- 执行该进程完毕,并释放该进程资源,Available=Available+Allocation[i],并设置标志位为true
- 循环执行步骤2、3,直到所有标志位为true
四、设计思想
- 在T0时刻进行安全性检查,找到一个安全序列,则判断系统是安全的
- 若有进程发出资源请求,先判断其合法性,需要满足两个条件:a.请求的各数目小于等于该进程执行完成所需要的各资源数目;b.请求的各资源数目小于等于系统当前可分配的各资源数目。若条件a不满足,则请求资源错误,不继续判断;若条件a满足,再判断条件b。若条件b不满足,则系统不分配资源给他,让该进程等待;若条件b满足,则执行步骤3。
- 系统假定可以为该进程分配资源,并修改该进程相关参数(最大需求数,已分配资源数,所需资源数),以及当前系统的资源可分配数。
- 利用安全性算法检查此系统是否安全,如果能够找到一个安全序列,那么判定该系统是安全的。将资源分配给它;否则,系统不分配资源,让该进程等待,并撤销假定状态,修改相关参数。
- 循环步骤2~4,直至各进程都执行完毕。