麻烦各位高手帮忙编个程序 小弟是新手 完全不懂

一、实验题目: 银行家死锁避免算法模拟

二、实验目的:通过本次实验掌握银行家死锁避免算法的基本思想。当进程提出资源申请时,能够用该算法判断是否拒绝进程请求。

三、实验内容
理解该算法是如何能够实现死锁避免的。编写一个银行家算法模拟程序用于处理进程的资源申请。
1。假设系统共有5类资源,分别以A、B、C、D、E来标识,每类资源的初始数量全部为50。
2。进程可以通过程序界面随时提交新的资源申请,提交的信息包括进程名称、对5类资源的最大需求数量。
3。每次当有资源申请时,先输出系统当前状态(5类资源当前可用数量,每个进程已分配的每类资源数量),再利用银行家算法判断是否该满足进程请求。如果可以分配,输出给该进程分配资源后的系统状态,再输出至少一个“安全序列”。

四、实验要求:
每人完成一份大作业实验报告。报告分设计思想、数据定义、处理流程、源程序、运行结果截图、设计体会等部分。
1) 给出数据定义和详细说明;
2) 给出实现思想和设计流程;
3) 调试完成源程序;
4) 屏幕观察运行结果;
5) 总结自己的设计体会;
编程语言及操作系统平台不限。
强烈希望各路高手 帮帮忙 做个这样的程序 把 报告分设计思想、数据定义、处理流程、源程序、运行结果截图、设计体会等部分等 详细的流程等给我 先谢谢了

1.银行家算法:
设进程i提出请求Request[j],则银行家算法按如下规则进行判断。
(1) 如果Request[j]≤Need[i,j],则转向(2),否则认为出错。
(2) 如果Request[j]≤Available[j],则转向(3);否则表示尚无足够资源,Pi需等待。
(3) 假设进程i的申请已获批准,于是修改系统状态:
Available[j]=Available[j]-Request[i]
Allocation[i,j]=Allocation[i,j]+Request[j]
Need[i,j]=Need[i,j]-Request[j]
(4) 系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。
2.安全性检查
(1) 设置两个工作向量Work=Available;Finish[i]=False
(2) 从进程集合中找到一个满足下述条件的进程,
Finish [i]=False;
Need[i,j]≤Work[j];
如找到,执行(3);否则,执行(4)
(3) 设进程获得资源,可顺利执行,直至完成,从而释放资源。
Work[j]=Work[i]+Allocation[i,j];
Finish[i]=True;
go to step 2;
(4) 如所有的进程Finish[i]=true,则表示安全;否则系统不安全。

