First_Best

  • 格式:docx
  • 大小:88.36 KB
  • 文档页数:6

操作系统实验报告
--分区算法(best,first)
专业:网络工程
姓名:李达
学好:0816040107
老师:魏
2011.12.10
实验目的:了解动态分区分配的原理,熟悉动态分区分配的五种算法中的最佳适应算法和首次适应算法,并且能够根据这几种算法的优缺点来为进程选择合适的算法。

实验内容:
#include<iostream>
using namespace std;
void First();
void Best();
void main()
{
int i;
do
{
cout<<"Please chosse 1(First) or 2(Bset):";
cin>>i;
if (i==1) First();
if (i==2) Best();
}while(i!=1||i!=2);
}
void First()
{ int m,n,i,j,j0,k,k0,A[30][3],B[30];
cout<<"Please input the number of Partitions:";
cin>>m;
cout<<"\nNumber\t\tSize\t\tBegin\n";
for(i=0;i<m;i++)
for(j=0;j<3;j++)
cin>>A[i][j];
/* 按地址从小到大排列*/
for(i=0;i<m-1;i++)
{ k0=i;
for(k=i+1;k<m;k++)
if(A[k][2]<A[k0][2])k0=k;
if(k0!=i)
{ for(j=0;j<3;j++)
{ int t;
t=A[k0][j];
A[k0][j]=A[i][j];
A[i][j]=t;
}
}
}
cout<<"\n----First分区算法----\n";
cout<<"Number\t\tSize\t\tBegin\n";
for(i=0;i<m;i++)
for(j=0;j<3;j++)
{ cout<<A[i][j]<<"\t\t";
if(j==2)cout<<"\n";
}
cout<<"\nPlease input the unmber of jobs:";
cin>>n;
cout<<"Please input the size of jobs:\n";
for(j0=0;j0<n;j0++)
cin>>B[j0];
/* 空闲表首址和大小变换*/
i=j0=0;
do
{ while(A[i][1]<B[j0]&&i<m)
i++;
if(i==m)cout<<"\nERROR!";
if(i<m)
{ A[i][1]=A[i][1]-B[j0];
A[i][2]=A[i][2]+B[j0];
}
j0++;i=0;
}while(j0<n);
cout<<"\n----First分区算法----\n";
cout<<"Number\t\tSize\t\tBegin\n";
for(i=0;i<m;i++)
for(j=0;j<3;j++)
{ if(A[i][1]) cout<<A[i][j]<<"\t\t";
if(j==2) cout<<"\n";
}
}
void Best()
{ int m,n,i,j,j0,k,k0,A[30][3],B[30];
cout<<"Please input the number of Partitions:";
cin>>m;
cout<<"\nNumber\t\tSize\t\tBegin\n";
for(i=0;i<m;i++)
for(j=0;j<3;j++)
cin>>A[i][j];
/* 按空闲区的容量大小从小到大排列*/
for(i=0;i<m-1;i++)
{ k0=i;
for(k=i+1;k<m;k++)
if(A[k][1]<A[k0][1])k0=k;
if(k0!=i)
{ for(j=0;j<3;j++)
{ int t;
t=A[k0][j];
A[k0][j]=A[i][j];
A[i][j]=t;
}
}
}
cout<<"\n----Best分区算法----\n";
cout<<"Number\t\tSize\t\tBegin\n";
for(i=0;i<m;i++)
for(j=0;j<3;j++)
{ cout<<A[i][j]<<"\t\t";
if(j==2)cout<<"\n";
}
cout<<"\nPlease input the unmber of jobs:";
cin>>n;
cout<<"Please input the size of jobs:\n";
for(j0=0;j0<n;j0++)
cin>>B[j0];
i=j0=0;
do
{ while(A[i][1]<B[j0]&&i<m)
i++;
if(i==m)cout<<"\nERROR!";
if(i<m)
{ A[i][1]=A[i][1]-B[j0];
A[i][2]=A[i][2]+B[j0];
}
j0++;
for(i=0;i<m-1;i++)
{ k0=i;
for(k=i+1;k<m;k++)
if(A[k][1]<A[k0][1])k0=k;
if(k0!=i)
{ for(j=0;j<3;j++)
{ int t;
t=A[k0][j];
A[k0][j]=A[i][j];
A[i][j]=t;
}
}
}
i=0;
}while(j0<n);
cout<<"\n----First分区算法----\n";
cout<<"Number\t\tSize\t\tBegin\n";
for(i=0;i<m;i++)
for(j=0;j<3;j++)
{ if(A[i][1]) cout<<A[i][j]<<"\t\t";
if(j==2) cout<<"\n";
}
}
实验结果:
实验总结:这次的实验,使我对动态分区分配算法有了初步的认识和了解,并能够根据算法的优缺点、进程的需要来选择合适的算法。