「这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战」
什么是银行家算法
安全序列
安全序列,就是说如果系统按照这种序列分配资源,那么每个进程都能够顺利完成。只要能找出一个安全序列,系统就是安全状态。当然可能有多个安全序列。
如果分配了资源后,找不到任何一个安全序列就是说明系统进入了不安全状态。这就意味着之后可能给所有的进程都无法顺利执行下去。如果有进程提前归还了一些资源,那么系统可能重新回到安全状态。
如果系统处于安全状态,就一定不会发生死锁。如果系统进入了不安全状态,就可能发生死锁(处于不安全状态未必就是发生了死锁,但是发生死锁时一定是在不安全状态)
银行家算法是荷兰学则为银行系统设计的,后来改是算法被用在操作系统中,避免死锁。
核心思想:在进程提出资源申请时,先预判此次分配是否会导致操作系统进入不安全状态。如果会进入不安全状态,就暂时不答应这次请求,让该进程先阻塞等待。
数据结构:
长度为m的一维数组Available表示还有多少可用资源 nM矩阵Max表示个进程对资源的最大需求数 nm矩阵Allocation表示已经给各个进程分配了多少资源 Max-Allocation=Need矩阵表示各进程最多还需要多少资源 用长度为m的一位素组Request表示进程此次申请的各种资源数
银行家算法步骤:
①检查此次申请是否超过了之前声明的最大需求数 ②检查此时系统剩余可用资源时候还能满足这次请求 ③试着分配,更改各个数据结构 ④用安全性算法检查此处分配是和否导致系统进入不安全状态。
安全性算法步骤:
检查当前剩余可用资源是否能满足某个进程的最大需求,如果可以,就把这个进程加入安全序列,并且把该进程的所有资源全部回收。不断重复这个过程,看最终能否让所有的进程都进入安全序列。