操作系统实验四实验报告动态分区分配算法

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

操作系统实验四【实验题目】:动态分区分配算法【实验学时】:4学时【实验目的】通过这次实验,加深对动态分区分配算法的理解,进一步掌握首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的实现方法。【实验内容及要求】问题描述:设计程序模拟四种动态分区分配算法:首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的工作过程。假设内存中空闲分区个数为n,空闲分区大小分别为P1,…,Pn,在动态分区分配过程中需要分配的进程个数为m(m≤n),它们需要的分区大小分别为S1,…,Sm,分别利用四种动态分区分配算法将m个进程放入n个空闲分区,给出进程在空闲分区中的分配情况。程序要求:1)利用首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法四种动态分区分配算法模拟分区分配过程。2)模拟四种算法的分区分配过程,给出每种算法进程在空闲分区中的分配情况。3)输入:空闲分区个数n,空闲分区大小P1,…,Pn,进程个数m,进程需要的分区大小S1,…,Sm。4)输出:首次适应算法,循环首次适应算法,最佳适应算法,最坏适应算法,最终内存空闲分区的分配情况。实现源代码:#includeiostream#includefstream#includeiomanip#includestring#definemax100usingnamespacestd;intwork_num;intzone_num;structData{intdata;charname;};Data*d=newData[max];structTable{intdata;chararray[max];intlength;};Table*T=newTable[max];Table*temp=newTable[max];voidInit(){ifstreaminf(DTFQ.txt);inti,j;charch;infwork_num;cout作业数:work_numendl;infzone_num;cout空闲分区数:zone_numendl;cout作业为:;for(j=0;jwork_num;j++){inf.get(ch);d[j].name=ch;coutsetw(4)d[j].name;}coutendl;cout作业大小:;for(i=0;iwork_num;i++){infd[i].data;coutsetw(4)d[i].data;}coutendl;cout空闲分区:;for(j=0;jzone_num;j++){infT[j].data;temp[j].data=T[j].data;T[j].length=0;temp[j].length=0;coutsetw(4)T[j].data;}coutendl;}voidrenew(){intj;for(j=0;jzone_num;j++){T[j].data=temp[j].data;T[j].length=temp[j].length;}}voidre(){inti;for(i=0;izone_num;i++){T[i].array[T[i].length]='#';}}voidshow(){inti,j;re();for(i=0;izone_num;i++){if(T[i].data==temp[i].data)coutsetw(4)T[i].data;else{coutsetiosflags(ios::right)setw(4)T[i].datasetw(1);for(j=0;jT[i].length;j++){if(T[i].array[j]=='#')break;elsecoutsetiosflags(ios::right)T[i].array[j];}}}coutendl;}voidfirst_fit(){renew();coutfistfit:;inti,j;inttag=0;for(i=0;iwork_num;i++){for(j=0;jzone_num;j++){if(d[i].data=T[j].data){T[j].data=T[j].data-d[i].data;T[j].array[T[j].length]=d[i].name;T[j].length++;tag=0;break;}elsetag=1;}if(tag==1){cout作业太大,无满足条件分区!endl;break;}}//re();}voidnext_fit(){renew();coutnextfit:;inti,j;intm=0,tag=0,count=0;for(i=0;iwork_num;i++){for(j=m;jzone_num;j++){if(d[i].data=T[j].data){T[j].data=T[j].data-d[i].data;T[j].array[T[j].length]=d[i].name;T[j].length++;tag=0;m=j;break;}else{tag=1;count++;}}while(tag==1&&countzone_num){for(j=0;jm;j++){if(d[i].data=T[j].data){T[j].data=T[j].data-d[i].data;T[j].array[T[j].length]=d[i].name;T[j].length++;tag=0;break;}else{tag=1;count++;}}}if(tag==1&&count==zone_num){cout作业太大,无满足条件分区!endl;break;}}//re();}voidbest_fit(){renew();coutbestfit:;inti,j,k,temp,m;inttag=0,n=0;for(i=0;iwork_num;i++){for(j=0;jzone_num;j++){if(d[i].data=T[j].data){temp=T[j].data;m=j;inttag1=0;for(k=m+1;k=zone_num;k++){if(T[k].datatemp){if(T[k].data=d[i].data){temp=T[k].data;n=k;tag1=1;}}elseif(tag1==0)n=j;}T[n].data=temp-d[i].data;T[n].array[T[n].length]=d[i].name;T[n].length++;tag=0;break;}elsetag=1;}if(tag==1){cout作业太大,无满足条件分区!endl;break;}}//re();}voidworst_fit(){renew();coutworstfit:;inti,j,k,temp,m;inttag=0,n=0;for(i=0;iwork_num;i++){for(j=0;jzone_num;j++){if(d[i].data=T[j].data){inttag1=0;temp=T[j].data;m=j;for(k=m+1;k=zone_num;k++){if(T[k].datatemp){if(T[k].data=d[i].data){temp=T[k].data;n=k;tag1=1;}}elseif(tag1==0)n=j;}T[n].data=temp-d[i].data;T[n].array[T[n].length]=d[i].name;T[n].length++;tag=0;break;}elsetag=1;}if(tag==1){cout作业太大,无满足条件分区!endl;break;}}//re();}voidmain(){Init();first_fit();show();next_fit();show();best_fit();show();worst_fit();show();system(pause);}实验截图:

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功