实验4主存空间分配与回收

实验4主存空间分配与回收

ID:19776229

大小:153.50 KB

页数:24页

时间:2018-10-06

实验4主存空间分配与回收_第1页
实验4主存空间分配与回收_第2页
实验4主存空间分配与回收_第3页
实验4主存空间分配与回收_第4页
实验4主存空间分配与回收_第5页
资源描述:

《实验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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。