操作系统 实验二 银行家算法

2023-11-09

题目描述:
已知进程{P0,P1,P2,P3,P4},有三类系统资源A、B、C的数量分别为10、5、7,在T0时刻的资源分配情况如下图所示:
在这里插入图片描述
(1)若进程P1请求资源,发出请求向量Request1(1,0,2),编写程序用银行家算法判断系统能否将资源分配给它;
(2)若进程P2提出请求Request(0,1,0),用银行家算法程序验证系统能否将资源分配给它。
一、算法
1、银行家算法
① 进程p向系统请求进一步分配资源,首先检查请求的所有类别的资源是否小于等于进程p所对应的需要的资源数。如果满足,进入第②步。否则认为出错,退出算法。
② 如果进程p请求的各类资源数小于等于当前系统可分配的资源数,那么进入第③步,否则进程p必须等待,退出算法。
③ 系统进行资源的试探性分配,修改相应的各数据结构中的数据。进入第④步。
④ 系统执行安全性算法,检查分配后系统是否安全(即找到一个安全序列,安全序列不唯一),安全才算分配成功,否则试探性分配作废,提供错误报告,退出算法。

//银行家算法
void bank(request i, int n, int m)
{
	int c = 0;
	int flag = 0;
	//判断需要的资源是否超过他所宣布的最大值。
	while (c != m)
	{
		if (i.requ[c] > Max[i.p][c])
		{
			flag = 1;
			break;
		}
		c++;
	}
	if (flag == 1)
	{
		cout << "无法分配" << endl;
		return;
	}
	//判断需要的资源是否超过当前可利用的资源
	c = 0;flag = 0;
	while (c != m)
	{
		if (i.requ[c] > Available[c])
		{
			flag = 1;
			break;
		}
		c++;
	}
	if (flag == 1)
	{
		cout << "请求进程需等待" << endl;
		return;
	}
	distribution(i, m);
	if (is_safety(i, n, m))
	{
		cout << "系统处于安全状态!" << endl;
		cout << "可分配的安全序列为<";
		int k = 0;
		while (k != n)
		{
			cout << safe_queue[k]<<' ';
			k++;
		}
		cout << '>';
	}
	else
	{
		distory_distribution(i, m);
		cout << "系统处于不安全状态" << endl;
	}
}

2、安全性算法
①将当前的系统可分配资源复制一份用在此算法中,以免对原来可利用资源数据在算法中改动。另外设置一个Finsh数组,为bool型,表示系统是否有足够的资分配给当前进程,如果有,另Finsh[i]=true。数组元素的初始值为false;
②从进程序列中找到没有完成的且当前需要的各类资源数小于等于当前可分配的资源数。如果找到执行步骤③,否则执行步骤④。
③使当前进程获得所需的资源,执行完成,并释放资源,更新可利用资源数据。更新对应的进程完成标志(Finsh[i]=false),将其存入安全序列数组中。
④如果所有进程都运行完毕,说明系统处于安全状态。否则处于不安全状态。

//安全性算法。
bool is_safety(request i, int n, int m)
{
	int work[100];
	int c = 0;
	c = 0;
	while (c != m)
	{
		work[c] = Available[c];
		c++;
	}
	bool Finsh[100];
	c = 0;
	while (c != n)
	{
		Finsh[c] = false;
		c++;
	}
	c = 0;int flag = 0;
	while (flag != n)
	{
		if (c == n && flag != n)
			return false;
		if (Finsh[c] == false)
		{
			int flag2 = 0;
			for (int d = 0;d < m;d++)
			{
				if (Need[c][d] <= work[d])
					continue;
				else
				{
					flag2 = 1;
					break;
				}
			}
			if (flag2 == 0)
			{
				int h = 0;
				while (h != m)
				{
					work[h] += Allocation[c][h];
					h++;
				}
				Finsh[c] = true;
				flag++;
				safe_queue[r++] = c;
				c = 0;
				continue;
			}
		}
		c++;
	}
	return true;
}
由于安全算法中的查找合适进程的顺序可能有所不同,所找到的安全序列可能不一样,说明安全序列是不唯一的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

操作系统 实验二 银行家算法 的相关文章

  • element table 中sortable排序

    在项目中做表格的排序 我使用的是自定义的排序 也就是通过后台接口进行的排序 写个文章记录一下element的三种排序方式 在列中设置sortable属性即可实现以该列为基准的排序 接受一个Boolean 默认为false 可以通过 Tabl

