
银行家算法的完整代码实现。
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
一.算法分析: (一)数据结构: 1. 可利用资源向量,标记为Available; 2. 最大需求矩阵,简称为Max; 3. 分配矩阵,通常称为Allocation; 4. 需求矩阵,并用Need表示。 (二) 功能介绍:该算法模拟了Dijkstra的银行家算法,旨在预防系统中的死锁情况的发生。它由两部分组成:第一部分是银行家算法(扫描),其流程如下: 1. 若请求量Request小于或等于进程需要的资源数目Need,则直接转向步骤2进行处理;否则,系统判定存在冲突并报错。 2. 若请求量Request小于或等于可利用资源Available,则系统尝试将请求的资源分配给进程,并转向步骤3;否则,系统需要等待一段时间。 3. 系统会尝试分配请求的资源给每个进程。 4. 系统随后执行安全性算法以评估系统的整体状态。第二部分是安全性算法,其主要步骤如下: 1. 设置两个向量:(1) 工作向量Work,用于表示系统中可供进程继续运行所需的各类资源数量;(2) 完成向量Finish,用于指示系统是否已经为所有进程分配了足够的资源(True表示有足够的资源;False表示没有)。初始时将Finish向量的所有元素设置为False。 2. 若Finish[i]为False且Need[i]小于或等于Work[i],则执行步骤3以分配资源给进程;否则执行步骤4(其中i代表资源类别)。 3. 当进程P获得第i类资源后,它将顺利地执行到完成任务并释放这些资源。同时更新工作向量Work为Work + Allocation,并将Finish[i]设置为True,然后返回步骤2进行循环处理。 4. 如果所有进程的Finish[i]都设置为True,则表明系统处于安全状态;反之,则表明系统不安全。
全部评论 (0)


