实验 3 银行家算法
一. 实验目的
1. 加深对安全状态、安全序列及死锁避免的理解。
2. 加深对银行家算法相关数据结构及执行过程的理解。
二. 实验预备知识
1. 实验原理分析
死锁避免是在系统运行过程中,动态检查进程发出的每一个系统能够满足的资源申请
进行,并根据检查结果决定是否分配资源,如果分配后系统可能发生死锁,则不予分配,
否则予以分配。
银行家算法是要设法保证系统动态分配资源后不进入不安全状态,以避免可能产生的
死锁。即每当进程提出资源请求且系统的资源能够满足该请求时,系统将判断如果满足此
次资源请求,系统状态是否安全。如果判断结果为安全,则给该进程分配资源,否则不分
配资源,申请资源的进程将阻塞,直到其他进程释放出足够资源为止。
2. 银行家算法主要数据结构描述
可用资源向量Available:长度为m的向量表示系统中各类资源的当前可用实例数。
如果Available[j]=k,表示系统中现有Rj类资源k个。
最大需求矩阵Max:n×m矩阵定义每个进程对各类资源的最大需求量。如果
Max[i,j]=k,那么进程Pi最多需要k个资源类型Rj的实例。
已分配资源矩阵Allocation:n×m矩阵定义了每个进程现在所分配的各种资源类型
的实例数。如果Allocation [i,j]=k,表示进程Pi当前分到k个Rj类资源。
需求矩阵Need:n×m矩阵表示每个进程还需要的各类资源的数目。如果Need [i,
j]=k,表示进程Pi尚需k个Rj类资源才能完成其任务。
3. 银行家算法描述
(1) 安全性判断
① 初始化
输入系统当前可用资源数,进程数,每个进程对资源的使用情况,设置任意进程Pi的
初始状态均为未完成(Pi->Finish == 0),未请求资源(Pi->Request=0)。
② 搜索满足下列条件的进程Pi
Pi->Finish == False && Pi->Need<= Available;
如果找到满足条件的进程则修改数据值:
Pi->Finish == True;
Available = Available + Pi->Allocation;
否则
判断是否所有的进程的Pi->Finishi均为True,如果是则返回当前的状态为安全,否
则为不安全。
评论0