采用可变式分区管理,使用首次适应算法实现主存分配与回收

采用可变式分区管理,使用首次适应算法实现主存分配与回收

#include
#include

struct PCB{
	int InitAdd;
	int EndAdd;
	int Length;
	int Release;
	char name[5];
	char state[5];
};

int N=6;//初始结构体个数 

//初始化空闲区和已分配区 
void Init(PCB *p){
	FILE *r=fopen("3-1.txt","r");
	printf("起始地址  长度  中止地址    name         状态\n");
	for(int i=0;i<6;i++){
	    fscanf(r,"%d%d%d%s%s\n",&p[i].InitAdd,&p[i].Length,&p[i].EndAdd,p[i].name,p[i].state);
	    printf("%6d%6d%6d%14s%14s\n",p[i].InitAdd,p[i].Length,p[i].EndAdd,p[i].name,p[i].state);
	}
	fclose(r);
}

//作业装入主存 
void insert(PCB *p,int i,int temp){
	if(p[i].Length==temp){
		p[i].Length=temp;
	    p[i].EndAdd=p[i].InitAdd+p[i].Length;
	    strcpy(p[i].name,"作业");
	    strcpy(p[i].state,"已分配");
	}
	else{
		for(int j=N;j>=i;j--)
	    p[j+1]=p[j];
	    p[i].Length=temp;
	    p[i].EndAdd=p[i].InitAdd+p[i].Length;
	    strcpy(p[i].name,"作业");
	    strcpy(p[i].state,"已分配");
	    p[i+1].InitAdd=p[i].EndAdd;
	    p[i+1].Length=p[i+1].EndAdd-p[i+1].InitAdd;
	    N++;
	}
}

//输出作业分匹配后的空闲区 
void print(PCB *p,int k){
	if(k==1)
	printf("作业分配成功\n");
	else if(k==0) 
	printf("作业等待\n");
	else if(k==2)
	printf("作业释放成功\n");
	printf("起始地址  长度   结束地址  name    状态\n");
	for(int i=0;i=temp){
				insert(p,i,temp);
				k=1;
				break;
			}
	}
	print(p,k);
} 

void mix(PCB *p,int i){
	if(strcmp(p[i-1].name,"空闲")==0){
		p[i-1].Length=p[i-1].Length+p[i].Length;
		p[i-1].EndAdd=p[i].EndAdd;
		for(int j=i;j

当中初始化中读入文件内容如下:
采用可变式分区管理,使用首次适应算法实现主存分配与回收_第1张图片
结果如下:
采用可变式分区管理,使用首次适应算法实现主存分配与回收_第2张图片
采用可变式分区管理,使用首次适应算法实现主存分配与回收_第3张图片
采用可变式分区管理,使用首次适应算法实现主存分配与回收_第4张图片

你可能感兴趣的:(操作系统,操作系统,可变式分区管理,首次适应算法)