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

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验4主存空间分配与回收

实验四 主存空间的分配和回收 目的和要求 实验目的 用高级语言完成一个主存空间的分配和回收程序,以加深对动态分区分配方式及其算法的理解。 实验要求 采用连续分配方式之动态分区分配存储管理,使用首次适应算法、最佳适应算法2种算法完成设计。 (1)**设计一个作业申请队列以及作业完成后的释放顺序,实现主存的分配和回收。采用分区说明表进行。 (2)或在程序运行过程,由用户指定申请与释放。 (3)设计一个空闲区说明表,以保存某时刻主存空间占用情况。把空闲区说明表的变化情况以及各作业的申请、释放情况显示。 [提示]: (1)? 动态分区(可变分区方式)是按作业需要的主存空间大小来分割分区的。当要装入一个作业时,根据作业需要的主存容量查看是否有足够的空闲空间,若有,则按需分配,否则,作业无法装入。假定内存大小为256KB,空闲区说明表格式为: ·起始地址——指出空闲区的起始地址; ·长度——一个连续空闲区的长度; ·状态——有两种状态,一种是“已分配”状态;另一种是“空表目”状态,表示该表项目前没有使用。 (2)? 采用首次适应算法分配回收内存空间。运行时,输入一系列分配请求和回收请求。 要求能接受来自键盘的空间申请及释放请求,能显示分区分配及回收后的内存布局情况。 2、源程序代码 #include stdio.h #include stdlib.h #include conio.h #include iostream.h #define getjcb(type) (type*)malloc(sizeof(type)) #define getsub(type) (type*)malloc(sizeof(type)) #define NULL 0 int num,num2; //要调度的作业数和要回收的区域数 int m=0; //已分配作业数 int flag; //分配成功标志 int isup,isdown; //回收区域存在上邻和下邻的标志 int is=0; struct jcb{ char name[10]; char state; int ntime; //所需时间 int size; //所需空间大小 int addr; //所分配分区的首地址 struct jcb *link; } *ready =NULL, *p,*q,*as=NULL; //作业队列ready,已分配作业队列as typedef struct jcb JCB; struct subarea{ //分区块 char name[10]; int addr; //分区首地址 int size; //分区大小 char state; struct subarea *link; } *sub=NULL,*r,*s,*cur; //空闲分区队列sub,当前分区指针cur typedef struct subarea SUB; void sort_sub() /*对空闲分区按从小到大排序*/ { SUB *first,*second; int insert=0; if((sub==NULL)||((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=second-link; } } if(insert==0)first-link=s; /*插在队尾*/ } } void sort_sub() /*对空闲分区按从小到大排序*/sort*/ { JCB *first; if(ready==NULL) ready=p; else{ first=ready; while(first-link!=NU

文档评论(0)

ldj215323 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档