1#include<iostream>
2#include<cstdlib>
3#define maxn 100
4using namespace std;
5
6typedef struct process_control_blank
7{
8 int finsh[maxn];
9 int Max[maxn][maxn];
10 int Allocation[maxn][maxn];
11 int need[maxn][maxn];
12 int request[maxn][maxn];
13 int Available[maxn];
14 int process[maxn];
15}Pcb;
16Pcb PCB;
17int work[maxn];
18int l;
19char Flag;
20int m,n;
21int safe(); //判断是否处于安全状态
22
23void input()
24{
25
26 cout<<"请输入进程数目:\n";
27 cin>>m;
28 cout<<"请输入资源数目:\n";
29 cin>>n;
30 cout<<"请输入Available矩阵\n";
31 for(int i=0;i<m;i++)
32 for(int j=0;j<n;j++)
33 {
34 cin>>PCB.Allocation[i][j];
35 }
36 cout<<"请输入Max矩阵\n";
37 for(int i=0;i<m;i++)
38 for(int j=0;j<n;j++)
39 {
40 cin>>PCB.Max[i][j];
41 }
42 for(int i=0;i<m;i++)
43 for(int j=0;j<n;j++)
44 {
45 PCB.need[i][j]=PCB.Max[i][j]-PCB.Allocation[i][j];
46 }
47 cout<<"请输入每个进程初始的资源可用数:\n";
48 for(int i=0;i<n;i++)
49 cin>>PCB.Available[i];
50
51 // cout<<"need 矩阵如下:\n";
52// for(int i=0;i<m;i++)
53// {for(int j=0;j<n;j++)
54// cout<<PCB.need[i][j]<<" ";
55// cout<<endl;
56// }
57
58}
59
60int safe()
61{
62 int i,j,k;
63 l=0;
64 for(i=0;i<n;i++)
65 work[i]=PCB.Available[i];
66 for(i=0;i<m;i++)
67 PCB.finsh[i]=0;
68
69 for(i=0;i<m;i++)
70 {
71 if(PCB.finsh[i]==1)
72 continue;
73 else
74 {
75 for(j=0;j<n;j++)
76 {
77 if(PCB.need[i][j]>work[j])
78 break;
79 }
80 if(j==n) //可分配
81 {
82 PCB.finsh[i]=1;
83 for(k=0;k<n;k++)
84 work[k]+=PCB.Allocation[i][k];
85 PCB.process[l++]=i;
86 i=-1; //重新开始
87 }
88 else
89 continue;
90 }
91 if(l==m)
92 {
93 cout<<"安全序列如下:\n";
94 for(k=0;k<l;k++)
95 { cout<<"P"<<PCB.process[k];
96 if(k!=l-1)
97 cout<<"-->";
98 }
99 cout<<endl;
100 return 1;
101 }
102 } //for
103 // return 0;
104}
105int Request()
106{
107 int i,j;
108 while(1)
109 {
110 cout<<"输入你要请求资源的进程(下标从0开始)\n";
111 int ps;
112 cin>>ps;
113 cout<<"输入该进程所请求的资源数目\n";
114 for(i=0;i<n;i++)
115 {
116 cin>>PCB.request[ps][i];
117 if(PCB.request[ps][i]>PCB.need[ps][i])
118 {
119 cout<<"请求的资源数目大于该进程所需要的数目\n";
120 return 0;
121 }
122 if(PCB.request[ps][i]>PCB.Available[i])
123 {
124 cout<<"请求的资源数目大于可用的资源数目\n";
125 return 0;
126 }
127 }
128 for(i=0;i<n;i++)
129 {
130 PCB.need[ps][i]-=PCB.request[ps][i];
131 PCB.Available[i]-=PCB.request[ps][i];
132 PCB.Allocation[ps][i]+=PCB.request[ps][i];
133 }
134 if(safe())
135 {
136 cout<<"同意分配请求\n";
137 }
138 else
139 {
140 cout<<"SORRY~~~~~你的请求被拒绝~~~\n";
141 for(i=0;i<n;i++)
142 {
143 PCB.need[ps][i]+=PCB.request[ps][i];
144 PCB.Available[i]+=PCB.request[ps][i];
145 PCB.Allocation[ps][i]-=PCB.request[ps][i];
146 }
147 }
148 for(i=0;i<n;i++)
149 PCB.finsh[i]=0;
150 cout<<"是否再次请求分配?是请按Y/y,否请按N/n";
151 while(1)
152 {
153 cin>>Flag;
154 if(Flag=='Y' || Flag=='y' || Flag=='N' || Flag=='n')
155 break;
156 else
157 {
158 cout<<"请按要求重新输入:\n";
159 continue;
160 }
161 }
162 if(Flag=='Y' || Flag=='y')
163 continue;
164 else
165 break;
166
167 }//while
168}
169int main()
170{
171 input();
172 safe();
173 Request();
174 system("pause");
175 return 0;
176}
177追问

能不能帮忙 按照 题目的要求 做好一个 可测试的 程序 及 设计思想、数据定义、处理流程、源程序、运行结果截图、设计体会等 做好一份 发给我 麻烦帮帮忙 我真的不懂 分不够可以再多加 谢谢

追答

兄弟,万事只能靠自己、、、如果你不自己动手做,你是永远学不好这么语言的。我们能做的只能给你思路,具体做还得靠你自己

温馨提示:答案为网友推荐,仅供参考