版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、银行家算法:#include <iostream>#include <memory.h>using namespace std;void input();/ 实现数据的输入void findmax();/ 计算每个进程当前的需求void banker();/ 银行家算法void judge();/ 最后的判断int availabel4;/ 系统可利用资源向量int Max66;/ 最大需求矩阵int Allocation66;/ 系统已经分配给进程的资源统计int Need66;/ 进程总共需求的资源bool flag4;/ 该进程时候已经执行完成,如果执行完成,释放
2、内存资源int main()input(); findmax(); banker();judge();return 0;void init()memset(flag,0,sizeof(flag);void input()cout<<" 请依次输入系统中A, B,C,的数量:"<<endl;cin>>availabel1>>availabel2>>availabel3;cout<<" 请输入五个进程对系统中三类资源的需求量: "<<endl;for(int i=1;i<
3、;=5;i+)for(int j=1;j<=3;j+)cin>>Needi j;cout<<" 请输入系统资源的分配情况(系统已经分配给这五个进程的资源统 计)"<<e ndl;for(int i=1;i<=5;i+)for(int j=1;j<=3;j+)cin>>Allocationij;void findmax()for(int i=1;i<=5;i+)for(int j=1;j<=3;j+)Maxij=Needi j-Allocationi j;for(int i=1;i<=3;i+
4、)for(int j=1;j<=5;j+)/ 表示资源第一次分配之availabeli-=Allocationji;后系统剩下的资源void banker()for(int i=1;i<=5;i+)if(availabel1>=Maxi1&&availabel2>=Maxi2&&availabel3>Maxi3&&!flagi)availabel1+=Needi1;availabel2+=Needi2;availabel3+=Needi3;flagi=1;cout<<" 进程 "<
5、;<i<<" 已经得到执行 "<<endl;i=0; / 目的是为了使如果有一个进程执行完成,然后再 从第一个没有被执行的进程开始执行void judge()if(flag1=1&&flag2=1&&flag3=1&&flag4=1)cout<<" 系统安全,以上顺序为进程的执行顺序 "<<endl;elsecout<<" 系统不安全,形成死锁 "<<endl;LRU 算法:#include<iostre
6、am>#include<memory.h>using namespace std;int cheak(int p);void show();int num6;int count=0;int main()int a;memset(num,-1,sizeof(num);cout<<"*"<<endl;cout<<"* LRL 算法实现 *"<<endl;cout<<"* 输入 -1 结束输入 *"<<endl;cout<<"*
7、copyright liuhui *"<<endl;cout<<"*"<<endl;while(cin>>a&&a!=-1)int index=cheak(a);if(index!=0)for(int i=index+1; i<=count; i+)numi-1=numi;numcount=a;cout<<a<<"已经存在, 已经把它移动到最后使用的位置 :"<<count<<endl;cout<<" 现在
8、的顺序是: "<<endl;show();elseif(count<5)num+count=a;cout<<" 把 "<<a<<" 放在了第 "<<count<<" 个位置 "<<endl;cout<<" 现在的顺序是: "<<endl;show();elsecout<<" 把"<<n um1<<" 剔除"<&l
9、t;e ndl;for(int i=2; i<=5; i+)numi-1=numi;num5=a;"<<endl;cout<<"把"<<a<<"放在了第五个位置,其他的依次移位cout<<" 现在的顺序是: "<<endl;show();return 0;int cheak(int p)for(int i=1; i<=5; i+)if(numi=p)cout<<i<<endl;return i;return 0;void sho
10、w()for(int i=1; i<=5; i+)if(numi!=-1)cout<<numi<<" "cout<<endl;SSTF:#include <iostream>#include <algorithm>#include <memory.h>#include <math.h>using namespace std;int cmp(struct node a,struct node b);void count_dis(int count,int pos);#define M 1
11、0000int num,current_pos;struct nodeint xl;int dis;struct node snM;int main()cout<<" 请输入磁盘访问序列的个数 :"cin>>num;cout<<" 请依次输入磁盘访问序列.n.for(int i=1; i<=num; i+)cin>>sni.xl;cout<<" 请输入磁头的起始位置 :"cin>>current_pos;int count1=num;cout<<"
12、; 访问顺序: "<<endl;for(int i=1; i<=count1; i+)count_dis(num,current_pos);sort(sn+1,sn+num+1,cmp); / 进行排序cout<<snnum.xl<<"-"num-;cout<<" 结束 "<<endl;int cmp(struct node a,struct node b)return a.dis>b.dis;void count_dis(int count,int pos)for(int
13、 i=1; i<=count; i+)sni.dis=fabs(sni.xl-pos);current_pos=sncount.xl;/test: 98 183 37 122 14 124 65 67成组链接法: (模拟出来的,慎看)#include <iostream>#include <memory.h>using namespace std;void input();void menu();void Distribution(int use);void Recovery(int reuse);void show();void link();#define M
14、 100int numMM;int total;/ 资源总数int choice;/ 菜单的选择int count=0;/ 在初始化的时候貌似能用的到int use;/ 要分配多少块int reuse;/ 要收回多少块int pos=51;/int main()memset(num,-1,sizeof(num);input();while(1)menu();switch(choice)case 1:cout<<" 请输入要分配多少块: "<<endl;cin>>use;Distribution(use);break;case 2:cout
15、<<" 请输入要回收哪一块: "<<endl;cin>>reuse;Recovery(reuse);show();break;default:cout<<" 输入错误 "<<endl;break;cout<<endl;link();return 0;void input()cout<<" 请输入资源总数 (块数 ):"<<endl;cin>>total;cout<<" 请输入每一组的块数 "<
16、;<endl;cin>>one;int a=total/one;int b=total%one;for(int i=50+1; i<=50+a; i+)for(int j=1; j<=one; j+)numij=count+;for(int i=1; i<=b; i+)num50+a+1i=count+;for(int i=50+1; i<=50+a+1; i+)for(int j=1; j<=one; j+)if(numij!=-1)cout<<numij<<" "cout<<endl;v
17、oid menu()cout<<"n*n"<<endl;cout<<"1, 分配2,回收 "<<endl;cin>>choice;voidDistribution(int use)int count=0;int count1=0;for(int i=one; i-)if(numposi!=-1)numposi=-1; / 分配count+;if(count=use) break;elseif(i=1)pos+;i=one+1;for(int i=pos; i+)for(int j=1; j<
18、;=one; j+)if(numij!=-1)cout<<numij<<" "count1+;if(count1=total-use)total-=use;return ;cout<<endl;void Recovery(int reuse)for(int i=pos;i-)for(int j=1;j<=one;j+)if(numij=-1)total+;numij=reuse; return ;pos-;void show()int count=0;for(int i=pos;i+)for(int j=1;j<=one;j+
19、)if(numij!=-1)cout<<numij<<" "count+;if(count=total) return ;cout<<endl;void link()for(int i=pos;i+)cout<<numi1<<"-"生产者消费者:(多线程) #include <iostream> #include <stdio.h> #include <windows.h> #include <memory.h> using namespace s
20、td;#define M 1000HANDLE hMutex;int BufferM;int ProducerNum,ConsumerNum冲区的大小bool BufferFull=true; /truebool BufferEmpty=true;,BufferNum; / 生产者和消费者,代表缓冲区满/ture 代表缓冲区空DWORD WINAPI Producer(LPVOID lpParamter)while(1)WaitForSingleObject(hMutex, INFINITE);for(int a=0;a<BufferNum;a+)if(Buffera=0)Buffera
21、=1;cout<<" 生产于 "<<a<<"BufferFull=false;break;if(BufferFull)cout<<" 缓冲区满,不再生产Sleep(1000);位置 "<<endl;"<<endl;ReleaseMutex(hMutex);DWORD WINAPI Consumer(LPVOID lpParamter)while(1)WaitForSingleObject(hMutex, INFINITE);for(int b=BufferNum-1;b>=0;b-)if(Bufferb=1)Bufferb=0;cout<<" 消费于 "<<b<<" 位置 "
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 客户服务质量改善沟通函5篇范文
- 企业资产安全保障承诺函(9篇)
- 智能系统提升数据驱动决策能力方案
- 信息技术保障专业承诺书范文6篇
- 新一代智慧园区办公指南
- 公共安全卫生管理承诺书8篇范文
- 第六课 学习有策略教学设计小学心理健康南大版六年级-南大版
- 2026年高职(模具装配技术)模具试模调整综合测试题及答案
- 工程材料质量符合要求承诺书7篇范文
- 市场营销方案策划与实施步骤手册
- DB23∕T 3082-2022 黑龙江省城镇道路设计规程
- 甘肃省定西市市级名校2026届中考冲刺卷物理试题含解析
- 大学试用期考核管理办法
- 江苏棋牌室管理暂行办法
- 小学教育专业专升本试题带答案
- 2024年中国烟草总公司江西省公司考试真题试卷及答案
- 2025年苏州市中考历史试卷真题(含标准答案)
- 心血管疾病的三级预防
- 爱永在 二部合唱简谱
- 上海市浦东新区2024-2025学年高一下学期期中考试英语试卷(含答案)
- 电梯有限空间作业安全专项施工方案
评论
0/150
提交评论