您的位置:首页 > 其它

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

2016-06-17 17:39 465 查看
#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);
}

}


  

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: