没有合适的资源?快使用搜索试试~ 我知道了~
操作系统实验-银行家算法.docx
资源推荐
资源详情
资源评论
操作系统实验-银行家算法
学号 P71514032 专业 计算机科学与技术 姓名
实验日期 2017.11.9 教师签字 成绩
实验报告
【实验名称】 银行家算法
【实验目的】
掌握银行家算法,用银行家算法模拟操作系统避免死锁的方法
【实验原理】
银行家算法又称“资源分配拒绝”法,其基本思想是,系统中的所有进程放
入进程集合,在安全状态下系统受到进程的请求后试探性的把资源分配给他,现
在系统将剩下的资源和进程集合中其他进程还需要的资源数做比较,找出剩余资
源能满足最大需求量的进程,从而保证进程运行完成后还回全部资源。这时系统
将该进程从进程集合中将其清除。此时系统中的资源就更多了。反复执行上面的
步骤,最后检查进程的集合为空时就表明本次申请可行,系统处于安全状态,可
以实施本次分配,否则,只要进程集合非空,系统便处于不安全状态,本次不能
分配给他。请进程等待
用 C 语言编写一个简单的银行家算法模拟程序,用银行家算法实现资源分配。
程序能模拟多个进程共享多种资源的情形。进程可动态地申请资源,系统按各进
程的申请动态地分配资源。要求程序具有显示和打印各进程的某一时刻的资源分
配表和安全序列;显示和打印各进程依次要求申请的资源数量以及为某进程分配
资源后的有关资源数据的情况
【数据结构和符号说明】
操作系统实验-银行家算法
可利用资源向量 Available
最大需求矩阵 Max
分配矩阵 Allocation
需求矩阵 Need
工作向量 Work
标记向量 Finish
char name[100][10];//定义最大 100 个进程,每个大小为 10
int Max[100][100]; //定义
int Allocation[100][100];//可利用资源向量资源数
int Need[100][100]; //需求矩阵
int avaiable[100]; //系统可利用资源
int avaiable1[100];
int state[100]; //进程状态数组
char name1[100][10];//进程名
int bigger; ;//是否大于
int N; //进程数
int n; //资源数
int counter;
函数:
void Input()//输入函数
void Init()//初始化
void output()//输出安全序列或等待
void insert_pcb()//请求进程或更新进程
void show()//显示界面与选择 int CmpRequestAvailable(int Pos,int n)//比
较 Request 和 Available 的大小
int CmpRequestNeed(int Pos,int n)//比较 Request 和 Need 的大小
void Reset(int n,int Pos)//更新 request 之后的 Need,Allocation,
Available 的值 void Banker()//银行家算法
【实验流程图及算法实现】
用 C 语言编写一个简单的银行家算法模拟程序,用银行家算法实现资源分配。
程序能模拟多个进程共享多种资源的情形。进程可动态地申请资源,系统按各进
程的申请动态地分配资源。要求程序具有显示和打印各进程的某一时刻的资源分
配表和安全序列;显示和打印各进程依次要求申请的资源数量以及为某进程分配
资源后的有关资源数据的情况
操作系统实验-银行家算法
【流程图】
开始
输入进程数目与资源个数
输入现有的资源个数及各进
程信息
计算每个进程所需的资源
数
是否满足当前进程
需求
输出信息
当前资源个数等于自
身加上该进程所拥有
进程数目,标记状态
进程状态释放
与否
转向下一个进程
是
否
已扫描到最后一
个进程
输出所有安全序列
结束
否
是
否
操作系统实验-银行家算法
代码:
#include<iostream>
using namespace std;
char name[100][10];定义最大 100 个进程,每个大小为 10
int Max[100][100]; //定义
int Allocation[100][100];//可利用资源向量资源数
int Need[100][100]; //需求矩阵
int avaiable[100]; //
int state[100]; //进程状态数组
int dayu; ;是否大于
int N;
int n;
void input ()
{
cout<<"输入进程个数"<<endl;
cin>>N;
cout<<"输入资源个数"<<endl;
cin>>n;
cout<<"系统现有的各资源的个数"<<endl;
for(int i=0; i<n; i++)
cin>>avaiable[i];
for(int i=0; i<N; i++)//输入
{
cout<<"输入第"<<i<<"个进程的名字"<<endl;
cin>>name[i];
cout<<"输入第"<<i<<"所需要各进程的最大资源数"<<endl;
for(int j=0; j<n; j++)
cin>>Max[i][j];
cout<<"输入第"<<i<<"现在所拥有的资源个数"<<endl;
for(int j=0; j<n; j++)
cin>>Allocation[i][j];
state[i]=0;
}
for(int i=0; i<N; i++)
for(int j=0; j<n; j++) //寻找需求矩阵
Need[i][j]=Max[i][j]-Allocation[i][j];
}
void yinhangjia()
{
int i,j,k;
for( i=0; i<N; i++)
{
剩余21页未读,继续阅读
资源评论
是空空呀
- 粉丝: 168
- 资源: 3万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功