欢迎来到天天文库
浏览记录
ID:19776229
大小:153.50 KB
页数:24页
时间:2018-10-06
《实验4主存空间分配与回收》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验四主存空间的分配和回收1.目的和要求1.1.实验目的用高级语言完成一个主存空间的分配和回收程序,以加深对动态分区分配方式及其算法的理解。1.2.实验要求采用连续分配方式之动态分区分配存储管理,使用首次适应算法、最佳适应算法2种算法完成设计。(1)**设计一个作业申请队列以及作业完成后的释放顺序,实现主存的分配和回收。采用分区说明表进行。(2)或在程序运行过程,由用户指定申请与释放。(3)设计一个空闲区说明表,以保存某时刻主存空间占用情况。把空闲区说明表的变化情况以及各作业的申请、释放情况显示。[提示]:(1) 动态分区(可变分区方式)是按作业需要的主存空间大小来分割
2、分区的。当要装入一个作业时,根据作业需要的主存容量查看是否有足够的空闲空间,若有,则按需分配,否则,作业无法装入。假定内存大小为256KB,空闲区说明表格式为:·起始地址——指出空闲区的起始地址;·长度——一个连续空闲区的长度;·状态——有两种状态,一种是“已分配”状态;另一种是“空表目”状态,表示该表项目前没有使用。(2) 采用首次适应算法分配回收内存空间。运行时,输入一系列分配请求和回收请求。要求能接受来自键盘的空间申请及释放请求,能显示分区分配及回收后的内存布局情况。2、源程序代码#include"stdio.h"#include#includ
3、e#include"iostream.h"#definegetjcb(type)(type*)malloc(sizeof(type))#definegetsub(type)(type*)malloc(sizeof(type))#defineNULL0intnum,num2;//要调度的作业数和要回收的区域数intm=0;//已分配作业数intflag;//分配成功标志intisup,isdown;//回收区域存在上邻和下邻的标志intis=0;structjcb{charname[10];charstate;intntime;//所需时间intsize
4、;//所需空间大小intaddr;//所分配分区的首地址structjcb*link;}*ready=NULL,*p,*q,*as=NULL;//作业队列ready,已分配作业队列astypedefstructjcbJCB;structsubarea{//分区块charname[10];intaddr;//分区首地址intsize;//分区大小charstate;structsubarea*link;}*sub=NULL,*r,*s,*cur;//空闲分区队列sub,当前分区指针curtypedefstructsubareaSUB;voidsort_sub()/*对空闲
5、分区按从小到大排序*/{SUB*first,*second;intinsert=0;if((sub==NULL)
6、
7、((s->size)<(sub->size)))/*插在队列之首*/{s->link=sub;sub=s;}else{first=sub;/*寻找适当的位置插入*/second=first->link;while(second!=NULL){if((s->size)<(second->size)){s->link=second;first->link=s;second=NULL;insert=1;}else{first=first->link;second
8、=second->link;}}if(insert==0)first->link=s;/*插在队尾*/}}voidsort_sub()/*对空闲分区按从小到大排序*/sort*/{JCB*first;if(ready==NULL)ready=p;else{first=ready;while(first->link!=NULL)first=first->link;first->link=p;p->link=NULL;}}voidlastsort()/*建立对已分配作业队列的排列函数,直接插在队列之尾sort3*/{JCB*fir;if(as==NULL)as=q;else
9、{fir=as;while(fir->link!=NULL)fir=fir->link;fir->link=q;q->link=NULL;}m++;}voidinput()/*建立作业控制块函数*/{inti;printf("请输入要调度的总作业数:");scanf("%d",&num);for(i=0;iname);printf("输入作业的大小:");scanf
此文档下载收益归作者所有