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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

操作系统课程设计动态分区分配存储管理.docx

1、操作系统课程设计动态分区分配存储管理操作系统课程设计动态分区分配存储管理$吕 霆计算机10-01班第一章 课程设计概述 设计任务:动态分区分配存储管理 设计要求建立描述内存分配状况的数据结构; 建立描述进程的数据结构; 使用两种方式产生进程:(a)自动产生,(b)手工输入; 在屏幕上显示内存的分配状况、每个进程的执行情况; 建立分区的分配与回收算法,支持紧凑算法; 时间的流逝可用下面几种方法模拟:(a)按键盘,每按一次可认为过一个时间单位; (b) 响应WM_TIMER; 将一批进程的执行情况存入磁盘文件,以后可以读出并重放; 支持算法:首次适应算法、循环首次适应算法、最佳适应算法:最坏适应算

2、法。 设计目的 旨在让我们更好的了解动态分区管理方面的知识.第二章 原理及算法描述动态分区分配算法原理首次适应算法 * 算法概述:分配内存时,从链首开始顺序查找,找到满足的空闲分区则划出空间分配,余下的空闲空间仍保留在空闲链表中 * 实现方法:分配时从数组第一个元素开始比较,若符合条件则将该元素减去对应作业的值循环首次适应算法 * 算法概述:由首次适应算法演变,只是每次分配改为由上一次找到的空闲分区开始查找 * 实现方法:在首次适应算法的基础上增加一个值用于记录找到的空闲分区的位置最佳适应算法 * 算法概述:每次为作业分配内存时,总是把能满足要求、又是最小的空闲分区分配给作业 * 实现方法:我

3、们决定每次分配先把空闲分区按从小到大的顺序排列,然后将第一个匹配分区分配给作业最坏适应算法 * 算法概述:每次为作业分配内存时,总是挑选一个最大的空闲分区分割给作业使用 * 实现方法:算法与最佳适应算法几乎相同,仅在排序时把空闲分区表按从大到小的顺序排列,所以未作详细注释回收分区当进程运行完毕释放内存时,系统根据回收区的首址,从空闲区链(表)中找到相应的插入点,此时可能出现以下四种情况之一; 1)回收区与插入点的前一个空闲分区F1相邻接,此时应将回收区与插入点的前一分区合并,不必为回收区分配新表项,而只需修改其前一分区F1的大小. 2)回收分区与插入点的后一空闲分区F2相邻接,此时也可将两分区

4、合并,形成新的空闲分区,但用回收区的首址作为新空闲区的首址,大小为两者之和. 3)回收区同时与插入点的前,后两个分区邻接,此时将三个分区合并,使用F1的表项和F1的首址,取消F2的表项,大小为三者之和. 4)回收区既不与F1相邻接,又不与F2邻接.这时应为回收区单独建立一新表项,填写回收区的首址和大小,并根据其首址插入到空闲链中的适当位置.紧凑算法通过移动内存中的作业的位置,以把原来多个分散的小分区拼接成一个大分区的方法.第三章 开发环境此程序是本人利用c+语言在vs2012的开发环境中实现的 第四章 程序实现-数据结构#include #include #include using name

5、space std;ofstream stream;1)回收区上邻接着空闲盘块,下连接着已分配盘块(2)回收区下邻接着空闲盘块,上邻接着已分配盘块(3)回收区上下连接的都是空闲盘块(4)空闲区上下邻接的都是已分配盘块(5)要回收的盘块就是第一个盘块,并且向下邻接着空闲盘块(6)要回收的盘块就是第一个盘块,但是向下邻接着已分配盘块(7)要回收的盘块就是最后一个盘块,并且向上邻接的是空闲盘块(8)要回收的盘块就是最后一个盘块,但是向上邻接的是已分配盘块*/void apply_recycle() int i; int j; int k; if(m=1) ary103=0; n+; ary200=1

