学习自:
一句话+一张图说清楚——银行家算法_土豆洋芋山药蛋的博客-CSDN博客_银行家算法
一、核心逻辑:
银行家算法是避免死锁的一个经典算法;
通过判断如果按照一定的顺序给每个等待资源的线程依次分配+回收后,所有进程都可以执行完成,那么就是安全的,可以避免死锁,反之不安全。
二、经典实例:
现有P0~P4五个进程,分别已分配、还需要的资源如下,当前可用资源为1 6 2 2,如下所示:
Process | Allocation | Need | Available |
P0 | 0 0 3 2 | 0 0 1 2 | 1 6 2 2 |
P1 | 1 0 0 0 | 1 7 5 0 | |
P2 | 1 3 5 4 | 2 3 5 6 | |
P3 | 0 3 3 2 | 0 6 5 2 | |
P4 | 0 0 1 4 | 0 6 5 6 |
1、当前状态是否是安全的?
经安全性分析,按照如下顺序分配回收可以执行完成:
说明:
Process——进程;
Available——分配当前进程前可用资源,以4种资源为例,数字代表资源个数;
Need——当前进程需要资源个数;
Allocation——当前进程已分配资源个数(当进程执行完成后会释放分配当前进程前可用资源+已分配资源,即Available+Allocation);
Available+Allocation——当前进程执行完后释放出来的资源
Process | Available | Need | Allocation | Available+Allocation |
P0 | 1 6 2 2 | 0 0 1 2 | 0 0 3 2 | 1 6 5 4 |
P3 | 1 6 5 4 | 0 6 5 2 | 0 3 3 2 | 1 9 8 6 |
P1 | 1 9 8 6 | 1 7 5 0 | 1 0 0 0 | 2 9 8 6 |
P2 | 2 9 8 6 | 2 3 5 6 | 1 3 5 4 | 3 12 13 10 |
P4 | 3 12 13 10 | 0 6 5 6 | 0 0 1 4 | 3 12 14 14 |
结论:状态是安全的
2、如果P2提出请求Request(1,2,2,2)后,系统能否将资源分配给它?
- 首先提出请求需要判断是否小于等于它总共需要的资源,Request2(1,2,2,2)<Need2(2,9,8,6);
- 然后判断提出请求资源是否小于等于当前可用资源,Request2(1,2,2,2)<Available(1,6,2,2);
- 如上两个判断无误,那么假设将资源分配给P2,那么当前Available(0,4,0,0),Allocation2(2,5,7,6),此时P2还未请求完所有资源所以不会释放持有的(2,5,7,6),而(0,4,0,0)又不能满足任何进程的使用;
结论:所以如果将资源分配给它,系统进入不安全状态