1 / 14
文档名称:

最坏适应算法-动态分区法存储.docx

格式:docx   大小:16KB   页数:14页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

最坏适应算法-动态分区法存储.docx

上传人:aishangni990 2019/6/6 文件大小:16 KB

下载得到文件列表

最坏适应算法-动态分区法存储.docx

文档介绍

文档介绍:阅读教材《计算机操作系统》第四章,掌握存储器管理相关概念和原理。编写程序模拟实现内存的动态分区法存储管理。内存空闲区使用自由链管理,采用最坏适应算法从自由链中寻找空闲区进行分配,内存回收时假定不做与相邻空闲区的合并。假定系统的内存共640K,初始状态为操作系统本身占用64K。在t1时间之后,有作业A、B、C、D分别请求8K、16K、64K、124K的内存空间;在t2时间之后,作业C完成;在t3时间之后,作业E请求50K的内存空间;在t4时间之后,作业D完成。要求编程序分别输出t1、t2、t3、t4时刻内存的空闲区的状态。实验代码带界面系统#include<>#include<>typedefstructlist{ 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->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)malloc(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->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; } returnNULL;}//查找前连接区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;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!=NUL