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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

动态分区存储管理方式的主存分配回收文档格式.docx

1、由于顺序表的长度必须是提前固 定,所以无论是“已分配区表”还是“空闲区表”都必须事先确定长度。他们的长度必须是 系统可能的最大项数,系统运行过程中才不会出错,因而在多数情况下,无论是“已分配区 表”还是“空闲区表”都有空闲栏目。已分配区表中除了分区起始地址、长度外,也至少还 有一项“标志”,如果是空闲栏目,内容为“空”,如果为某个作业占用分区的登记项,内容 为该作业的作业名;空闲区表中除了分区起始地址、长度外,也要有一项“标志” ,如果是空闲栏目,内容为“空”,如果为某个空闲区的登记项,内容为“未分配” 。在实际系统中,闲区表”可变分区管理方式将内存除操作系统占用区域外的空间看做一个大的空闲区

2、。 当作业要求装入内存时,根据作业需要内存空间的大小 查询内存中的各个空闲区,当从内存空间中找到一个大于或等于该作业大小的内存空闲区时, 选择其中一个空闲区, 按作业需求量划出一个分区装人该作业,作业执行完后,其所占的内存分区被收回, 成为一个空闲区。如果该空闲区的相邻分区也是空闲区,则需要将相邻空闲区合并成一个空闲区。四、实验结果程序代码:#in elude ioma nip.hfloat min size=5;int coun t1=0;int coun t2=0;#defi ne m 10#defi ne n 10structfloat address;float len gth;int

3、 flag;used_table n;free_tablem;void initialize(void);int distribute nt, float);int recycle nt);void show();void in itialize(void)int a;for(a=0; a=n-1; a+)used_tablea.flag=0;free_table0.address=1000;free_tableO.le ngth=1024; free_table0.flag=1;int distribute(i nt process, name, float n eed_le ngth)in

4、t i, k=-1;float ads, le n;int coun t=0;i=0;while(i=m-1)if(free_tablei.flag=1 & n eed_le ngth =free_tablei.le ngth)coun t+;if(co un t=1|free_tablei.le ngth free_tablek .len gth)k=i;i=i+1;if(k!=-1)if(free_tablek.len gth-need_le ngth)=mi nsize)free_tablek.flag=O;ads=free_tablek.address;len=free_tablek

5、.len gth;elselen=n eed_le ngth; free_tablek.address+=n eed_le ngth;free_tableken gth-=n eed_le ngth;while(used_tablei.flag!=O)i=i+1;if(i=n-1)used_tablei.address=ads; used_tablei.le ngth=le n; used_tablei.flag=process_ name; coun t1+;if(free_tablek.flag = 0)free_tablek.flag=1;free_tablek.address=ads;

