1. 银行家算法是一种起初为银行设计的算法,用于避免银行在发放贷款时,不会发生不能满足所有客户需求的情况。在操作系统中银行家算法用来避免死锁。 银行家算法主要设置四个数据结构,分别用来描述系统中可利用的资源、所有进程对资源的最大需求、系统的资源分配,以及所有程序还需要多少资源。
- 可利用资源向量(Available):系统还可以分配的资源
- 最大需求矩阵(Max):进程的最大资源需要
- 分配矩阵(Alloction):进程已经获得的资源
- 需求矩阵(Need):进程还需要获得的资源
银行家算法的具体步骤如下: 假设 P1 进程提出请求 K 个资源 如果 K <= Need,就继续步骤;否则出错,因为请求资源 K 不能超过还需要获得的资源 如果 K <= Available,就继续步骤;否则出错,因为请求资源 K 不能超过系统还可以分配的资源 Available 系统试探分配资源,并修改下列数据 Available = Available - K;表示分配给 P1 K 个资源后,还剩多少系统可分配资源 Allocation = Allocation + K;表示 P1 已经获得的资源 Need = Need - K;表示进程 P1 还需要获得的资源 此时系统执行安全性算法,计算进程是否处于安全性状态 以下为银行家算法的例子:
分析此时刻,P1 和 P3 都可以进行分配(PS:安全序列的结果并不是唯一的)
利用上述的银行家算法即可得出此时的安全序列:<P1,P3,P4,P2,P0>
