操作系统实验四动态分区分配算法源代码最新最全.docx
- 文档编号:4980853
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:13
- 大小:56.94KB
操作系统实验四动态分区分配算法源代码最新最全.docx
《操作系统实验四动态分区分配算法源代码最新最全.docx》由会员分享,可在线阅读,更多相关《操作系统实验四动态分区分配算法源代码最新最全.docx(13页珍藏版)》请在冰豆网上搜索。
操作系统实验四动态分区分配算法源代码最新最全
实验四操作系统-动态分区分配算法
萨斯的发生的v设计程序模拟四种动态分区分配算法:
首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的工作过程。
假设内存中空闲分区个数为n,空闲分区大小分别为P1,…,Pn,在动态分区分配过程中需要分配的进程个数为m(m≤n),它们需要的分区大小分别为S1,…,Sm,分别利用四种动态分区分配算法将m个进程放入n个空闲分区,给出进程在空闲分区中的分配情况。
程序要求如下:
1)利用首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法四种动态分区分配算法模拟分区分配过程。
2)模拟四种算法的分区分配过程,给出每种算法进程在空闲分区中的分配情况。
3)输入:
空闲分区个数n,空闲分区大小P1,…,Pn,进程个数m,进程需要的分区大小S1,…,Sm,算法选择1-首次适应算法,2-循环首次适应算法,3-最佳适应算法,4-最坏适应算法。
4)输出:
最终内存空闲分区的分配情况。
代码实现:
#include
#include
#include
usingnamespacestd;
constintMaxNumber=100;
intFreePartition[MaxNumber];//空闲分区大小
intFirstPartition[MaxNumber];//1-首次适应算法
intCycleFirstPartition[MaxNumber];//2-循环首次适应算法
intBestPartition[MaxNumber];//3-最佳适应算法
intWorstPartition[MaxNumber];//4-最坏适应算法
intProcessNeed[MaxNumber];//进程需要的分区大小
intPartitionNum,ProcessNum;
charProcessName[MaxNumber];//进程名
charProcessPartition[MaxNumber];//进程分配的序列
intPartition[MaxNumber];
charstr[MaxNumber][MaxNumber];
voidFirstFit(intn,intm);
voidNextFit(intn,intm);
voidBestFit(intn,intm);
voidWorstFit(intn,intm);
voidPrint(intn,intm);
voidPrint2(intn,intm);
//========================================================
voidFirstFit(intn,intm)
{
cout<<"选择了首次适应算法!
"< cout< inti,j,k=0; for(i=0;i { FirstPartition[i]=FreePartition[i]; } for(j=0;j { for(i=0;i { if(ProcessNeed[j]<=FirstPartition[i]) { ProcessPartition[j]=i; //str[i][k]=ProcessName[j]; FirstPartition[i]=FirstPartition[i]-ProcessNeed[j]; break; } } } Print(n,m); cout<<"空间序号: "<<""; for(i=0;i { cout<<"|"< } cout< cout<<"分区大小: "<<""; for(i=0;i { cout<<"|"< : left)< } cout< cout<<"剩余分区大小: "; for(i=0;i { cout<<"|"< : left)< } cout< Print2(n,m); } voidNextFit(intn,intm) { cout<<"选择了循环首次适应算法! "< cout< inti,j,flag=0; for(i=0;i { CycleFirstPartition[i]=FreePartition[i]; } for(j=0;j { for(i=flag;i { if(ProcessNeed[j]<=CycleFirstPartition[i]) { ProcessPartition[j]=i; CycleFirstPartition[i]=CycleFirstPartition[i]-ProcessNeed[j]; flag=i+1; if(i==n-1) { flag=0; } break; } } } Print(n,m); cout<<"空间序号: "<<""; for(i=0;i { cout<<"|"< } cout< cout<<"分区大小: "<<""; for(i=0;i { cout<<"|"< : left)< } cout< cout<<"剩余分区大小: "; for(i=0;i { cout<<"|"< : left)< } cout< Print2(n,m); } voidBestFit(intn,intm) { cout<<"选择了最佳适应算法! "< cout< inti,j,flag=0,temp,id=0,flag1=0; for(i=0;i { BestPartition[i]=FreePartition[i]; } while(flag1 { flag=0; for(i=0;i { Partition[i]=0; } for(i=0;i { if(ProcessNeed[flag1]<=BestPartition[i]) { Partition[flag]=i; flag+=1; } } temp=BestPartition[Partition[0]]; id=Partition[0]; for(i=1;i { if(temp>BestPartition[Partition[i]]) { temp=BestPartition[Partition[i]]; id=Partition[i]; } } BestPartition[id]=BestPartition[id]-ProcessNeed[flag1]; ProcessPartition[flag1]=id; flag1+=1; } Print(n,m); cout<<"空间序号: "<<""; for(i=0;i { cout<<"|"< } cout< cout<<"分区大小: "<<""; for(i=0;i { cout<<"|"< : left)< } cout< cout<<"剩余分区大小: "; for(i=0;i { cout<<"|"< : left)< } cout< Print2(n,m); } voidWorstFit(intn,intm) { cout<<"选择了最坏适应算法! "< cout< inti,j,flag=0,temp,id=0,flag1=0; for(i=0;i { WorstPartition[i]=FreePartition[i]; } while(flag1 { flag=0; for(i=0;i { Partition[i]=0; } for(i=0;i { if(ProcessNeed[flag1]<=WorstPartition[i]) { Partition[flag]=i; flag+=1; } } temp=WorstPartition[Partition[0]]; id=Partition[0]; for(i=1;i { if(WorstPartition[Partition[i]]>temp) { temp=WorstPartition[Partition[i]]; id=Partition[i]; } } WorstPartition[id]=WorstPartition[id]-ProcessNeed[flag1]; ProcessPartition[flag1]=id; flag1+=1; } Print(n,m); cout<<"空间序号: "<<""; for(i=0;i { cout<<"|"< } cout< cout<<"分区大小: "<<""; for(i=0;i { cout<<"|"< : left)< } cout< cout<<"剩余分区大小: "; for(i=0;i { cout<<"|"< : left)< } cout< Print2(n,m); } voidchoice(intn,intm) { intintput; cout<<"\n请选择: 1.首次适应算法2.循环首次适应算法3.最佳适应算法4.最坏适应算法: "< cin>>intput; cout< switch(intput) { case1: FirstFit(n,m); choice(n,m); break; case2: NextFit(n,m); choice(n,m); break; case3: BestFit(n,m); choice(n,m); break; case4: WorstFit(n,m); choice(n,m); break; } cout< } voidPrint(intn,intm) { intj; cout<<"进程名: "; for(j=0;j { cout<<"|"< : left)< } cout< cout<<"进程分区大小: "; for(j=0;j { cout<<"|"< : left)< } cout< cout<<"分配结果: "< } voidPrint2(intn,intm) { inti,j; for(i=0;i { for(j=0;j { str[i][j]=0; } } cout<<"进程分配分区: "; for(i=0;i { intk=0; for(j=0;j { if(ProcessPartition[j]==i) { str[i][k]=ProcessName[j]; k+=1; } } } for(i=0;i { cout<<"|"; for(j=0;j { cout< (1)< } } cout< } //=============================================================== voidmain() { ifstreamin("yin.txt"); intn,m; inti,j; in>>n; for(i=0;i { in>>FreePartition[i]; } in>>m; for(j=0;j { in>>ProcessName[j]; } for(j=0;j { in>>ProcessNeed[j]; } choice(n,m); } 运行结果:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 动态 分区 分配 算法 源代码 最新
![提示](https://static.bdocx.com/images/bang_tan.gif)