分区分配算法的实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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++) {