当前位置:文档之家› 分区分配算法的实现

分区分配算法的实现

分区分配算法的实现
实验要求:
⏹分区空闲表要表示出分区号、始址、大小
⏹作业序列能够动态输入
⏹内存不足,必须有提示功能
⏹总结收获体会及对该题解的改进意见和见解
(红色字体为再修改处)
源代码:
/********************操作系统实验四:首次适应(first fit)算法的分区分配算法*******************/
#include<stdio.h>
void main()
{
int m,n,i,j,j0,k,k0,A[30][3],B[30];
printf("请输入空闲分区块数:");
scanf("%d",&m);
printf("\t分区号\t\t大小\t\t起始地址\n");
for(i=0;i<m;i++)
for(j=0;j<3;j++)
scanf("%d",&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;
}
}
}
printf("\n---------首次适应算法按地址从小到大排列后空闲区---------\n");
printf("\t分区号\t\t大小\t\t起始地址\n");
for(i=0;i<m;i++)
for(j=0;j<3;j++)
{
printf("\t%d\t",A[i][j]);
if(j==2)printf("\n");
}
printf("\n请输入要分配的作业数:");
scanf("%d",&n);
printf("请输入作业大小:\n");
for(j0=0;j0<n;j0++)
scanf("%d",&B[j0]);
/* 空闲表首址和大小变换*/
i=j0=0;
do
{
while(A[i][1]<B[j0]&&i<m)
i++;
if(i==m)printf("\n内存不足,%dK大小的作业需要等待内存资源!\n",B[j0]);
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);
printf("\n---------首次适应算法分区分配后的空闲区---------\n");
printf("\t分区号\t\t大小\t\t起始地址\n");
for(i=0;i<m;i++)
for(j=0;j<3;j++)
{
if(A[i][1])
printf("\t%d\t",A[i][j]);
if(j==2)printf("\n");
}
}
/****************操作系统实验四:最佳适应(best fit)算法的分区分配算法*****************/
#include<stdio.h>
void main()
{
int m,n,i,j,j0,k,k0,A[30][3],B[30];
printf("请输入空闲分区块数:");
scanf("%d",&m);
printf("\t分区号\t\t大小\t\t起始地址\n");
for(i=0;i<m;i++)
for(j=0;j<3;j++)
scanf("%d",&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;
}
}
}
printf("\n---------最佳适应算法按地址从小到大排列后空闲区---------\n");
printf("\t分区号\t\t大小\t\t起始地址\n");
for(i=0;i<m;i++)
for(j=0;j<3;j++)
{
printf("\t%d\t",A[i][j]);
if(j==2)printf("\n");
}
printf("\n请输入要分配的作业数:");
scanf("%d",&n);
printf("请输入作业大小:\n");
for(j0=0;j0<n;j0++)
scanf("%d",&B[j0]);
/* 空闲表首址和大小变换*/
i=j0=0;
do
{
while(A[i][1]<B[j0]&&i<m)
i++;
if(i==m)printf("\n内存不足,%dK大小的作业需要等待内存资源!\n",B[j0]);
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);
printf("\n---------最佳适应算法分区分配后的空闲区---------\n");
printf("\t分区号\t\t大小\t\t起始地址\n");
for(i=0;i<m;i++)
for(j=0;j<3;j++)
{
if(A[i][1])
printf("\t%d\t",A[i][j]);
if(j==2)printf("\n");
}
}。

相关主题