实验四 主存空间的分配和回收--操作系统

#include<stdio.h>
#include<conio.h>
#include<string.h>
#define MAX 12
struct partition{
	
	char pn[10];
	int begin;
	int size;
	int end;   
	char status;  
	};
typedef struct partition PART;

PART Total[MAX] ;
PART userjob ;

void init(){

	strcpy(Total[0].pn,"No.1");
	Total[0].begin=0;
	Total[0].size=100;
	Total[0].end=100;
	Total[0].status='u';
}


void input(int num){

	int i=0;
	for(i=0;i<num;i++){
		//作业名
		printf("作业名:");
		scanf("%s" ,&Total[i+1].pn);
		//开始内存大小
		printf("内存大小:");
		scanf("%d",&Total[i+1].size);
		//作业状态
		Total[i+1].status = 'f';
		//作业开始大小
		Total[i+1].begin=Total[i].end;
		//作业结束大小
		Total[i+1].end=Total[i+1].begin+Total[i+1].size;

	}

}


void output(int num){
	int i=0;
	printf("内存名\t开始\t大小\t结束\t状态\n");	
		for(i=0;i<MAX;i++)
		{
			if(Total[i].size!=0){
			printf("%s \t %d \t %d \t %d \t %c \n" ,Total[i].pn,Total[i].begin,Total[i].size,Total[i].end,Total[i].status);
			}
		}


}

void inputjob(){
	printf("作业名:");
	scanf("%s" ,&userjob.pn);
	//开始内存大小
	printf("内存大小:");
	scanf("%d",&userjob.size);
	//作业状态
	userjob.status='u';
	//作业开始大小
	userjob.begin=0;
	//作业结束大小
	userjob.end=0;


}
//首次适应算法
int firstadapt(int num){        
	int i=0;
	for(i=0;i<=num;i++){	
		if(Total[i].status=='f'){
			if(Total[i].size==userjob.size){
				strcpy(Total[i].pn,userjob.pn);
				Total[i].status='u';
				printf("%d\n",userjob.size);
				output(num);
				return i;
			}
			else if(Total[i].size>userjob.size){
				strcpy(Total[num+1].pn,Total[i].pn);
				Total[num+1].size=Total[i].size-userjob.size;
				strcpy(Total[i].pn,userjob.pn);
				Total[i].end=Total[i].begin+userjob.size;
				Total[i].size=userjob.size;
				Total[i].status='u';
				Total[num+1].begin=Total[i].end;
				Total[num+1].end=Total[num+1].begin=+Total[num+1].size;
				Total[num+1].status='f';
				output(num);
				return i;
			}
			else
				break;
		}
	}
	return 0;
}
//循环首次适应算法
void infofirstadapt(int num){
	int i,j=0;
	int now = firstadapt(num);
	int flag = Total[now].size; 
		
	for(i=0;i<=num;i++){
		if(Total[i].status=='f'&&Total[i].size>=userjob.size){
			printf("%d\n",flag);
			for(j=i+1;j<=num;j++){
				if(Total[j].status=='f'&&Total[j].size>=userjob.size&&Total[j].size>flag){
					flag=Total[j].size;
					now=j;	
		
				}
		
			}
	
			break;	
		}
	
	}

	strcpy(Total[now].pn,userjob.pn);
	Total[now].status='u';
	printf("%d\n",userjob.size);
	Total[now].end=Total[now].begin+userjob.size;
	Total[now].size=userjob.size;
	output(num);
}

//最坏适应算法
void badlyfit(int num){
	int i,j=0;
	int flag; 
	int now;	
	for(i=0;i<=num;i++){
		if(Total[i].status=='f'&&Total[i].size>=userjob.size){
			now=i;
			flag=Total[i].size;
			printf("%d\n",flag);
			for(j=i+1;j<=num;j++){
				if(Total[j].status=='f'&&Total[j].size>=userjob.size&&Total[j].size>flag){
					flag=Total[j].size;
					now=j;	
		
				}
		
			}
	
			break;	
		}
	
	}

	strcpy(Total[now].pn,userjob.pn);
	Total[now].status='u';
	printf("%d\n",userjob.size);
	Total[now].end=Total[now].begin+userjob.size;
	Total[now].size=userjob.size;
	output(num);
}


void selecttypr(int select,int num){

	switch(select){
	case 1 : 
		printf("首次适应算法\n");
		firstadapt(num);
		break;
	case 2 : 
		printf("循环首次适应算法\n");
		infofirstadapt(num);
		break;
	case 3 : 
		printf("最佳适应算法\n");
		break;
	case 4 : 
		printf("最坏适应算法\n");
		badlyfit(num);
		break;
	default :
		printf("输入错误");
		break;

	}

}
//回收内存
void test(){
	
}


void main(){
	int num;
	int select;
	printf("初始化,设内存的总量为512k\n");
	printf("系统从低地址开始分配,占用100k\n");
	init();

//		printf("*********************************");
//		printf("1、插入内存 2、回收内存");

	printf("*********************************");
	printf("\n\n\n");
	printf("输入内存空闲块:");
	scanf("%d",&num);
	input(num);

	printf("*********************************");
	printf("\n\n\n");
	output(num);

	printf("*********************************");
	printf("\n\n\n");
	printf("用户输入作业:\n");
	inputjob();

	while(1){
		printf("*********************************");
		printf("\n\n\n");
		printf("用户选择分配算法\n");
		printf("\t\t 1.首次适应算法\n");
		printf("\t\t 2.循环首次适应算法\n");
		printf("\t\t 3.最佳适应算法\n");
		printf("\t\t 4.最坏适应算法\n");
		scanf("%d",&select);
		selecttypr(select,num);
	}
	

}

  

 

posted @ 2016-06-17 17:39  20蔡舜  阅读(296)  评论(0编辑  收藏  举报