我们现在上操作系统,老师让我们用C或C++写一个银行家算法,,但是我不知道该从何下手,更不用说写了,请哪位高手给我写写哈!必有高分!
解决方案 »
- directsound IDirectSoundCaptureBuffer8::Lock
- 没有合适的默认构造函数可用
- 请问怎样获得TXT文件的编码?
- 世界上最恶心的程序错误@@@@@@@@@@@@@@@@
- 如何在对话框(CDialog的派生类)中实现打印和打印预览功能,100分相送,不够再加
- 问大家一个问题:关于flashget和cuteftp下载速度的差别和网络优化的问题。分不够再加
- 求志同道合者:有正在看钱能的《C++大学教程》和《C++编程思想》的朋友吗?一起探讨?
- 有人懂活动目录吗?进来看看。
- 关于picture控件上图标拉长的问题
- 我的程序虽使用大量线程,但经检测绝无泄露,但一运行一会儿就只剩0.xM内存,可能是我在线程中大量使用CString 变量吗?
- 请各位给点思路:我要设计一个用于绘画逻辑电路图的软件,请问该怎么设计?
- 关于winxp家庭版的安装
#pragma hdrstop#pragma argsused
#include <windows.h>
#include "string.h"
#include "iostream.h"
#define M 5
#define N 3
#define FALSE 0
#define TRUE 1int MAX[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};int AVAILABLE[N]={10,5,7};int
ALLOCATION[M][N]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};int NEED[M][N]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};
int Request[N]={0,0,0};void main(int argc, char* argv[])
{
int i=0,j=0;
char flag='Y';
void showdata();
void changdata(int);
void rstordata(int);
int chkerr(int);
showdata();
while(flag=='Y'||flag=='y')
{
i=-1;
while(i<0||i>=M)
{
cout<<"请输入需申请资源的进程号(0-4):";
cin>>i;
if(i<0||i>=M)cout<<"输入的进程号不存在,重新输入!"<<endl;
}
cout<<" 请输入进程"<<i<<"申请的资源数"<<endl;
for (j=0;j<N;j++)
{
cout<<" 资源"<<j<<"的申请数是: ";
cin>>Request[j];
if(Request[j]>NEED[i][j])
{
cout<<"进程"<<i<<"申请的资源数大于进程"<<i<<"的"<<j<<"类资源的最大资源量!";
cout<<"WRONG!请重新选择!"<<endl<<endl;
flag='N';
break;
}
else
{
if(Request[j]>AVAILABLE[j])
{
cout<<"进程"<<i<<"申请的资源数大于系统可用"<<j<<"类资源的资源量!";
cout<<"WRONG!请重新选择!"<<endl<<endl;
flag='N';
break;
}
}
}
if(flag=='Y'||flag=='y')
{
changdata(i);
if(chkerr(i))
{
rstordata(i);
showdata();
}
else
showdata();
}
else
showdata();
cout<<endl;
cout<<"如想继续银行家算法演示,请按'y'键继续,请按或'n'键退出: ";
cin>>flag;
}
}void showdata()
{
int i,j;
cout<<endl<<endl<<" 银行家算法演示程序 "<<endl;Sleep(500);
cout <<endl<<"_______________________________________________"<<endl<<"系统可用的资源数为:"<<endl;
cout<<endl;
for (j=0;j<N;j++)cout<<" 资源"<<j<<":"<<AVAILABLE[j];
cout<<endl; cout<<endl;
cout<<"_______________________________________________"<<endl<<"各进程还需要的资源量:"<<endl<<endl;
for (i=0;i<M;i++)
{
cout<<"进程"<<i<<":";
for (j=0;j<N;j++)cout<<" 资源"<<j<<":"<<NEED[i][j];
cout<<endl;
}
cout<<endl;
cout<<"________________________________________________"<<endl<<"各进程已经得到的资源量:"<<endl<<endl;
for (i=0;i<M;i++)
{
cout<<"进程"<<i<<":";
for (j=0;j<N;j++)cout<<" 资源"<<j<<":"<<ALLOCATION[i][j];
cout<<endl;
}
cout<<endl;
};
void changdata(int k)
{
int j;
for (j=0;j<N;j++)
{
AVAILABLE[j]=AVAILABLE[j]-Request[j];
ALLOCATION[k][j]=ALLOCATION[k][j]+Request[j];
NEED[k][j]=NEED[k][j]-Request[j];
}
};
void rstordata(int k)
{
int j;
for (j=0;j<N;j++)
{
AVAILABLE[j]=AVAILABLE[j]+Request[j];
ALLOCATION[k][j]=ALLOCATION[k][j]-Request[j];
NEED[k][j]=NEED[k][j]+Request[j];
}
};
int chkerr(int s)
{
int WORK,FINISH[M],temp[M];
int i,j,k=0;
for(i=0;i<M;i++)FINISH[i]=FALSE;
for(j=0;j<N;j++)
{
WORK=AVAILABLE[j];
i=s;
while(i<M)
{
if (FINISH[i]==FALSE&&NEED[i][j]<=WORK)
{
WORK=WORK+ALLOCATION[i][j];
FINISH[i]=TRUE;
temp[k]=i;
k++;
i=0;
}
else
{
i++;
}
}
for(i=0;i<M;i++)
if(FINISH[i]==FALSE)
{
cout<<endl;
cout<<"SORRY! 本次资源申请不成功!"<<endl;
cout<<endl;
return 1;
}
}
cout<<endl;
cout<<"经安全性检查证明系统安全,本次分配成功。"<<endl;
cout<<endl;
cout<<"本次安全序列:";
for(i=0;i<M;i++)cout<<"进程"<<temp[i]<<"->";
cout<<endl<<endl;;
return 0;
};
chkerr()// 安全检测函数,我个人觉得你该修改,此算法是老师提的,我觉得老师有错误,~,当时要求每一人完成一个。后来的操作系统作业 我选择了 读者-写者 问题: http://blog.csdn.net/surstar/archive/2005/02/05/282109.aspx