操作系统实验四实验报告动态分区分配算法.docx
《操作系统实验四实验报告动态分区分配算法.docx》由会员分享,可在线阅读,更多相关《操作系统实验四实验报告动态分区分配算法.docx(13页珍藏版)》请在冰豆网上搜索。
操作系统实验四实验报告动态分区分配算法
操作系统实验四
【实验题目】:
动态分区分配算法
【实验学时】:
4学时
【实验目的】
通过这次实验,加深对动态分区分配算法的理解,进一步掌握首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的实现方法。
【实验内容及要求】
问题描述:
设计程序模拟四种动态分区分配算法:
首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的工作过程。
假设内存中空闲分区个数为n,空闲分区大小分别为P1,…,Pn,在动态分区分配过程中需要分配的进程个数为m(m≤n),它们需要的分区大小分别为S1,…,Sm,分别利用四种动态分区分配算法将m个进程放入n个空闲分区,给出进程在空闲分区中的分配情况。
程序要求:
1)利用首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法四种动态分区分配算法模拟分区分配过程。
2)模拟四种算法的分区分配过程,给出每种算法进程在空闲分区中的分配情况。
3)输入:
空闲分区个数n,空闲分区大小P1,…,Pn,进程个数m,进程需要的分区大小S1,…,Sm。
4)输出:
首次适应算法,循环首次适应算法,最佳适应算法,最坏适应算法,最终内存空闲分区的分配情况。
实现源代码:
#include
#include
#include
#include
#definemax100
usingnamespacestd;
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;
inf>>work_num;
cout<<"作业数:
"<inf>>zone_num;
cout<<"空闲分区数:
"<cout<<"作业为:
";
for(j=0;j{
inf.get(ch);
d[j].name=ch;
cout<}
cout<cout<<"作业大小:
";
for(i=0;i{
inf>>d[i].data;
cout<}
cout<cout<<"空闲分区:
";
for(j=0;j{
inf>>T[j].data;
temp[j].data=T[j].data;
T[j].length=0;
temp[j].length=0;
cout<}
cout<}
voidrenew()
{
intj;
for(j=0;j{
T[j].data=temp[j].data;
T[j].length=temp[j].length;
}
}
voidre()
{
inti;
for(i=0;i{
T[i].array[T[i].length]='#';
}
}
voidshow()
{
inti,j;
re();
for(i=0;i{
if(T[i].data==temp[i].data)
cout<else
{
cout<:
right)<(1);
for(j=0;j{
if(T[i].array[j]=='#')
break;
else
cout<:
right)<}
}
}
cout<}
voidfirst_fit()
{
renew();
cout<<"fistfit:
";
inti,j;
inttag=0;
for(i=0;i{
for(j=0;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;
}
if(tag==1)
{
cout<<"作业太大,无满足条件分区!
"<break;
}
}
//re();
}
voidnext_fit()
{
renew();
cout<<"nextfit:
";
inti,j;
intm=0,tag=0,count=0;
for(i=0;i{
for(j=m;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&&count{
for(j=0;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<<"作业太大,无满足条件分区!
"<break;
}
}
//re();
}
voidbest_fit()
{
renew();
cout<<"bestfit:
";
inti,j,k,temp,m;
inttag=0,n=0;
for(i=0;i{
for(j=0;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].data{
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;
}
else
tag=1;
}
if(tag==1)
{
cout<<"作业太大,无满足条件分区!
"<break;
}
}
//re();
}
voidworst_fit()
{
renew();
cout<<"worstfit:
";
inti,j,k,temp,m;
inttag=0,n=0;
for(i=0;i{
for(j=0;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].data>temp)
{
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;
}
else
tag=1;
}
if(tag==1)
{
cout<<"作业太大,无满足条件分区!
"<break;
}
}
//re();
}
voidmain()
{
Init();
first_fit();
show();
next_fit();
show();
best_fit();
show();
worst_fit();
show();
system("pause");
}
实验截图:
如有侵权请联系告知删除,感谢你们的配合!