操作系统实验四实验报告动态分区分配算法.docx
《操作系统实验四实验报告动态分区分配算法.docx》由会员分享,可在线阅读,更多相关《操作系统实验四实验报告动态分区分配算法.docx(10页珍藏版)》请在冰豆网上搜索。
操作系统实验四实验报告动态分区分配算法
支配系统真验四之阳早格格创做
【真验题目】:
动向分区调配算法
【真验教时】:
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");
}
真验截图: