欢迎来到天天文库
浏览记录
ID:53675017
大小:16.23 KB
页数:14页
时间:2020-04-05
《最坏适应算法-动态分区法存储.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、阅读教材《计算机操作系统》第四章,掌握存储器管理相关概念和原理。编写程序模拟实现内存的动态分区法存储管理。内存空闲区使用自由链管理,采用最坏适应算法从自由链中寻找空闲区进行分配,内存回收时假定不做与相邻空闲区的合并。假定系统的内存共640K,初始状态为操作系统本身占用64K。在t1时间之后,有作业A、B、C、D分别请求8K、16K、64K、124K的内存空间;在t2时间之后,作业C完成;在t3时间之后,作业E请求50K的内存空间;在t4时间之后,作业D完成。要求编程序分别输出t1、t2、t3、t4时刻内存的空闲区的状态。实验代码带界面系统#include2、.h>#includetypedefstructlist{intlen;charname;intaddress;structlist*next;}listNode,*listlink;charid='1';voidinit(listlink&q){q=(listlink)malloc(sizeof(listNode));if(!q)exit(-1);q->next=NULL;}//初始化intlength(listlinkfree){listlinkq;q=free->next;intlen=0;while(q!=NULL){len=len+q-3、>len;q=q->next;}returnlen;}//空闲区总长度listlinkDelist(charname,listlink&q){listlinka,b,c;a=q->next;b=q;while(a!=NULL){if(a->name==name){c=a->next;b->next=c;returna;}b=b->next;a=a->next;}returnNULL;}//按作业或进程名删除该结点voidinsert(listlink&q,intaddress,intlen,charname='F'){listlinka=(listlink)mall4、oc(sizeof(listNode));a->address=address;a->len=len;a->name=name;listlinkb=q;while(b->next!=NULL){b=b->next;}a->next=NULL;b->next=a;}//插入结点voidsort(listlink&q){listlinka,b;inttemp1,temp2;a=q->next;if(a==NULL)return;b=a->next;while(a->next!=NULL){while(b!=NULL){if(a->len<=b->len){temp1=a5、->address;temp2=a->len;a->len=b->len;a->address=b->address;b->address=temp1;b->len=temp2;}b=b->next;}a=a->next;b=a->next;}}//按长度从大到小排序listlinkfindpre(listlinkfree,intaddress){listlinka;a=free->next;while(a!=NULL){if(a->address+a->len==address){Delist(a->name,free);returna;}a=a->next;}r6、eturnNULL;}//查找前连接区listlinkfindnext(listlinkfree,intaddress,intlen){listlinka;a=free->next;while(a!=NULL){if(a->address==address+len){Delist(a->name,free);returna;}a=a->next;}returnNULL;}//查找后连接区voidfreeMemo(charname,listlink&free,listlink&busy){listlinka=Delist(name,busy);listlinkb,c;7、id++;b=findpre(free,a->address);c=findnext(free,a->address,a->len);if(b!=NULL&&c!=NULL){b->len=a->len+b->len+c->len;insert(free,b->address,b->len,id);sort(free);}//前连接区后连接区都存在elseif(b==NULL&&c!=NULL){a->len=a->len+c->len;insert(free,a->address,a->len,id);sort(free);}//前连接区不存在后连接区存在el
2、.h>#includetypedefstructlist{intlen;charname;intaddress;structlist*next;}listNode,*listlink;charid='1';voidinit(listlink&q){q=(listlink)malloc(sizeof(listNode));if(!q)exit(-1);q->next=NULL;}//初始化intlength(listlinkfree){listlinkq;q=free->next;intlen=0;while(q!=NULL){len=len+q-
3、>len;q=q->next;}returnlen;}//空闲区总长度listlinkDelist(charname,listlink&q){listlinka,b,c;a=q->next;b=q;while(a!=NULL){if(a->name==name){c=a->next;b->next=c;returna;}b=b->next;a=a->next;}returnNULL;}//按作业或进程名删除该结点voidinsert(listlink&q,intaddress,intlen,charname='F'){listlinka=(listlink)mall
4、oc(sizeof(listNode));a->address=address;a->len=len;a->name=name;listlinkb=q;while(b->next!=NULL){b=b->next;}a->next=NULL;b->next=a;}//插入结点voidsort(listlink&q){listlinka,b;inttemp1,temp2;a=q->next;if(a==NULL)return;b=a->next;while(a->next!=NULL){while(b!=NULL){if(a->len<=b->len){temp1=a
5、->address;temp2=a->len;a->len=b->len;a->address=b->address;b->address=temp1;b->len=temp2;}b=b->next;}a=a->next;b=a->next;}}//按长度从大到小排序listlinkfindpre(listlinkfree,intaddress){listlinka;a=free->next;while(a!=NULL){if(a->address+a->len==address){Delist(a->name,free);returna;}a=a->next;}r
6、eturnNULL;}//查找前连接区listlinkfindnext(listlinkfree,intaddress,intlen){listlinka;a=free->next;while(a!=NULL){if(a->address==address+len){Delist(a->name,free);returna;}a=a->next;}returnNULL;}//查找后连接区voidfreeMemo(charname,listlink&free,listlink&busy){listlinka=Delist(name,busy);listlinkb,c;
7、id++;b=findpre(free,a->address);c=findnext(free,a->address,a->len);if(b!=NULL&&c!=NULL){b->len=a->len+b->len+c->len;insert(free,b->address,b->len,id);sort(free);}//前连接区后连接区都存在elseif(b==NULL&&c!=NULL){a->len=a->len+c->len;insert(free,a->address,a->len,id);sort(free);}//前连接区不存在后连接区存在el
此文档下载收益归作者所有