什么是安全序列
如果系统按照这种序列分配资源,每一个进程都能顺利完成,只要找出一个安全序列,这个系统就是安全状态,当然安全序列可能有很多个
如果资源分配之后,系统找不出任何一个安全序列,系统就进入了不安全状态,意味着之后可能会有进程无法顺利执行下去,当然如果有进程提前归还了一些资源,系统也有可能会重新回到安全状态,但是资源分配之前需要考虑最坏的情况
什么是系统的不安全状态,和死锁有什么联系
如果系统处于安全状态就一定不会发生死锁
如果系统处于不安全状态,就可能会发生死锁
因此在资源分配之前预先判断这次分配是否会导致系统进入不安全状态,以此决定是否答应资源分配请求,这也是银行家算法的核心
银行家算法
在进程提出资源申请的时候,预先判断此次分配是否会导致系统进入不安全状态,如果会进入不安全状态,就暂时不答应此次请求,让进程先阻塞等待
银行家算法例子: https://www.bilibili.com/video/BV1YE411D7nH/?p=41&share_source=copy_web&vd_source=7b850f4882e6be926b6eb30758a00e34&t=726
1.检查此次申请是否超过之前声明的最大需求数
2.检查此次系统剩余的可用资源是否还能满足这次的请求
3.试探着分配,更改个数据结构
4.用安全性算法,检查这次分配是否会导致系统进入不安全的状态
安全性算法的步骤:
检查当前剩余的可用资源,是否能满足某个进程的最大需求,如果可以,就把该进程假如安全序列,并把该进程持有的资源全部回收
不断重复上述操作,看最终能否让所有进程都加入安全序列