6、 free_tablek .len gth=le n; free_tablek .len gth+=le n;n;coutvv内存分配区已满,分配失败!return 0;else cout 无法为该作业找到合适分区! nreturn process, name; nt process, name)int y=0;float recycle_address, recycle_le ngth;int i, j, k;int x;while(y=n-1 &used_tabley.flag!=process_ name) y=y+1; if(y=m|(k!=-1 &j!=-1)if(free_tabl

7、ei.flag=1)if(free_tablei.address+free_tablei.le ngth)=recycle_address)if(recycle_address+recycle_le ngth)=free_tablei.address)j=i;if(j!=-1)free_tablek.le ngth+=free_tablej.le ngth+recycle_le ngth; free_tablej.flag=O;free_tablek.le ngth+=recycle_le ngth;else if(j!free_tablej.le ngth+=recycle_le ngth;

8、 free_tablej.address=recycle_address;x=0;x=x+1;if(xfree_tablex.le ngth=recycle_le ngth; free_tablex.flag=1;used_tabley.flag=process_ name;空闲区已满,回收失败! return process_ name;void show()空闲区nfor(int i=0;i=count2;i+)vvfree_tablei.length 状态:vfree_tablei.flagvendl;cout已分配区nfor(i nt j=0;jco un t1;j+) 地址:used

9、_tablej.address作业长度:used_tablej.length作业名:used_tablej.flagvoid mai n()int choice;int job_ name;float n eed_memory;bool exitFlag=false; 动态分区分配方式的模拟 nin itialize();exitFlag)cout choice;switch(choice)case 0:exitFlag=true;break;case 1:请输入作业名和所需内存:job_ namen eed_memory; distribute(job_ name, n eed_memory

10、); break;case 2:int ID;请输入您要释放的分区号:ID;recycle(ID);case 3:show();内存分配回收实现截图(1)假定系统内存分配表允许的最大作业项为 10,当分配超过10时,提示内存分配区已满,分配失败”。+ -+ + + + + + + + + + + + + + + + + + + + *+ + + + + + + + + 空闲 区 *+*+*+ 也址:11M5 作业长度:83? 状态*丄+#+#+ 已分 酉己区 + + 4-+ + + + + *+ + + + + + + + + + + + + + + + + + + + + #+ + + +

11、+ +1=分配内存 2:回收内存3=查看分配 0: & 出i入您的操作 i11 25工乍业名和所需内存二內存分已满,WOi(2)、回收作业所占内存时,当输入的作业名不存在,回收失败,提示“该作业不存在”I *C: DocuMents and SettiiLgsAd&ini3t r at or1+ + + + + + +-fr + + + + + + + + +-fr + + + + + +-K + + + + -fr + H|- + + + *+ + + 闲 区 + + + +0并在空闲1 二4=+态二*骨9 +83+区r分W十己+ 0 + 1234567891 +十各各各各各各各各各各+业业

12、业业业业业业业业 + B72MR05487+ 1211221122 +虧虞虧:處處険處M:JS:+/K 咲 长长 长 /K+业业业业业业业业业业HIJ. .-1. 1.-I.-1. t .-IJI t . J.也址 11S5rill:比lt:Jh:ilh:此ih:如 +世世也世也世也世世也 +出i出-TV i t- t出(3)、当要释放某个作业时,将已分配表中此作业的标志置为区做相应登记* 1:-分配内存2:* 3 :查看分配险退 出请输入您要释放的分区号 21:分配内存 2:头查看分杞 吐退 出痔输入您的操作:3+ + + + + + 闲 区 +4- + + + + + + + + + +

13、+ + + + + + + + + 4-+ + + + + + +4- + + + + + + + + 态:1 态:1+ + + + + + + + + + + + + + + + -4-1- + + + + + + + + + + -|-+ + + +己分配区五、总结核心算法:/最优分配算法实现的动态分区 int distribute nt process, name, float n eed_le ngth) /k用于定位在空闲表中选择的未分配栏/核心的查找条件,找到最优空闲区=m-1) /循环找到最佳的空闲分区=free_tablei.le ngth) coun t+;if(count=

14、1|free_tablei.length free_tablek.length) k=i; if(k!if(free_tablek .len gth-need_le ngth)v=mi nsize) / 整个分配 /切割空闲区free_tablek.address+=n eed_le ngth; free_tableken gth-=n eed_le ngth;/循环寻找内存分配表中标志为空栏目的项=n-1) /找到,在已分配区表中登记一个表项used_tablei.le ngth=le n;else /已分配区表长度不足if(free_tablek.flag = 0) /将已做的整个分配撤销

15、free_tablek .len gth=le n;else /将已做的切割分配撤销free_tablek .len gth+=le n;内存分配区已满,分配失败!return process_ name;每一次的实践,都会有很大的收获。决定做这个题目的时候,就针对此题要解决的几个问题反复思考,重新翻开教科书把相关内容特别是算法原理认真细致 的看了一遍,设想会遇到的问题。在内存动态分配程序设计中,最优适应算法比 首次要难一些,要加上对分配后该分区是否能最好地利用的判断。 再一个问题是 回收时候的合并,对地址的修改不是很有把握。着手写程序后,半天才理清回收 的内存和上下邻合并的条件与关系, 写此处的代码时,逻辑上比较混乱,反复错 误反复修改了很多次才调试正确,这也是花了最多时间才得以正确实现的部分。

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

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