随机推荐

  • API接口整理收集常用Get-Post请求供测试使用

    百度 api集市免费接口 IP地址查询 http apistore baidu com apiworks servicedetail 114 html 频道新闻API 易源 http apistore baidu com apiworks
  • 【XML】学习笔记第四章-schema

    Schema 概述 作用 与DTD相比Schema的优势 基础命名空间 模式 引用方法 通过xsi noNamespaceSchemaLocation引入 通过xsi shemaLocation引入 Schema的语法结构 定义元素的主要语
  • shell脚本3个整数从小到大排序

    read p 请输入一个整数 num1 read p 请输入一个整数 num2 read p 请输入一个整数 num3 不管谁大谁小 最后打印 echo n u m 1 num1 num1 num2
  • Goby自定义漏洞之EXP

    前言 自定义漏洞配合EXP 提高漏洞的利用速度 简直是爽的飞起 自从HVV的时候Goby发布HVV专版 羡慕死了 就是太菜没傍上红方大佬的腿 虽然最终用上了HVV专版 但是一些只有你自己知道的漏洞 或者比较偏门的漏洞 就需要咱们自己来编写P
  • react小练习-antd Form表单和Table表格的交互-Table动态添加数据

    文章目录 功能实现效果 代码背景 代码思路 代码实现 功能实现效果 点击添加按钮 输入表单内容 表单提交后数据动态添加到Table表格里 如图 初始数据 是在dva的mock文件模拟的死数据 点击添加 输入数据 表单提交后 数据添加到表格里
  • Android签名概述

    一 Android签名概述 我们已经知道的是 Android对每一个Apk文件都会进行签名 在Apk文件安装时 系统会对其签名信息进行比对 判断程序的完整性 从而决定该Apk文件是否可以安装 在一定程度上达到安全的目的 给定一个Apk文件
  • JAVA实现蛇形矩阵算法

    JAVA实现蛇形矩阵算法 蛇形矩阵是一种特殊的二维矩阵 其元素按照一定的规律排列成蛇形 这种算法可以通过JAVA编程语言来实现 本文将介绍如何使用JAVA编写代码来生成蛇形矩阵 并给出相应的源代码 蛇形矩阵的生成规则如下 第一行从左到右依次
  • 多租户系统设计

    多租户系统设计 SaaS 的系统分级 SaaS 系统架构成熟度模型的 5 个级别 从 混乱 到 乌托邦 第 0 级 混乱 每次新增一个客户 都会新增软件的一个实例 第 1 级 受控的混乱 所有客户都运行在软件的同一个版本上 而且任何的定制化
  • 当在浏览器中输入一个域名后,会发生什么

    今天 去哪儿网Geely老师分享了他在校招时的一个面试题 当输www qunar com时发生了什么 真不是做广告哈 因为学的并没有很扎实 不能更深更广的分析这个问题 遂 百度一下 发现这篇文章并转载保存下来 同时也分享一下 希望大家可以更
  • vue-cli3.0打包时如何忽略某个第三方依赖包

    前几天接到了用vue重构某个业务模块的需求 常规开发不做讨论 但是在打包时需要排除业务中使用的某个第三方依赖包 代码如下 main js import Vue from vue import Cesium from cesium Cesiu
  • 解决Win7启动时出现“windows未能启动。原因可能是最近更改了硬件或软件”的问题

    搜索资料的时候发现个小问题 问题描述 在给ThinkPad T490做win7系统时 出现了 windows未能启动 原因可能是最近更改了硬件或软件 的问题 一直启动不来 在系统盘微PE中甚至还会出现 0x490 找不到元素 的问题 如何来
  • cuda安装笔记

    更新2023 3 4 我笔记本用vs编译后老是提示no kernel image is available for execution on the device 一直以为是驱动版本太高了或者cudatoolkit版本太高了 后来才知道是版
  • 【数据挖掘】知识点总结

    一 绪论 什么是数据挖掘 就是通过算法从大量的数据中搜索隐藏在其中的信息 数据挖掘的基本任务 聚类分析 异常检测 关联分析和预测建模 高维性和维灾难 随着维度的增加计算复杂度也随之增加 二 数据 不同的属性类型 标称 例如 邮政编码 定性数
  • 大数据应用——Linux常用的命令

    帮助命令 1 基本语法 help 命令 功能描述 获得shell内置命令的帮助信息 2 案例实操 1 查看cd命令的帮助信息 root hadoop01 help cd 常用快捷键 常用快捷键 功能 ctrl c 停止进程 ctrl l 清
  • Python(十五)读取Excel

    今天来实战演示如何封装读取Excel方法 第一步 准备一个Excel文件 sheet页命名为 login 学习技术交流群 704807680 第二步 编写代码找到Excel文件所在的文件夹路径 path os path dirname os
  • 机器学习算法——混淆矩阵(Confusion Matrix)之鸢尾花实例

    一 理论 什么是混淆矩阵 其实就是把所有类别的预测结果与真实结果按类别放置到了同一个表里 在这个表里我们可以清楚地看到每个类别正确识别的数量和错误识别的数量 混淆矩阵在什么情况下最好呢 答案是类别不平衡时 混淆矩阵是除了ROC曲线和AUC之
  • chatGPT高考作文

    百花齐放 春满人间 吹灭别人的灯 并不会让自己更加光明 阻挡别人的路 也不会让自己行得更远 这是一句古老而智慧的话语 告诉我们要尊重和包容他人 要与人和睦相处 要共同进步 同样的道理 也适用于文化的交流和发展 文化是一个民族的灵魂 是一个国
  • 华为OD机试真题-不爱施肥的小布

    题目描述 某农场主管理了一大片果园 fields i 表示不同果林的面积 单位 m 2 现在要为所有的果林施肥且必须在n天之内完成 否则影响收成 小布是果林的工作人员 他每次选择一片果林进行施肥 且一片果林施肥完后当天不再进行施肥作业 假设
  • C++复合类型

    1 数组 数组声明应该指出元素类型 数组名和元素个数 数组的初始化需要遵循以下规则 a 只有定义数组时才能使用初始化 此后就不能使用了 也不能将一个数组赋给另一个数组 int narray1 4 1 2 3 4 int narray2 4
  • 操作系统 实验二 银行家算法

    题目描述 已知进程 P0 P1 P2 P3 P4 有三类系统资源A B C的数量分别为10 5 7 在T0时刻的资源分配情况如下图所示 1 若进程P1请求资源 发出请求向量Request1 1 0 2 编写程序用银行家算法判断系统能否将资源