6、; ary201=ary101; ary202=ary102; vision(); else if(recycle=1) /coutary1 if(ary113!=2) cout要回收的盘块就是第一个盘块,并且向下邻接着空闲盘块endl; (, ios:app); stream要回收的盘块就是第一个盘块,并且向下邻接着空闲盘块endl; (); ary101=ary101+ary111; ary103=0; for(i=1;im;i+) ary1i0=ary1i+10-1; ary1i1=ary1i+11; ary1i2=ary1i+12; ary1i3=ary1i+13; /coutary1

7、i3ary1i3endl; m-; / cout k=0; vision(); /coutary103ary103endl; /coutary113ary113endl; /coutary123ary123endl; /coutary133ary133endl; for(j=0;jm;j+) coutary1j3ary1j3endl; if(ary1j3!=2) ary2k0=ary1j0; ary2k1=ary1j1; ary2k2=ary1j2; k+; n=k; vision(); else cout要回收的盘块就是第一个盘块,但是向下邻接着已分配盘块endl; (, ios:app);

8、 stream要回收的盘块就是第一个盘块,但是向下邻接着已分配盘块endl; (); ary103=0; k=0; for(j=0;jm;j+) /coutary1j3ary1j3endl; if(ary1j3!=2) ary2k0=ary1j0; ary2k1=ary1j1; ary2k2=ary1j2; k+; n=k; vision(); else if(recycle=m) if(ary1recycle-23!=2) cout要回收的盘块就是最后一个盘块,并且向上邻接的是空闲盘块endl; (, ios:app); stream要回收的盘块就是最后一个盘块,并且向上邻接的是空闲盘块en

9、dl; (); ary1recycle-23=0; ary1recycle-21=ary1recycle-21+ary1recycle-11; m-; k=0; for(j=0;jm;j+) /coutary1j3ary1j3endl; if(ary1j3!=2) ary2k0=ary1j0; ary2k1=ary1j1; ary2k2=ary1j2; k+; n=k; vision(); else cout要回收的盘块就是最后一个盘块,但是向上邻接的是已分配盘块endl; (, ios:app); stream要回收的盘块就是最后一个盘块,但是向上邻接的是已分配盘块endl; (); ary

10、1recycle-13=0; k=0; for(j=0;jm;j+) /coutary1j3ary1j3endl; if(ary1j3!=2) ary2k0=ary1j0; ary2k1=ary1j1; ary2k2=ary1j2; k+; n=k; vision(); else/剩下比较复杂的四种情况 if(ary1recycle-23!=2)&(ary1recycle3=2)/回收区上邻接着空闲盘块,下连接着已分配盘块 cout回收区上邻接着空闲盘块,下连接着已分配盘块endl; (, ios:app); stream回收区上邻接着空闲盘块,下连接着已分配盘块endl; (); ary1r

11、ecycle-21=ary1recycle-21+ary1recycle-11; for(i=recycle-1;im;i+) ary1i0=ary1i+10-1; ary1i1=ary1i+11; ary1i2=ary1i+12; ary1i3=ary1i+13; m-; k=0; for(j=0;jm;j+) /coutary1j3ary1j3endl; if(ary1j3!=2) ary2k0=ary1j0; ary2k1=ary1j1; ary2k2=ary1j2; k+; n=k; vision(); if(ary1recycle3!=2)&(ary1recycle-23=2)/回收

12、区下邻接着空闲盘块,上邻接着已分配盘块 cout回收区下邻接着空闲盘块,上邻接着已分配盘块endl; (, ios:app); stream回收区下邻接着空闲盘块,上邻接着已分配盘块endl; (); ary1recycle-23=0; ary1recycle-21=ary1recycle-21+ary1recycle-11; for(i=recycle-1;im;i+) ary1i0=ary1i+10-1; ary1i1=ary1i+11; ary1i2=ary1i+12; ary1i3=ary1i+13; m-; k=0; for(j=0;jm;j+) /coutary1j3ary1j3e

