银行家算法
来源:互联网 发布:imap.126.com 端口 编辑:程序博客网 时间:2024/04/20 20:54
貌似我又变的懒了,好多天没有写日记了,虽然这几天天天加班,但是好像没有什么长进嘛。一个未来的同学请我写个东西,我想先在这mark下吧,呵呵,code没有经过严格的测试,不过我是按照操作系统教材里的步骤写的,希望没有什么大问题。下面是code
#include <iostream.h>
#include <fstream.h>
#define ResourcesTypes 3 //资源类型
#define ProcessesCount 5 //进程数目
#define TRUE 1
#define FALSE 0
int nAvailable[ResourcesTypes];//当前可用资源
int nResources[ResourcesTypes];//资源总个数,nResources[i]代表i类资源有多少个
int nPMaxNead[ProcessesCount][ResourcesTypes]; //该类进程最大需求
int nAllocation[ProcessesCount][ResourcesTypes];//已分配
int nNeed[ProcessesCount][ResourcesTypes];//需求
int nReq[ProcessesCount][ResourcesTypes];//当前请求
int nSequence[ProcessesCount]; //安全序列
int nWork[ProcessesCount]={0};//可提供给用户的临时工作向量
int nFinished=0;
bool Finish[ProcessesCount];
int initialize()
{
//......初始化数据,当然我没有全部写出来
ifstream fin("C://test.txt");
int i,j;
cout<<"请输入Available[]"<<endl;
for (i=0;i<ResourcesTypes;i++)
{
fin>>nAvailable[i];
}
cout<<"请输入Allocation[][]"<<endl;
for (i=0;i<ProcessesCount;i++)
{for(j=0;j<ResourcesTypes;j++)
fin>>nAllocation[i][j];
}
cout<<"请输入nNeed[][]"<<endl;
for (i=0;i<ProcessesCount;i++)
for(j=0;j<ResourcesTypes;j++)
fin>>nNeed[i][j];
fin.close();
return 0;
}
void testOut()
{
int i,j;
cout<<endl;
cout<<"请输出Available[]"<<endl;
for (i=0;i<ResourcesTypes;i++)
{
cout<<nAvailable[i]<<" ";
}
cout<<endl;
cout<<"请输出Allocation[][]"<<endl;
for (i=0;i<ProcessesCount;i++)
{for(j=0;j<ResourcesTypes;j++)
cout<<nAllocation[i][j]<<" ";
cout<<endl;
}
cout<<"请输出nNeed[][]"<<endl;
for (i=0;i<ProcessesCount;i++)
{ for(j=0;j<ResourcesTypes;j++)
cout<<nNeed[i][j]<<" ";
cout<<endl;
}
}
int bankerAlgorithm()
{
initialize();//初始化
//如果这时候有Request的话就给Request[][]赋值
block Request
{
}
/*判断
(1) 如果Request i[j]≤Need[i,j],便转向步骤(2);否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。
(2) 如果Requesti[j]≤Available[j],便转向步骤(3);否则,表示尚无足够资源,Pi须等待。
(3) 系统试探着把资源分配给进程P i,并修改下面数据结构中的数值:
Available[j]:= Available[j]-Request i[j];
Allocation[i,j]:= Allocation[i,j]+Request i[j];
Need[i,j]:= Need[i,j]-Request i[j];
(4) 系统执行安全性算法,检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程Pi,以完
成本次分配;否则,将本次的试探分配作废,恢复原来的资源分配状态,让进程Pi等待。
*/
block Judge
{
}
//安全检测
if(!bsecurity)
rollback;
return 0;
}
bool bsecurity()
{
bool bEnd = true,bTag;
int i,j,nLength=0;
nFinished=0;
for (i=0;i<ResourcesTypes;i++)
{
nWork[i] = nAvailable[i];
}
for (i=0;i<ProcessesCount;i++)
{
Finish[i] = false;
int nTotalNeed=0;
for (j=0;j<ResourcesTypes;j++)
{
nTotalNeed += nNeed[i][j];
}
if(nTotalNeed == 0)
{
Finish[i] = true;
nFinished++;
}
}
while(nFinished<ProcessesCount)
{
for (i=0;i<ProcessesCount;i++)
if (!Finish[i]){
bTag = true;
for (j=0;j<ResourcesTypes;j++)
{
if(nNeed[i][j]<=nWork[j])
bTag = bTag && true;
else
bTag =bTag && false;
}
if(bTag)
{
for (j=0;j<ResourcesTypes;j++)
nWork[j] += nAllocation[i][j];
Finish[i] = true;
nSequence[nLength++] = i;
}
}
nFinished++;
}
for (i=0;i<ProcessesCount;i++)
{
bEnd =bEnd && Finish[i];
}
return bEnd;
}
int main()
{
return 0;
}
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- What is Facebook's architecture?
- vector基本操作|随机生成乱序字符串
- 算式计算器C++实现代码(顺序栈结构 增加了一些功能 比如三角函数 求指教)
- Linux 驱动开发人员所需要做的工作内容
- MFC程序最小化到托盘
- 银行家算法
- 为什么会这样
- VC连接SQL SERVER数据库
- Android 怎样画视图
- 不成功便成仁
- 只有一列的CListCtrl如何保证无横向滚动条
- 替代 Reflector 的工具-- ILSpy
- C++实验题目:判断三角形
- TCP/IP之七:IP结构与IP分片