全知识整理目录
操作系统整理的目录,包括了整理的所有操作系统的知识。
目录
概述
银行家算法是什么?
银行家算法主要是为了避免死锁的,是针对避免死锁产生的一种算法。
最初是一个人为银行系统设计的,确保银行始终有现金贷款给客户,不会发生不能满足客户的情况。所以叫银行家算法。
那么死锁和前面了解的饥饿有什么关系呢?
死锁和饥饿都是,管理者的问题,即操作系统的问题。
思想
在进程提出资源申请的时候,先预先判断,这次分配是否会导致系统进入不安全状态,如果会进入不安全状态(可以理解为,本轮贷款,会造成现金不足的情况),就会暂时不答应这次的请求。让该进程先阻塞等待。
而转换到进程方面的话,因为操作系统当中或许不止一种资源,那么需要找到一个合适的序列。当一个进程执行完成之后,就会释放相应的资源,从而能够执行需要更多资源的进程,这样就能够满足所有的进程都能够执行,而银行家算法就是找出这样一个能够执行的序列,称之为安全序列。
示例
剩余可用资源为(3,3,2)。
例如
先执行P1,那么此时执行完P1之后,经过P1释放资源,剩余可用资源就为(5,3,2)。
再执行P3,执行完P3,经过P3释放资源,剩余可用资源为(7,4,3)
再执行P2,执行完P2,经过P2释放资源,剩余可用资源为(10,4,5)
再执行P4,执行完P4,经过P4释放资源,剩余可用资源为(10,4,7)
再执行P0,执行完P0,经过P0释放资源,剩余可用资源为(10,5,7)
所以有安全序列为P1,P3,P2,P4,P0。
当然序列并不是固定的,例如在执行P4的时候,系统有足够的资源去执行P0,也可以先执行P0在执行P4。
所以安全序列不唯一。
ps:实际上寻找安全序列,最快速的方式就是,每次都从序列最小的开始找,每次都循环一次依次找到能够实现执行的进程,然后得出进程,这样也不会漏掉。
总结
所以银行家,算法就是不断地试探,寻求找到至少一种安全序列。
值得一提的是,系统处于不安全状态不一定是死锁,死锁则一定是不安全状态。而系统处于安全状态就一定不会发生死锁。