分区分配算法的实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

分区分配算法的实现

实验要求:

⏹分区空闲表要表示出分区号、始址、大小

⏹作业序列能够动态输入

⏹内存不足,必须有提示功能

⏹总结收获体会及对该题解的改进意见和见解

(红色字体为再修改处)

源代码:

/********************操作系统实验四:首次适应(first fit)算法的分区分配算法*******************/

#include

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

for(j=0;j<3;j++)

scanf("%d",&A[i][j]);

/* 按地址从小到大排列(直接选择排序) */

for(i=0;i

{

k0=i;

for(k=i+1;k

if(A[k][2]

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

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

scanf("%d",&B[j0]);

/* 空闲表首址和大小变换*/

i=j0=0;

do

{

while(A[i][1]

i++;

if(i==m)printf("\n内存不足,%dK大小的作业需要等待内存资源!\n",B[j0]);

if(i

{

A[i][1]=A[i][1]-B[j0];

A[i][2]=A[i][2]+B[j0];

}

j0++;i=0;

}while(j0

printf("\n---------首次适应算法分区分配后的空闲区---------\n");

printf("\t分区号\t\t大小\t\t起始地址\n");

for(i=0;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

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

for(j=0;j<3;j++)

scanf("%d",&A[i][j]);

/* 按空闲区大小从小到大排列(直接选择排序) */

for(i=0;i

{

k0=i;

for(k=i+1;k

if(A[k][1]

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

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

scanf("%d",&B[j0]);

/* 空闲表首址和大小变换*/

i=j0=0;

do

{

while(A[i][1]

i++;

if(i==m)printf("\n内存不足,%dK大小的作业需要等待内存资源!\n",B[j0]);

if(i

{

A[i][1]=A[i][1]-B[j0];

A[i][2]=A[i][2]+B[j0];

}

j0++;

/* 每次变换后,按空闲区大小从小到大排列(直接选择排序) */

for(i=0;i

{

k0=i;

for(k=i+1;k

if(A[k][1]

if(k0!=i)

{

for(j=0;j<3;j++)

{

相关文档
最新文档