ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:119.38KB ,
资源ID:18921765      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18921765.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(4分区式储器管理Word文档格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

4分区式储器管理Word文档格式.docx

1、3、存储管理:建议采取固定分区法管理内存。编写内存分配、内存回收算法。4、主界面设计:在界面上增加一个内存分配按钮、内存回收按钮、并将就绪队列显示区用做分区说明表的显示。触发内存分配按钮,弹出作业大小输入框,输入后调用内存分配函数,在分区说明表中看到分配的分区。触发内存回收按钮,弹出作业大小输入框,输入后调用内存回收函数,在分区说明表中看到回收分区状态的改变。5、功能测试:从显示出的分区说明表,可查看操作的正确与否。实验步骤1、主要数据结构设计1). 程序中自由链队列的结点类型可描述如下: struct freelinkint len, address; /* len为分区长度;address

2、为分区起始地址struct freelink /* next;2). 内存占用区用链表描述,其结点类型描述如下: struct busylinkchar name; /* 作业或进程名 name=S 表示OS占用int len , address;struct busylink *next; 3).设全程量:struct freelink *free_head=NULL; / 自由链队列(带头结点)队首指针 struct busylink *busy_head=NULL, / 占用区队列队(带头结点)首指针 struct busylink *busy_tail=NULL; / 占用区队列队尾指

3、针2、主要函数设计1)requireMemo(char name, int require) 函数名称: requireMemo(char name, int require)功能描述:在空闲区域链中找到第一个满足条件的结点,将其分配掉,如果结点的长度大于require,则剩下的又将作为一个空闲结点插入到空闲区域链中 输入参数:char name, int require输出参数:无程序流程图: 2、测试数据及运行结果1) 测试数据准备假定系统的内存共640K,初始状态为操作系统本身占用64K。在t1时间之后,有作业A、B、C、D分别请求8K、16K、64K、124K的内存空间;在t2时间之后

4、,作业C完成;在t3时间之后,作业E请求50K的内存空间;在t4时间之后,作业D完成。要求编程序分别输出t1、t2、t3、t4时刻内存的空闲区的状态。2)运行结果及说明a.测试目标:运用按最佳适应算法1(空闲区未归并时的)运行结果:b.测试目标:运用按最佳适应算法(空闲区归并时的)六、实验总结 本次实验采用最佳适应算法来分配内存,然后分别输出未进行内存回收时和进行回收时,每过5ms内存的分配情况,进行对比。通过此次实验我对内存分配、以及回收有了更加深刻的认识。七、程序源代码按最先适应算法#include #includestdlib.hstruct freelink int len, addr

5、ess; / len为分区长度; struct freelink * next; /内存占用区用链表描述,其结点类型描述如下:struct busylink char name; / 作业或进程名 name=S 表示OS占用 int len , address; struct busylink *next; ;/并设全程量: / 自由链队列带头结点)队首指针?struct busylink *busy_head=NULL, *busy_tail=NULL; / 占用区队列队(带头结点)首指针 / 设计子函数:void start(void) /* 设置系统初始状态*/ struct freel

6、ink * p; struct busylink *q; free_head=(struct freelink*)malloc(sizeof(struct freelink); free_head-next=NULL; / 创建自由链头结点 busy_head=busy_tail=(struct busylink*)malloc(sizeof(struct busylink); busy_head- / 创建占用链头结点 p=( struct freelink *)malloc(sizeof(struct freelink); p-address=64;len=640-64; /(OS占用了6

7、4K)next=p; q=( struct busylink *)malloc(sizeof(struct busylink); q-name=; /* S表示操作系统占用 */len=64;address=0;next=q; busy_tail=q;void requireMemo(char name, int require) /*模拟内存分配*/ struct freelink *w,*u,*v,*x,*y; struct busylink *p; x=free_head; y=free_head-next; while(y!=NULL) &(y-len if(y!=NULL) p=(s

8、truct busylink*)malloc(sizeof(busylink); p-name=name;address=y-address;len=require; busy_tail- /把p插入到busy_head的尾部 busy_tail=p; w=x- x-next=w- if(w-len=require) free(w); else w-address=w-address+require;len=w-len-require; u=free_head; v=free_head- while(v! (v-w-len)/如果此结点还有多余,就此又重新插入到空闲区域链中(按照长度由小到大的

9、次序排列) u=v; v=v- u-next=w;next=v; else printf(cant allocate!n);void freeMemo(char name) /* 模拟内存回收*/ struct busylink *p,*q; struct freelink *w,*u,*v,*s1=NULL,*s2=NULL; int len,address; int flag1=1,flag2=1; p=busy_head- while(p!=NULL)&(p-name!=name) /找到要回收的结点 q=p; p=p- if(p=NULL)%c is not existn,name);

10、 else if (p=busy_tail) busy_tail=q; q-next=p- len=p-len; address=p- free(p); w=(struct freelink*) malloc(sizeof(freelink); w-len=len;address=address; u=free_head; v=free_head- while(v! (flag1=1 | flag2=1) /归并算法 if(w-address=(v-address+v-len) &flag1) s1=v; u-next=s1- w-address=v-len+=v- v=v- flag1=0;

11、 else if(w-address+w-len)=v-address) &flag2) s2=v;next=s2- flag2=0; else if(s1! free(s1); if(s2! free(s2); if(v!len)void past(int time) /* 模拟系统过了时间time,用sleep(),或者用个空循环*/ Sleep(5);时间%d后:,time);void printlink() /* 输出内存空闲情况(自由链的结点) */ struct freelink *p; p=free_head- printf(无空闲区! while(p!首地址:%dt长度:%dn

12、,p-address,p-len);-nvoid printlink1() /* 输出内存占用的情况 */ 无内存占有区!名字:%ct首地址:name,p-/ 设计主函数:int main() int i;空闲区未归并,请输入1,归并时请输入2: scanf(%d,&i); start(); past(5); requireMemo(A,8);B,16);C,64);D,124);内存占用区为: printlink1();内存空闲区为: printlink(); past(10); freeMemo( past(15);E,50); past(20); if(i=2) freeMemo( ); return 0;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1