13、ndl; if(ary1j3!=2) ary2k0=ary1j0; ary2k1=ary1j1; ary2k2=ary1j2; k+; n=k; vision(); if(ary1recycle-23!=2)&(ary1recycle3!=2)/回收区上下连接的都是空闲盘块 cout回收区上下连接的都是空闲盘块endl; (, ios:app); stream回收区下邻接着空闲盘块,上邻接着已分配盘块endl; (); ary1recycle-21=ary1recycle-21+ary1recycle-11+ary1recycle1; cout回收区上下连接的都是空闲盘块endl; coutr

14、ecycle-2endl; for(i=recycle+1;im;i+) ary1recycle-10=ary1recycle+10-2; ary1recycle-11=ary1recycle+11; ary1recycle-12=ary1recycle+12; ary1recycle-13=ary1recycle+13; m=m-2; k=0; for(j=0;jm;j+) /coutary1j3ary1j3endl; if(ary1j3!=2) ary2k0=ary1j0; ary2k1=ary1j1; ary2k2=ary1j2; k+; n=k; vision(); if(ary1re

15、cycle-23=2)&(ary1recycle3=2)/空闲区上下邻接的都是已分配盘块 ary1recycle-13=0; k=0; for(j=0;jm;j+) /coutary1j3ary1j3endl; if(ary1j3!=2) ary2k0=ary1j0; ary2k1=ary1j1; ary2k2=ary1j2; k+; n=k; vision(); /紧凑算法void compact() int id1=0;/记录已经分配的内存数量 int id2;/循环量 int num_avl;/记录空闲盘块数量 int sum_avl=0;/总共空闲区大小 int num_apl=0;

16、/统计总共空闲区有多大 vision(); for(id2=0;id2n;id2+) sum_avl=sum_avl+ary2id21; for(id2=0;id2m;id2+) if(ary1id23=2) ary1num_apl0=num_apl+1; ary1num_apl1=ary1id21; if(num_apl=0) ary1num_apl2=0; else ary1num_apl2=ary1num_apl-11+ary1num_apl-12; ary1num_apl3=2; num_apl+; /coutnum_aplnum_aplendl; /最后一块空闲块 ary1num_a

17、pl0=num_apl+1; ary1num_apl1=sum_avl; ary1num_apl2=ary1num_apl-11+ary1num_apl-12; ary1num_apl3=0; m=num_apl+1;/包括最后一个空闲区 num_avl=0; for(id2=0;id2m;id2+) if(ary1id23!=2) ary2num_avl0=ary1id20; ary2num_avl1=ary1id21; ary2num_avl2=ary1id22; num_avl+; n=num_avl; vision();/主函数入口void main() int i; int j; i

18、nt num; int choice1; /操作选择标记 int choice2; int flag=1; /标记是否再执行 while(flag=1) cout*endl; cout* 信息产生方式 *endl; cout* 1: 自动生成 2: 手动输入 *endl; cout*endl; coutchoice1; if(choice1=1) num=rand()&10; q=num; int id3=2+rand()%8; m=id3;/内存区数量 create_apply(); create_pro(); if(choice1=2) create_zuoye(); create_fen

19、qu(); vision(); cout*-请选择处理算法-*endl; cout*1首次适应算法-2循环首次适应算法-3最佳适应算法 *endl; cout*4最坏适应算法-5紧凑算法-6回收算法 *endl; cout*-*id1; if(id1=1) first_fit(); if(id1=2) next_fit(); if(id1=3) best_fit(); if(id1=4) worst_fit(); if(id1=5) compact(); if(id1=6) cout*生成内存状态*endl; int id3=rand()%10; m=5;/内存区数量 create_apply(); vision(); cout请您从空闲列表中选出需要回收的内存块(必须是已分配):recycle; if(recyclem)|(recycle1) cout错误:内存中不存在此块!endl; else int id2=-9999; for(i=0;in;i+) if(ary2i0=recycle) cout错误:输入的为空闲盘块!endl; id2=1; break; if(id2=-9999) apply_recycle(); cout* endl; cout 是否继续演示别的算法!endl; cout 1-是 0-否 endl; cout* o; flag=o; )

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

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