实验四 主存空间的分配和回收--操作系统
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); } }
相关文章推荐
- CentOS6.5 源代码安装MySQL
- 第16周-阅读程序4(3)
- android 屏蔽系统自带键盘屏蔽KeyboardUtil
- 第16周 范型程序补充之map用法
- Android中EventBus详解
- 实验补做
- Android四大组件之Service详解
- sql 查看语句的性能
- javascript 面向对象基础(四)面向对象的继承
- IOS 开发过程中的 消息通知 小红点
- 图片压缩
- Ionic Js十七:侧栏菜单
- springMVC 多方法controller
- AsyncTask和Thread+Handler对比
- 微信隐藏代码功能大汇总-你不知道的微信命令行.doc
- Android 引用外部项目库笔记
- Python3 内建模块 hashlib、itertools、HTMLParser、urllib
- Python3 内建模块 datetime/collections/base64/struct
- 【C++】类模板基础概念以及用法
- 使用node+vue.js实现SPA应用,nodevue.jsspa应用