操作系统动态分区分配与回收

加粗的代码是我自己加上的,但是调用就不太会了,结构体数组怎么调用?

还有用结构体数组做的这个分配算法怎么回收分区?请会的给讲一讲,这是老师留的一个作业,我想了两节课了不会。。

#include<stdio.h>

#define N 100

typedef struct 

{

int Free[N];        //空闲分区大小

int  add[N];            //空闲分区起始地址

char PName[N];          //作业名称

int PNeed[N];           //作业需求空间大小

int state[N];                 //作业分配标志

int PFNum,PrNum;       //空闲分区个数,作业个数

}Process;


Process p;

int i,j,k,d,t;

char order[N][N];

char ch[N];

int m;    //作业个数

int n;   //空闲分区个数

void sort(struct p add[],int n)        //首次适应算法,按地址空间由低到高排序

{

for(i=0;i<n;i++)

{

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

{

if(p.add[j]>p.add[j+1])

{

t=p.add[j];

p.add[j]=p.add[j+1];

p.add[j+1]=t;

}

}

}

}



int Pinput()   //参数输入

{

printf("请输入空闲分区个数:\n");

scanf("%d",&n);

printf("请依次输入空闲分区大小(KB):\n");

for(i=0;i<n;i++)

{

scanf("%d",&p.Free[i]);

}

printf("请依次输入空闲分区的起始地址(KB):\n");

for(i=0;i<n;i++)

{

scanf("%d",&p.add[i]);

}

sort(p,n);    //调用排序函数

    printf("请输入作业个数:\n");

scanf("%d",&m);

printf("请依次输入作业名称:\n");

for(i=0;i<m;i++)

{

scanf("%c%c",&ch[i],&p.PName[i]);

}

printf("请依次输入作业大小(KB):\n");

for(i=0;i<m;i++)

{

scanf("%d",&p.PNeed[i]);

p.state[i]=0;

}

printf("分区信息如下:\n");

for(i=0;i<n;i++)

{

printf("| %d号分区\t",j+1);

printf("| %3dKB \n",p.Free[j]);

}

printf("\n");


printf("作业信息如下:\n");

for(i=0;i<m;i++)

{

printf("作业名%3c  \t",p.PName[i]);

}

printf("\n");

for(i=0;i<m;i++)

{

printf("大小  %3dkb\t",p.PNeed[i]);

}

printf("\n");

return 0;

}

int First() //首次适应算法

{

for(i=0;i<m;i++)

{

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

{   

//找到第一个合适的空闲分区

if((p.PNeed[i] <= p.Free[j]) && (!p.state[i]))

{

for(k=0;k<3;k++)        //记录作业分配

{

if(order[j][k]==NULL)

{

order[j][k]=p.PName[i];

break;

}

else

continue;

}

p.Free[j]=p.Free[j]-p.PNeed[i];

p.state[i]=1;

}

}

}

return 0;

}



int Poutput()     //结果输出

{


for(i=0;i<n;i++)

{

printf("| %d号分区\t",i+1);

printf("|");

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

{

if(order[i][j]==' ')

printf("  ");

else

printf("%2c",order[i][j]);

}

printf("\n");

}

printf("\n");


return 0;

}




void main()   //主函数

{

Pinput();

printf("分配结果:\n");

First();

Poutput();

}


li222881
浏览 1378回答 0
0回答
打开App,查看更多内容
随时随地看视频慕课网APP