Allocation(已分配资源)
Request(还需要的资源)
Availiable(当前可用资源)
Max(每个进程的最大需求)
work(?)
finish(进程i是否完成)(注意进程完成后会释放资源)
细分为2个算法:即安全性算法和资源请求算法
安全性算法:确定系统状态是否安全(是否有一个进程处理顺序满足所有进程的资源分配)
资源请求算法:如果进程P向系统请求一系列资源,判断能否允许该请求。
Considerthe following snapshot of a system:
Answer the following questions using the banker’s algorithm:
a. What is the content of the matrix Need?
b. Is the system in a safe state?
c. If a request from process P1 arrives for (0,4,2,0), can the request be granted immediately?
Answer:
a.如图(Need = Max - Allocation) Need矩阵由最大资源请求矩阵以及已分配资源矩阵得
(该算法必须先得到Need矩阵)
b.
安全性判断:当前可用资源能否让所有的进程完成。
Work表初始化为Available,从上往下循环查找Need<=Available(Work)的进程,如果有,则Work+=Allocation(Pi)
若算法结束任然有Pi未Finish,则说明该系统是不安全的。
如图,使用安全性算法我们可以找到这样一个顺序
c.能否允许进程的资源请求的问题
①资源请求算法首先判断Pi的各项资源请求是否满足Request[i]<=Need[i],如果不满足则产生出错条件,因为进程Pi超过了其最大请求。
②然后判断Request[i]<=Available,任何一个资源超过Available该进程都必须等待,没有足够的资源满足请求。
③假设接受该进程的资源请求,则Allocation矩阵,Need矩阵,Available矩阵都要改变,
(Allocation += Request)(Need -= Request)(Available-=Request)
然后用安全性检查算法判断安全性,若安全才能得出结论允许请求。
P1的request(0,4,2,0)<=Need(0,7,5,0)&&<=Available(1,5,2,0),假设分配P1资源,得到新的Need和Available如下
进行安全性检查可以得到顺序
Prove that the safety algorithm presented in Section 7.5.3 requires an orderof m×n^2 operations.
Answer:
银行家算法,n为系统进程的个数,m为资源类型的种类。
该算法首先检测进程i的请求是否合法,如果合法,尝试对其分配资源并进行安全性检查。
资源请求算法的时间复杂度为O(m)(比较m项资源是否都满足条件),每次安全性检查的时间复杂度为O(mn^2)(最坏情况下,每次检查到最后一个进程:1+2+…+n次操作,而对Need与Wrok的比较需要依次比较向量中的每一个元素,这两个向量的长度为m,所以有n^2次操作的比较,而每次比较耗时m)。
银行家算法至少需要1个进程发出资源请求来启动,然后进行安全性检查,所以时间复杂度
Considerthe following snapshot of a system:
Answer the following questions using the banker’s algorithm:
a. Illustrate that the system is in a safe state by demonstrating an order in which the processes may complete.
b. If a request from process P1 arrives for (1,1,0,0), can the request be granted immediately?
c. If a request from process P4 arrives for (0,0,2,0), can the request be granted immediately?
Answer:
a.
如上图,完成顺序
b.
假设接受P1的request,进行安全性检查,更新后的Need和Available如下
如图,完成顺序
c.
如图:假设接受了P4的(0,0,2,0)的资源请求,更新后的Need和Available如上,进行安全性检查发现无法使得所有进程完成,会导致系统处于不安全状态,所以无法保证该请求。