操作系统实验 银行家算法C++

这篇具有很好参考价值的文章主要介绍了操作系统实验 银行家算法C++。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实验目的:编程实现安全性算法及银行家算法,以帮助深刻理解银行家算法避免死锁的原理。

算法流程图:

 银行家算法怎么导入,算法

银行家算法怎么导入,算法 

实现代码:  

#include<iostream>
using namespace std;

const int p = 5;		//进程数
const int r = 4;		//资源种类

//输入函数
void input(int a[p][r], int b[p][r], int c[p][r], int d[r])		//a-max,b-allocation,c-need,d-available
{
	int i, j;
	cout << "输入max数据:\n";
	for (i = 0; i < p; i++)
		for (j = 0; j < r; j++)	cin >> a[i][j];
	cout << "输入allocation数据:\n";
	for (i = 0; i < p; i++)
		for (j = 0; j < r; j++)	cin >> b[i][j];
	cout << "输入need数据:\n";
	for (i = 0; i < p; i++)
		for (j = 0; j < r; j++)	cin >> c[i][j];
	cout << "输入available数据:\n";
	for (j = 0; j < r; j++)	cin >> d[j];
}

//比较函数
int com(int m[r], int n[r])		//比较结果为m中的元素全大于n中的元素返回1,否则返回0
{
	int i, flag = 0;
	for (i = 0; i < r; i++)
		if (m[i] < n[i])
		{
			flag = 1;
			break;
		}
	if (flag == 1)
		return 0;
	else
		return 1;
}

//安全性检验函数
int stest(int b[p][r], int c[p][r], int d[r])
{
	int i, j, k, l, flag = 0;
	int need[r], finish[p], work[r];
	for (i = 0; i < p; i++)
		finish[i] = 0;			//finish为1即表示available满足某一进程并让其实现
	for (i = 0; i < r; i++)
		work[i] = d[i];			//保存数据
	cout << "分配序列:\n";
	for (k = 0; k < p; k++)		//全搜索,直至实现或不可能实现
	{
		for (i = 0; i < p; i++)
		{
			if (finish[i] == 1)
				continue;
			else
			{
				for (j = 0; j < r; j++)
					need[j] = c[i][j];
				if (com(work, need))
				{
					finish[i] = 1;
					cout << i + 1 << '\t';
					for (l = 0; l < r; l++)
						work[l] = work[l] + b[i][l];
					break;
				}
			}
		}
	}
	cout << endl;
	for (l = 0; l < p; l++)
	{
		if (finish[l] == 0)
			flag = 1;
	}
	if (flag == 0)
		return 1;    //flag为记录finish是否有0存在的标记,当flag=0时,安全
	else
		return 0;
}

//申请进程后的安全性检验函数
void rtest(int b[p][r], int c[p][r], int d[r], int req[r], int n)		//req-request,n-第n个进程申请资源
{
	int i, j;
	int t[r];
	n = n - 1;
	for (i = 0; i < r; i++)
		t[i] = c[n][i];
	if (com(t, req))		//对request和need进行比较
	{
		if (com(d, req))	//对request和available进行比较
		{
			for (j = 0; j < r; j++)
			{
				b[n][j] = b[n][j] + req[j];
				c[n][j] = c[n][j] - req[j];
				d[j] = d[j] - req[j];
			}
			if (stest(b, c, d))
				cout << "第" << n + 1 << "个进程申请资源成功!\n";
			else
			{
				cout << "第" << n + 1 << "个进程申请资源失败,恢复以前状态。\n";
				for (j = 0; j < r; j++)
				{
					b[n][j] = b[n][j] - req[j];
					c[n][j] = c[n][j] + req[j];
					d[j] = d[j] + req[j];
				}
			}
		}
		else
			cout << "进程等待……\n";
	}
	else
		cout << "出错!\n";
}

int main()
{
	int j, n;			//n-第n个资源申请
	int flag1 = 1;		//flag1作为循环条件
	int max[p][r], allocation[p][r], need[p][r];
	int available[r], request[r];

	input(max, allocation, need, available);

	if (stest(allocation, need, available) == 1)
		cout << "初始状态安全!\n\n";
	else {
		cout << "初始状态不安全,请仔细检查!\n";
		return 0;
	}

	while (flag1)
	{
		cout << "输入申请资源的进程的序号:\n";
		cin >> n;

		cout << "输入request数据:\n";
		for (j = 0; j < r; j++)
		cin >> request[j];

		rtest(allocation, need, available, request, n);

		cout << "\n继续分配输入1,退出输入0:\n";
		cin >> flag1;
	}

	return 0;
}

