操作系统银行家算法模拟实现(二) | 「掘金日新计划 · 12 月更文挑战」

94 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第30天

一、本篇笔记重点内容:

  • 系统总体设计
  • 核心功能模块实现

二、 详细知识点介绍:

系统总体设计

image.png 图 银行家算法模拟系统总体结构图

(1)初始化setInfo():读入文本文件中最大需求矩阵MAX,已分配资源矩阵Allocation ,并根据其计算出需求资源矩阵Need、系统当前可利用资源矩阵Available;

(2)安全性检查securityCheck():检测此刻系统是否存在一个安全序列使得系统处于安全状态。

(3)银行家算法AllocationResource():使用银行家算法检测系统中某进程发出资源申请是否可以被满足。

(4)显示当前状态 PrintState():显示当前系统资源分配详细情况。

(5)主程序main():设置系统功能选择面板,初始化系统、选择两种功能执行。

系统实现

1.1 环境搭建

自行下载InteliJ IDEA编译器并配置好Java环境,创建一个名为osproject的Java项目,新建包名为com.os.demo,建立TestBanker类和BankerAlgorithm类。

1.2 数据准备

由于该设计要求数据(包括各种资源总数、最大需求矩阵Max、分配矩阵Allocation)由文本文件读入,预先准备好相关多组数据存放到info.txt文件中。

具体如下图示例:

image.png

1.1 核心功能模块实现

(1)setInfo():读入文本文件中最大需求矩阵MAX,已分配资源矩阵Allocation ,并根据其计算出需求资源矩阵Need、系统当前可利用资源矩阵Available,初始化结束后打印此时系统资源分配的详细情况,接着跳转到面板功能开始选择功能。

image.png

(2)安全性检查securityCheck():检测此刻系统是否存在一个安全序列使得系统处于安全状态。安全性算法需要设置工作向量work并初始化,一个boolea型数组用来判定是否所有进程都已被验证,checknum用来记录判定进程i的需求矩阵中每个元素相比较work向量中各元素是否合理,secureQueue用来存储安全序列顺序,便于后续打印出安全序列。

image.png (3)银行家算法AllocationResource():使用银行家算法检测系统中某进程发出资源申请是否可以被满足。利用两个标记check1和check2来检查进程申请资源是否满足两个要求,若不满足,针对两种情况给出不同的理由;若满足,试分配资源后调用安全性算法,查看是否存在安全序列,若存在,则同意该资源申请并打印出相应安全序列,若不存在,则撤回刚才的试分配操作。

image.png