操作系统:银行算法的实现.docxVIP

  • 3
  • 0
  • 约6.71千字
  • 约 13页
  • 2019-03-17 发布于江苏
  • 举报
操作系统实验报告 实验四:银行家算法的实现 计科112 康岩岩 201100814220 2013/4/29 实验四:银行家算法的实现 一.实验目的 加深了解有关资源申请、避免死锁等概念。 体会和了解死锁和避免死锁的具体实施方法。 二.实验属性 该实验为设计性实验。 三.实验仪器设备及器材 普通PC386以上微机 四.实验要求 本实验要求2学时完成。 本实验要求完成如下任务: (1)设计进程对各类资源最大申请表示及初值的确定。 (2)设定系统提供资源的初始状况。 (3)设定每次某个进程对各类资源的申请表示。 (4)编制程序,依据银行家算法,决定其资源申请是否得到满足。 (5)显示资源申请和分配时的变化情况。 五.实验步骤 (一)任务分析: 实现银行家算法,首先需要构造四张链表表,如下: 进程最大需求数量表:Max[m][n] 进程以获取资源量表 Allocation[m][n] 需求表 Need[m][n] 可用资资源 Available[n] 其中,m表示进程数目。n表示资源数目。 对于银行家算的实现,我们可以先初始化一部分数据,模拟出某一状态下的资源分配情况。并发出资源请求,然后判断请求是否可行,并寻找安全序列。 可以看出,本次试验会设计到大量的数据,所以为了简化步骤,并且能直观的得到算法运行结果,需要用到窗口来呈现数据变化情况。 (二)程序设计: 总体设计: 本次试验语言为java。程序分两大部分,一部分是核心的银行家算法,用来处理资源请求。另一部分是界面,用来发出资源请求并显示处理结果。利用java的swing编程和相关IDE,很容易初始化资源分布情况,下面是其截图: 具体实现: 核心部分,银行家算法: 算法的实现完全按照教材中的步骤来进行,具体实现如下: /** * * @param processID 进程号 * @param ra 请求A类资源数量 * @param rb 请求A类资源数量 * @param rc 请求C类资源数量 */ public static ListInteger checkEnable(int processID, int ra, int rb, int rc) { //得等到该进程对各类资源的需求量数组 Integer need[] = Need.get(processID); //得等到该进程的各类资源的就绪量数组 Integer allocation[] = Allocation.get(processID); //检测请求数量是否大于需求量 if (ra need[0] || rb need[1] || rc need[2]) { return null; } //检测请求量是否大于可用量 if (ra Available[0] || rb Available[1] || rc Available[2]) { return null; } //先根据需求修改各类数据,如果后来检测到不存在安全序列,这些数据还会复原 Available[0] -= ra; Available[1] -= rb; Available[2] -= rc; need[0] -= ra; need[1] -= rb; need[2] -= rc; allocation[0] += ra; allocation[1] += rb; allocation[2] += rc; //获取安全序列 ListInteger list = findSaftyLine(processID); //如果安全序列为空,则恢复刚才修改的数据 if (list == null) { Available[0] += ra; Available[1] += rb; Available[2] += rc; need[0] += ra; need[1] += rb; need[2] += rc; allocation[0] -= ra; allocation[1] -= rb; allocation[2] -= rc; } return list; } /** * 寻找安全序列 * @param proceeeId * @return */ private static ListInteger findSaftyLine(int proceeeId) { //得到进程数目 int count = Max.size(); //标示进程是否安全的数组 boolean[] finish = new boolean[count]; for (int i = 0; i count; i++) {

文档评论(0)

1亿VIP精品文档

相关文档