验证数据:

银行家算法怎么导入,算法

运行结果: 

银行家算法怎么导入,算法

银行家算法怎么导入,算法  

说明:

本文章是在原作者的银行家算法文章基础上依据实验课要求修改和完善的,仅供参考,侵权删。 

原作者地址:避免死锁的银行家算法C++程序实现_谷页风的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-745719.html

到了这里,关于操作系统实验 银行家算法C++的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 操作系统-银行家算法

    目录 一、银行家算法 二、银行家算法的流程和数据结构 1.数据结构 2.步骤流程 3.安全性算法 三、举例 解题思路 答案 为了避免死锁,出现了银行家算法。 系统必须确保是否有足够的资源分配给一个进程,若有,再计算分配后系统是否会处于不安全状态,若安全,才会分配。

    2024年02月02日
    浏览(31)
  • 操作系统--银行家算法

    目录 1.产生死锁的原因及必要条件   1.1产生死锁的原因   1.2产生死锁的必要条件 2.处理死锁的方法 3.银行家算法 4.安全性算法 5.算法实现        如果一个进程集合里面的每个进程都在等待这个集合中的其他一个进程(包括自身)才能继续往下执行,若无外力他们将无法推

    2024年02月01日
    浏览(23)
  • 【操作系统】银行家算法个人出题例题 (含答案)

    1.银行家算法是代表性的避免死锁的算法,在进程调度中具有重要作用。请结合所学知识回答以下问题:(23分——加长版) (1)银行家算法使用的四个必要的数据结构是:可用资源向量Available,____________,分配矩阵Allocation,需求矩阵Need。(1分) (2)以下是银行家算法具体实现

    2024年02月12日
    浏览(25)
  • 操作系统银行家算法(JAVA/Python/C#/JavaScript/C/C++)代码实现

    银行家算法是一种资源分配和死锁避免算法,它通过模拟所有资源的预定最大可能数量的分配来测试安全性,然后进行“s状态”检查以测试可能的活动,然后决定是否应该允许继续分配。 Banker’s algorithm 之所以叫“银行家算法”,是因为它在银行系统中被用来检查贷款是否

    2024年02月06日
    浏览(57)
  • 银行家算法的实验报告

    一、实验内容 银行家算法是避免死锁的一种重要方法,本实验要求编写和调试一个简单的银行家算法程序。 1.设计进程对各类资源最大申请表示及初值的确定。 2.设定系统提供资源的初始状况。 3.设定每次某个进程对各类资源的申请表示。 4.编制程序,依据银行家算法

    2023年04月26日
    浏览(35)
  • 银行家算法 源码+实验报告(用了自取)

    XI`AN TECHNOLOGICAL UNIVERSITY 课程设计报告 实验课程名称 操作系统—银行家算法     专    业 :计算机科学与技术          班    级 :                姓    名 :                   学    号 :          实验学时 :                     

    2024年02月09日
    浏览(32)
  • 银行家算法

    银行家算法(Banker’s Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。 假设客户A、B、C 三人向银行贷款用于建房,分别需要贷款

    2024年02月02日
    浏览(29)
  • 银行家算法--申请资源

    问题描述: 输入N个进程(N=100),以及M类资源(M=100),初始化各种资源的总数,T0时刻资源的分配情况。例如: 假定系统中有5个进程{P0,P1,P2,P3,P4}和三类资源{A,B,C},各种资源的数量分别为10、5、7,在T0时刻的资源分配图如下: 输入申请资源的进程以及申请各类资源的数

    2024年02月03日
    浏览(50)
  • 银行家算法(C++实现)

    目录 一、银行家算法概述 二、银行家算法需要的数组结构 三、算法概述 1.安全性算法 2.银行家算法 四、代码实现 五、实验结果验证 银行家算法 (Banker\\\'s Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的

    2024年01月24日
    浏览(23)
  • C语言实现银行家算法

    银行家算法 最初是由荷兰计算机科学家艾兹赫尔·迪杰斯特拉(Edsger W. Dijkstra)于1965年提出的。当时他正致力于解决多道程序设计中产生的死锁问题。在多道程序设计中,由于不同进程之间共享有限的系统资源,如内存、I/O设备等,因此存在一个进程等待其他进程释放资源而

    2024年02月05日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包